rubocop 0.18.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubocop might be problematic. Click here for more details.

Files changed (398) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +65 -1
  4. data/Gemfile +0 -3
  5. data/LICENSE.txt +1 -1
  6. data/README.md +179 -77
  7. data/Rakefile +8 -0
  8. data/config/default.yml +151 -14
  9. data/config/enabled.yml +65 -8
  10. data/lib/rubocop.rb +19 -4
  11. data/lib/rubocop/cli.rb +2 -1
  12. data/lib/rubocop/comment_config.rb +97 -0
  13. data/lib/rubocop/config.rb +1 -1
  14. data/lib/rubocop/config_loader.rb +3 -2
  15. data/lib/rubocop/config_store.rb +6 -2
  16. data/lib/rubocop/cop/commissioner.rb +2 -2
  17. data/lib/rubocop/cop/cop.rb +22 -26
  18. data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -2
  19. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +1 -1
  20. data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
  21. data/lib/rubocop/cop/lint/block_alignment.rb +6 -6
  22. data/lib/rubocop/cop/lint/condition_position.rb +1 -1
  23. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  24. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +60 -0
  25. data/lib/rubocop/cop/lint/else_layout.rb +1 -1
  26. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  27. data/lib/rubocop/cop/lint/end_alignment.rb +14 -12
  28. data/lib/rubocop/cop/lint/end_in_method.rb +1 -1
  29. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  30. data/lib/rubocop/cop/lint/eval.rb +1 -1
  31. data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
  32. data/lib/rubocop/cop/lint/literal_in_condition.rb +13 -2
  33. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +28 -0
  34. data/lib/rubocop/cop/lint/loop.rb +4 -4
  35. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
  36. data/lib/rubocop/cop/lint/require_parentheses.rb +6 -6
  37. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  38. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +2 -2
  39. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +30 -0
  40. data/lib/rubocop/cop/lint/syntax.rb +5 -5
  41. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  42. data/lib/rubocop/cop/lint/useless_assignment.rb +5 -5
  43. data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
  44. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
  45. data/lib/rubocop/cop/lint/void.rb +5 -5
  46. data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +8 -5
  47. data/lib/rubocop/cop/mixin/code_length.rb +2 -2
  48. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +7 -7
  49. data/lib/rubocop/cop/mixin/configurable_max.rb +1 -1
  50. data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
  51. data/lib/rubocop/cop/mixin/if_then_else.rb +1 -1
  52. data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -1
  53. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +2 -2
  54. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +3 -2
  55. data/lib/rubocop/cop/mixin/space_inside.rb +1 -1
  56. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -0
  57. data/lib/rubocop/cop/mixin/string_help.rb +4 -4
  58. data/lib/rubocop/cop/{offence.rb → offense.rb} +7 -7
  59. data/lib/rubocop/cop/rails/action_filter.rb +73 -0
  60. data/lib/rubocop/cop/rails/default_scope.rb +1 -1
  61. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +1 -1
  62. data/lib/rubocop/cop/rails/output.rb +1 -10
  63. data/lib/rubocop/cop/rails/read_attribute.rb +1 -1
  64. data/lib/rubocop/cop/rails/scope_args.rb +33 -0
  65. data/lib/rubocop/cop/rails/validation.rb +1 -1
  66. data/lib/rubocop/cop/style/access_modifier_indentation.rb +1 -1
  67. data/lib/rubocop/cop/style/accessor_method_name.rb +2 -2
  68. data/lib/rubocop/cop/style/alias.rb +2 -2
  69. data/lib/rubocop/cop/style/align_array.rb +1 -1
  70. data/lib/rubocop/cop/style/align_hash.rb +29 -2
  71. data/lib/rubocop/cop/style/align_parameters.rb +16 -2
  72. data/lib/rubocop/cop/style/and_or.rb +2 -2
  73. data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
  74. data/lib/rubocop/cop/style/ascii_identifiers.rb +1 -1
  75. data/lib/rubocop/cop/style/attr.rb +1 -1
  76. data/lib/rubocop/cop/style/begin_block.rb +1 -1
  77. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  78. data/lib/rubocop/cop/style/block_nesting.rb +1 -1
  79. data/lib/rubocop/cop/style/blocks.rb +2 -2
  80. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +2 -2
  81. data/lib/rubocop/cop/style/case_equality.rb +1 -1
  82. data/lib/rubocop/cop/style/case_indentation.rb +2 -2
  83. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  84. data/lib/rubocop/cop/style/class_and_module_camel_case.rb +1 -1
  85. data/lib/rubocop/cop/style/class_and_module_children.rb +69 -0
  86. data/lib/rubocop/cop/style/class_methods.rb +1 -1
  87. data/lib/rubocop/cop/style/class_vars.rb +3 -3
  88. data/lib/rubocop/cop/style/collection_methods.rb +4 -4
  89. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  90. data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
  91. data/lib/rubocop/cop/style/constant_name.rb +1 -1
  92. data/lib/rubocop/cop/style/cyclomatic_complexity.rb +2 -2
  93. data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
  94. data/lib/rubocop/cop/style/documentation.rb +1 -1
  95. data/lib/rubocop/cop/style/dot_position.rb +10 -11
  96. data/lib/rubocop/cop/style/double_negation.rb +40 -0
  97. data/lib/rubocop/cop/style/empty_line_between_defs.rb +8 -1
  98. data/lib/rubocop/cop/style/empty_lines.rb +3 -2
  99. data/lib/rubocop/cop/style/empty_lines_around_access_modifier.rb +1 -1
  100. data/lib/rubocop/cop/style/empty_lines_around_body.rb +1 -1
  101. data/lib/rubocop/cop/style/empty_literal.rb +3 -3
  102. data/lib/rubocop/cop/style/encoding.rb +1 -1
  103. data/lib/rubocop/cop/style/end_block.rb +1 -1
  104. data/lib/rubocop/cop/style/end_of_line.rb +2 -2
  105. data/lib/rubocop/cop/style/even_odd.rb +2 -2
  106. data/lib/rubocop/cop/style/favor_join.rb +1 -1
  107. data/lib/rubocop/cop/style/file_name.rb +29 -0
  108. data/lib/rubocop/cop/style/final_newline.rb +1 -1
  109. data/lib/rubocop/cop/style/flip_flop.rb +2 -2
  110. data/lib/rubocop/cop/style/for.rb +2 -2
  111. data/lib/rubocop/cop/style/format_string.rb +66 -0
  112. data/lib/rubocop/cop/style/global_vars.rb +2 -2
  113. data/lib/rubocop/cop/style/hash_methods.rb +1 -1
  114. data/lib/rubocop/cop/style/hash_syntax.rb +3 -3
  115. data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -1
  116. data/lib/rubocop/cop/style/indent_array.rb +41 -0
  117. data/lib/rubocop/cop/style/indent_hash.rb +119 -0
  118. data/lib/rubocop/cop/style/indentation_consistency.rb +3 -11
  119. data/lib/rubocop/cop/style/indentation_width.rb +44 -23
  120. data/lib/rubocop/cop/style/lambda.rb +2 -2
  121. data/lib/rubocop/cop/style/lambda_call.rb +3 -3
  122. data/lib/rubocop/cop/style/leading_comment_space.rb +1 -1
  123. data/lib/rubocop/cop/style/line_end_concatenation.rb +7 -3
  124. data/lib/rubocop/cop/style/line_length.rb +2 -2
  125. data/lib/rubocop/cop/style/method_call_parentheses.rb +2 -2
  126. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
  127. data/lib/rubocop/cop/style/method_def_parentheses.rb +9 -7
  128. data/lib/rubocop/cop/style/module_function.rb +1 -1
  129. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
  130. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -1
  131. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -2
  132. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  133. data/lib/rubocop/cop/style/not.rb +1 -1
  134. data/lib/rubocop/cop/style/numeric_literals.rb +5 -5
  135. data/lib/rubocop/cop/style/op_method.rb +2 -2
  136. data/lib/rubocop/cop/style/parameter_lists.rb +1 -1
  137. data/lib/rubocop/cop/style/parentheses_around_condition.rb +5 -4
  138. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +143 -0
  139. data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
  140. data/lib/rubocop/cop/style/predicate_name.rb +1 -1
  141. data/lib/rubocop/cop/style/proc.rb +1 -1
  142. data/lib/rubocop/cop/style/raise_args.rb +2 -2
  143. data/lib/rubocop/cop/style/redundant_begin.rb +1 -1
  144. data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
  145. data/lib/rubocop/cop/style/redundant_return.rb +1 -1
  146. data/lib/rubocop/cop/style/redundant_self.rb +2 -2
  147. data/lib/rubocop/cop/style/regexp_literal.rb +45 -19
  148. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  149. data/lib/rubocop/cop/style/self_assignment.rb +73 -0
  150. data/lib/rubocop/cop/style/semicolon.rb +12 -8
  151. data/lib/rubocop/cop/style/signal_exception.rb +2 -2
  152. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  153. data/lib/rubocop/cop/style/single_line_methods.rb +38 -1
  154. data/lib/rubocop/cop/style/space_after_colon.rb +3 -3
  155. data/lib/rubocop/cop/style/space_after_comma.rb +1 -1
  156. data/lib/rubocop/cop/style/space_after_control_keyword.rb +1 -1
  157. data/lib/rubocop/cop/style/space_after_method_name.rb +11 -3
  158. data/lib/rubocop/cop/style/space_after_not.rb +1 -1
  159. data/lib/rubocop/cop/style/space_after_semicolon.rb +1 -1
  160. data/lib/rubocop/cop/style/space_around_equals_in_parameter_default.rb +41 -6
  161. data/lib/rubocop/cop/style/space_around_operators.rb +4 -4
  162. data/lib/rubocop/cop/style/space_before_block_braces.rb +63 -0
  163. data/lib/rubocop/cop/style/space_before_modifier_keyword.rb +1 -1
  164. data/lib/rubocop/cop/style/{space_around_block_braces.rb → space_inside_block_braces.rb} +15 -24
  165. data/lib/rubocop/cop/style/space_inside_hash_literal_braces.rb +14 -7
  166. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  167. data/lib/rubocop/cop/style/string_literals.rb +1 -1
  168. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  169. data/lib/rubocop/cop/style/tab.rb +1 -1
  170. data/lib/rubocop/cop/style/trailing_blank_lines.rb +2 -2
  171. data/lib/rubocop/cop/style/trailing_comma.rb +4 -4
  172. data/lib/rubocop/cop/style/trailing_whitespace.rb +1 -1
  173. data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
  174. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  175. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  176. data/lib/rubocop/cop/style/when_then.rb +1 -1
  177. data/lib/rubocop/cop/style/while_until_do.rb +1 -1
  178. data/lib/rubocop/cop/style/while_until_modifier.rb +2 -1
  179. data/lib/rubocop/cop/style/word_array.rb +2 -2
  180. data/lib/rubocop/cop/team.rb +24 -7
  181. data/lib/rubocop/cop/util.rb +3 -3
  182. data/lib/rubocop/cop/variable_inspector.rb +25 -13
  183. data/lib/rubocop/cop/variable_inspector/assignment.rb +1 -1
  184. data/lib/rubocop/cop/variable_inspector/reference.rb +1 -1
  185. data/lib/rubocop/cop/variable_inspector/scope.rb +1 -1
  186. data/lib/rubocop/cop/variable_inspector/variable.rb +2 -2
  187. data/lib/rubocop/cop/variable_inspector/variable_table.rb +1 -1
  188. data/lib/rubocop/file_inspector.rb +12 -13
  189. data/lib/rubocop/formatter/base_formatter.rb +4 -4
  190. data/lib/rubocop/formatter/clang_style_formatter.rb +2 -2
  191. data/lib/rubocop/formatter/disabled_config_formatter.rb +12 -12
  192. data/lib/rubocop/formatter/emacs_style_formatter.rb +3 -2
  193. data/lib/rubocop/formatter/file_list_formatter.rb +4 -4
  194. data/lib/rubocop/formatter/formatter_set.rb +2 -1
  195. data/lib/rubocop/formatter/fuubar_style_formatter.rb +76 -0
  196. data/lib/rubocop/formatter/json_formatter.rb +17 -16
  197. data/lib/rubocop/formatter/offense_count_formatter.rb +54 -0
  198. data/lib/rubocop/formatter/progress_formatter.rb +16 -16
  199. data/lib/rubocop/formatter/simple_text_formatter.rb +25 -25
  200. data/lib/rubocop/options.rb +8 -7
  201. data/lib/rubocop/processed_source.rb +3 -2
  202. data/lib/rubocop/source_parser.rb +1 -59
  203. data/lib/rubocop/version.rb +3 -3
  204. data/relnotes/0.19.0.md +70 -0
  205. data/rubocop-todo.yml +6 -6
  206. data/rubocop.gemspec +2 -1
  207. data/spec/rubocop/cli_spec.rb +431 -268
  208. data/spec/rubocop/comment_config_spec.rb +103 -0
  209. data/spec/rubocop/config_loader_spec.rb +4 -4
  210. data/spec/rubocop/cop/commissioner_spec.rb +7 -7
  211. data/spec/rubocop/cop/cop_spec.rb +17 -17
  212. data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +16 -16
  213. data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +5 -5
  214. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +19 -19
  215. data/spec/rubocop/cop/lint/block_alignment_spec.rb +52 -52
  216. data/spec/rubocop/cop/lint/condition_position_spec.rb +7 -7
  217. data/spec/rubocop/cop/lint/debugger_spec.rb +10 -10
  218. data/spec/rubocop/cop/lint/deprecated_class_methods_spec.rb +33 -0
  219. data/spec/rubocop/cop/lint/else_layout_spec.rb +7 -7
  220. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +4 -4
  221. data/spec/rubocop/cop/lint/end_alignment_spec.rb +33 -34
  222. data/spec/rubocop/cop/lint/end_in_method_spec.rb +5 -5
  223. data/spec/rubocop/cop/lint/ensure_return_spec.rb +4 -4
  224. data/spec/rubocop/cop/lint/eval_spec.rb +8 -8
  225. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +4 -4
  226. data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +3 -3
  227. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +65 -10
  228. data/spec/rubocop/cop/lint/literal_in_interpolation_spec.rb +21 -0
  229. data/spec/rubocop/cop/lint/loop_spec.rb +6 -6
  230. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +14 -14
  231. data/spec/rubocop/cop/lint/require_parentheses_spec.rb +15 -15
  232. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +21 -21
  233. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +16 -16
  234. data/spec/rubocop/cop/lint/string_conversion_in_interpolation_spec.rb +27 -0
  235. data/spec/rubocop/cop/lint/syntax_spec.rb +11 -11
  236. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +8 -8
  237. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +207 -169
  238. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +5 -5
  239. data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +4 -4
  240. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +17 -17
  241. data/spec/rubocop/cop/lint/void_spec.rb +8 -8
  242. data/spec/rubocop/cop/{offence_spec.rb → offense_spec.rb} +17 -17
  243. data/spec/rubocop/cop/rails/action_filter_spec.rb +69 -0
  244. data/spec/rubocop/cop/rails/default_scope_spec.rb +9 -9
  245. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +2 -2
  246. data/spec/rubocop/cop/rails/output_spec.rb +8 -18
  247. data/spec/rubocop/cop/rails/read_attribute_spec.rb +2 -2
  248. data/spec/rubocop/cop/rails/scope_args_spec.rb +25 -0
  249. data/spec/rubocop/cop/rails/validation_spec.rb +3 -3
  250. data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +38 -38
  251. data/spec/rubocop/cop/style/accessor_method_name_spec.rb +14 -14
  252. data/spec/rubocop/cop/style/alias_spec.rb +11 -11
  253. data/spec/rubocop/cop/style/align_array_spec.rb +23 -7
  254. data/spec/rubocop/cop/style/align_hash_spec.rb +111 -30
  255. data/spec/rubocop/cop/style/align_parameters_spec.rb +260 -187
  256. data/spec/rubocop/cop/style/and_or_spec.rb +6 -6
  257. data/spec/rubocop/cop/style/ascii_comments_spec.rb +3 -3
  258. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +5 -5
  259. data/spec/rubocop/cop/style/attr_spec.rb +2 -2
  260. data/spec/rubocop/cop/style/begin_block_spec.rb +2 -2
  261. data/spec/rubocop/cop/style/block_comments_spec.rb +3 -3
  262. data/spec/rubocop/cop/style/block_nesting_spec.rb +26 -26
  263. data/spec/rubocop/cop/style/blocks_spec.rb +8 -8
  264. data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +8 -8
  265. data/spec/rubocop/cop/style/case_equality_spec.rb +2 -2
  266. data/spec/rubocop/cop/style/case_indentation_spec.rb +21 -21
  267. data/spec/rubocop/cop/style/character_literal_spec.rb +6 -6
  268. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +4 -4
  269. data/spec/rubocop/cop/style/class_and_module_children_spec.rb +129 -0
  270. data/spec/rubocop/cop/style/class_length_spec.rb +9 -9
  271. data/spec/rubocop/cop/style/class_methods_spec.rb +8 -8
  272. data/spec/rubocop/cop/style/class_vars_spec.rb +4 -4
  273. data/spec/rubocop/cop/style/collection_methods_spec.rb +6 -6
  274. data/spec/rubocop/cop/style/colon_method_call_spec.rb +16 -16
  275. data/spec/rubocop/cop/style/comment_annotation_spec.rb +16 -16
  276. data/spec/rubocop/cop/style/constant_name_spec.rb +12 -12
  277. data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +16 -16
  278. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +6 -6
  279. data/spec/rubocop/cop/style/documentation_spec.rb +14 -14
  280. data/spec/rubocop/cop/style/dot_position_spec.rb +23 -26
  281. data/spec/rubocop/cop/style/double_negation_spec.rb +22 -0
  282. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +22 -14
  283. data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +4 -4
  284. data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +20 -20
  285. data/spec/rubocop/cop/style/empty_lines_spec.rb +17 -6
  286. data/spec/rubocop/cop/style/empty_literal_spec.rb +20 -20
  287. data/spec/rubocop/cop/style/encoding_spec.rb +5 -5
  288. data/spec/rubocop/cop/style/end_block_spec.rb +2 -2
  289. data/spec/rubocop/cop/style/end_of_line_spec.rb +4 -4
  290. data/spec/rubocop/cop/style/even_odd_spec.rb +18 -18
  291. data/spec/rubocop/cop/style/favor_join_spec.rb +7 -7
  292. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +7 -7
  293. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +3 -3
  294. data/spec/rubocop/cop/style/file_name_spec.rb +71 -0
  295. data/spec/rubocop/cop/style/final_newline_spec.rb +4 -4
  296. data/spec/rubocop/cop/style/flip_flop_spec.rb +4 -4
  297. data/spec/rubocop/cop/style/for_spec.rb +13 -13
  298. data/spec/rubocop/cop/style/format_string_spec.rb +136 -0
  299. data/spec/rubocop/cop/style/global_vars_spec.rb +7 -7
  300. data/spec/rubocop/cop/style/hash_methods_spec.rb +6 -6
  301. data/spec/rubocop/cop/style/hash_syntax_spec.rb +11 -11
  302. data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +29 -11
  303. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +1 -1
  304. data/spec/rubocop/cop/style/indent_array_spec.rb +136 -0
  305. data/spec/rubocop/cop/style/indent_hash_spec.rb +238 -0
  306. data/spec/rubocop/cop/style/indentation_consistency_spec.rb +69 -49
  307. data/spec/rubocop/cop/style/indentation_width_spec.rb +264 -128
  308. data/spec/rubocop/cop/style/lambda_call_spec.rb +14 -14
  309. data/spec/rubocop/cop/style/lambda_spec.rb +7 -7
  310. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +15 -15
  311. data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +11 -4
  312. data/spec/rubocop/cop/style/line_length_spec.rb +5 -5
  313. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +5 -5
  314. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +9 -9
  315. data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +19 -19
  316. data/spec/rubocop/cop/style/method_length_spec.rb +17 -17
  317. data/spec/rubocop/cop/style/method_name_spec.rb +21 -21
  318. data/spec/rubocop/cop/style/module_function_spec.rb +3 -3
  319. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +13 -13
  320. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +10 -10
  321. data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +3 -3
  322. data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +3 -3
  323. data/spec/rubocop/cop/style/nil_comparison_spec.rb +7 -7
  324. data/spec/rubocop/cop/style/not_spec.rb +6 -11
  325. data/spec/rubocop/cop/style/numeric_literals_spec.rb +8 -8
  326. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +1 -1
  327. data/spec/rubocop/cop/style/op_method_spec.rb +13 -13
  328. data/spec/rubocop/cop/style/parameter_lists_spec.rb +6 -6
  329. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +11 -10
  330. data/spec/rubocop/cop/style/percent_literal_delimiters_spec.rb +250 -0
  331. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +2 -2
  332. data/spec/rubocop/cop/style/predicate_name_spec.rb +3 -3
  333. data/spec/rubocop/cop/style/proc_spec.rb +4 -4
  334. data/spec/rubocop/cop/style/raise_args_spec.rb +20 -20
  335. data/spec/rubocop/cop/style/redundant_begin_spec.rb +6 -6
  336. data/spec/rubocop/cop/style/redundant_exception_spec.rb +6 -6
  337. data/spec/rubocop/cop/style/redundant_return_spec.rb +22 -22
  338. data/spec/rubocop/cop/style/redundant_self_spec.rb +14 -14
  339. data/spec/rubocop/cop/style/regexp_literal_spec.rb +88 -67
  340. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +17 -17
  341. data/spec/rubocop/cop/style/self_assignment_spec.rb +43 -0
  342. data/spec/rubocop/cop/style/semicolon_spec.rb +31 -17
  343. data/spec/rubocop/cop/style/signal_exception_spec.rb +29 -29
  344. data/spec/rubocop/cop/style/single_line_block_params_spec.rb +6 -6
  345. data/spec/rubocop/cop/style/single_line_methods_spec.rb +44 -6
  346. data/spec/rubocop/cop/style/space_after_colon_spec.rb +1 -1
  347. data/spec/rubocop/cop/style/space_after_comma_spec.rb +3 -3
  348. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +12 -12
  349. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +8 -8
  350. data/spec/rubocop/cop/style/space_after_not_spec.rb +3 -3
  351. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +1 -1
  352. data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +63 -21
  353. data/spec/rubocop/cop/style/space_around_operators_spec.rb +24 -24
  354. data/spec/rubocop/cop/style/space_before_block_braces_spec.rb +72 -0
  355. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +4 -4
  356. data/spec/rubocop/cop/style/{space_around_block_braces_spec.rb → space_inside_block_braces_spec.rb} +39 -41
  357. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +1 -1
  358. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +15 -15
  359. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +1 -1
  360. data/spec/rubocop/cop/style/special_global_vars_spec.rb +10 -10
  361. data/spec/rubocop/cop/style/string_literals_spec.rb +31 -31
  362. data/spec/rubocop/cop/style/symbol_array_spec.rb +9 -9
  363. data/spec/rubocop/cop/style/tab_spec.rb +3 -3
  364. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +3 -3
  365. data/spec/rubocop/cop/style/trailing_comma_spec.rb +32 -32
  366. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +5 -5
  367. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +39 -39
  368. data/spec/rubocop/cop/style/unless_else_spec.rb +1 -1
  369. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +12 -12
  370. data/spec/rubocop/cop/style/variable_name_spec.rb +21 -21
  371. data/spec/rubocop/cop/style/when_then_spec.rb +1 -1
  372. data/spec/rubocop/cop/style/while_until_do_spec.rb +8 -8
  373. data/spec/rubocop/cop/style/while_until_modifier_spec.rb +25 -7
  374. data/spec/rubocop/cop/style/word_array_spec.rb +23 -23
  375. data/spec/rubocop/cop/team_spec.rb +14 -14
  376. data/spec/rubocop/file_inspector_spec.rb +14 -12
  377. data/spec/rubocop/formatter/base_formatter_spec.rb +19 -19
  378. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +14 -14
  379. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +7 -7
  380. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +7 -7
  381. data/spec/rubocop/formatter/file_list_formatter_spec.rb +4 -4
  382. data/spec/rubocop/formatter/fuubar_style_formatter_spec.rb +129 -0
  383. data/spec/rubocop/formatter/json_formatter_spec.rb +23 -19
  384. data/spec/rubocop/formatter/offense_count_formatter_spec.rb +77 -0
  385. data/spec/rubocop/formatter/progress_formatter_spec.rb +27 -27
  386. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +16 -16
  387. data/spec/rubocop/options_spec.rb +7 -8
  388. data/spec/rubocop/source_parser_spec.rb +0 -54
  389. data/spec/spec_helper.rb +11 -7
  390. data/spec/support/file_helper.rb +1 -1
  391. data/spec/support/mri_syntax_checker.rb +4 -4
  392. data/spec/support/shared_examples.rb +6 -6
  393. data/spec/support/statement_modifier_helper.rb +3 -3
  394. metadata +76 -16
  395. data/lib/rubocop/cop/style/favor_sprintf.rb +0 -26
  396. data/lib/rubocop/formatter/offence_count_formatter.rb +0 -49
  397. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +0 -47
  398. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +0 -52
@@ -36,6 +36,7 @@ module Rubocop
36
36
  !any_failed && !wants_to_quit ? 0 : 1
37
37
  rescue => e
38
38
  $stderr.puts e.message
39
+ $stderr.puts e.backtrace
39
40
  return 1
40
41
  end
41
42
 
@@ -73,7 +74,7 @@ module Rubocop
73
74
  show_all = @options[:show_cops].empty?
74
75
 
75
76
  if show_all
76
- puts "# Available cops (#{cops.length}) + config for #{Dir.pwd.to_s}: "
77
+ puts "# Available cops (#{cops.length}) + config for #{Dir.pwd}: "
77
78
  end
78
79
 
79
80
  cops.types.sort!.each { |type| print_cops_of_type(cops, type, show_all) }
@@ -0,0 +1,97 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ # This class parses the special `rubocop:disable` comments in a source
5
+ # and provides a way to check if each cop is enabled at arbitrary line.
6
+ class CommentConfig
7
+ COMMENT_DIRECTIVE_REGEXP = Regexp.new(
8
+ '\A# rubocop : ((?:dis|en)able)\b ((?:\w+,? )+)'.gsub(' ', '\s*')
9
+ )
10
+
11
+ attr_reader :processed_source
12
+
13
+ def initialize(processed_source)
14
+ @processed_source = processed_source
15
+ end
16
+
17
+ def cop_enabled_at_line?(cop, line_number)
18
+ cop = cop.cop_name if cop.respond_to?(:cop_name)
19
+ disabled_line_ranges = cop_disabled_line_ranges[cop]
20
+ disabled_line_ranges.none? { |range| range.include?(line_number) }
21
+ end
22
+
23
+ private
24
+
25
+ def cop_disabled_line_ranges
26
+ @cop_disabled_line_ranges ||= analyze
27
+ end
28
+
29
+ def analyze
30
+ disabled_line_ranges = Hash.new { |hash, key| hash[key] = [] }
31
+ disablement_start_line_numbers = {}
32
+
33
+ each_mentioned_cop do |cop_name, disabled, line, single_line|
34
+ if single_line
35
+ next unless disabled
36
+ disabled_line_ranges[cop_name] << (line..line)
37
+ else
38
+ if disabled
39
+ disablement_start_line_numbers[cop_name] = line
40
+ else
41
+ start_line = disablement_start_line_numbers.delete(cop_name)
42
+ next unless start_line
43
+ disabled_line_ranges[cop_name] << (start_line..line)
44
+ end
45
+ end
46
+ end
47
+
48
+ disablement_start_line_numbers.each do |cop_name, start_line|
49
+ disabled_line_ranges[cop_name] << (start_line..Float::INFINITY)
50
+ end
51
+
52
+ disabled_line_ranges
53
+ end
54
+
55
+ def each_mentioned_cop
56
+ all_cop_names = nil # For performance improvement
57
+
58
+ processed_source.comments.each do |comment|
59
+ match = comment.text.match(COMMENT_DIRECTIVE_REGEXP)
60
+ next unless match
61
+
62
+ switch, cops_string = match.captures
63
+
64
+ if cops_string == 'all'
65
+ all_cop_names ||= Cop::Cop.all.map(&:cop_name)
66
+ cop_names = all_cop_names
67
+ else
68
+ cop_names = cops_string.split(/,\s*/)
69
+ end
70
+
71
+ disabled = (switch == 'disable')
72
+ comment_line_number = comment.loc.expression.line
73
+ single_line = !comment_only_line?(comment_line_number)
74
+
75
+ cop_names.each do |cop_name|
76
+ yield cop_name, disabled, comment_line_number, single_line
77
+ end
78
+ end
79
+ end
80
+
81
+ def comment_only_line?(line_number)
82
+ non_comment_token_line_numbers.none? do |non_comment_line_number|
83
+ non_comment_line_number == line_number
84
+ end
85
+ end
86
+
87
+ def non_comment_token_line_numbers
88
+ @non_comment_token_line_numbers ||= begin
89
+ non_comment_tokens = processed_source.tokens.reject do |token|
90
+ token.type == :tCOMMENT
91
+ end
92
+
93
+ non_comment_tokens.map { |token| token.pos.line }.uniq
94
+ end
95
+ end
96
+ end
97
+ end
@@ -58,7 +58,7 @@ module Rubocop
58
58
  unless COMMON_PARAMS.include?(param) ||
59
59
  default_config[name].key?(param)
60
60
  fail ValidationError,
61
- "unrecognized parameter #{name}:#{param} found " +
61
+ "unrecognized parameter #{name}:#{param} found " \
62
62
  "in #{loaded_path || self}"
63
63
  end
64
64
  end
@@ -70,8 +70,9 @@ module Rubocop
70
70
  Array(inherit_from).map do |f|
71
71
  f = File.join(File.dirname(path), f) unless f.start_with?('/')
72
72
  if auto_gen_config? && f.include?(AUTO_GENERATED_FILE)
73
- fail "Remove #{AUTO_GENERATED_FILE} from the current " +
74
- 'configuration before generating it again.'
73
+ warn "Remove #{AUTO_GENERATED_FILE} from the current " \
74
+ 'configuration before generating it again.'
75
+ exit(1)
75
76
  end
76
77
  print 'Inheriting ' if debug?
77
78
  load_file(f)
@@ -26,10 +26,14 @@ module Rubocop
26
26
  options_config)
27
27
  end
28
28
 
29
- def for(file)
29
+ def for(file_or_dir)
30
30
  return @options_config if @options_config
31
31
 
32
- dir = File.dirname(file)
32
+ dir = if File.directory?(file_or_dir)
33
+ file_or_dir
34
+ else
35
+ File.dirname(file_or_dir)
36
+ end
33
37
  @path_cache[dir] ||= ConfigLoader.configuration_file_for(dir)
34
38
  path = @path_cache[dir]
35
39
  @object_cache[path] ||= begin
@@ -54,10 +54,10 @@ module Rubocop
54
54
  prepare(processed_source)
55
55
  invoke_cops_callback(processed_source)
56
56
  process(processed_source.ast) if processed_source.ast
57
- @cops.each_with_object([]) do |cop, offences|
57
+ @cops.each_with_object([]) do |cop, offenses|
58
58
  filename = processed_source.buffer.name
59
59
  # ignore files that are of no interest to the cop in question
60
- offences.concat(cop.offences) if cop.relevant_file?(filename)
60
+ offenses.concat(cop.offenses) if cop.relevant_file?(filename)
61
61
  end
62
62
  end
63
63
 
@@ -2,8 +2,6 @@
2
2
 
3
3
  module Rubocop
4
4
  module Cop
5
- class CorrectionNotPossible < Exception; end
6
-
7
5
  # Store for all cops with helper functions
8
6
  class CopStore < ::Array
9
7
  # @return [Array<String>] list of types for current cops.
@@ -27,7 +25,7 @@ module Rubocop
27
25
  #
28
26
  # The Cop class is meant to be extended.
29
27
  #
30
- # Cops track offences and can autocorrect them of the fly.
28
+ # Cops track offenses and can autocorrect them of the fly.
31
29
  #
32
30
  # A commissioner object is responsible for traversing the AST and invoking
33
31
  # the specific callbacks on each cop.
@@ -47,7 +45,7 @@ module Rubocop
47
45
  include Util
48
46
  include IgnoredNode
49
47
 
50
- attr_reader :config, :offences, :corrections
48
+ attr_reader :config, :offenses, :corrections
51
49
  attr_accessor :processed_source # TODO: Bad design.
52
50
 
53
51
  @all = CopStore.new
@@ -84,7 +82,7 @@ module Rubocop
84
82
  @config = config || Config.new
85
83
  @options = options || { auto_correct: false, debug: false }
86
84
 
87
- @offences = []
85
+ @offenses = []
88
86
  @corrections = []
89
87
  end
90
88
 
@@ -112,32 +110,31 @@ module Rubocop
112
110
  respond_to?(:autocorrect, true)
113
111
  end
114
112
 
115
- def add_offence(node, loc, message = nil, severity = nil)
113
+ def add_offense(node, loc, message = nil, severity = nil)
116
114
  location = loc.is_a?(Symbol) ? node.loc.send(loc) : loc
117
115
 
118
- return if disabled_line?(location.line)
116
+ return unless enabled_line?(location.line)
117
+
118
+ # Don't include the same location twice for one cop.
119
+ return if @offenses.find { |o| o.location == location }
119
120
 
120
121
  severity = custom_severity || severity || default_severity
121
122
 
122
- message = message ? message : message(node)
123
+ message ||= message(node)
123
124
  message = display_cop_names? ? "#{name}: #{message}" : message
124
125
 
125
- corrected = begin
126
- autocorrect(node) if autocorrect?
127
- autocorrect?
128
- rescue CorrectionNotPossible
129
- false
130
- end
131
- @offences << Offence.new(severity, location, message, name, corrected)
126
+ autocorrect(node) if autocorrect?
127
+ @offenses << Offense.new(severity, location, message, name,
128
+ autocorrect?)
132
129
  yield if block_given?
133
130
  end
134
131
 
135
- def config_to_allow_offences
136
- Formatter::DisabledConfigFormatter.config_to_allow_offences[cop_name]
132
+ def config_to_allow_offenses
133
+ Formatter::DisabledConfigFormatter.config_to_allow_offenses[cop_name]
137
134
  end
138
135
 
139
- def config_to_allow_offences=(hash)
140
- Formatter::DisabledConfigFormatter.config_to_allow_offences[cop_name] =
136
+ def config_to_allow_offenses=(hash)
137
+ Formatter::DisabledConfigFormatter.config_to_allow_offenses[cop_name] =
141
138
  hash
142
139
  end
143
140
 
@@ -168,11 +165,10 @@ module Rubocop
168
165
  patterns.any? { |pattern| match_path?(pattern, path) }
169
166
  end
170
167
 
171
- def disabled_line?(line_number)
172
- return false unless @processed_source
173
- disabled_lines = @processed_source.disabled_lines_for_cops[name]
174
- return false unless disabled_lines
175
- disabled_lines.include?(line_number)
168
+ def enabled_line?(line_number)
169
+ return true unless @processed_source
170
+ @processed_source.comment_config
171
+ .cop_enabled_at_line?(self, line_number)
176
172
  end
177
173
 
178
174
  def default_severity
@@ -182,11 +178,11 @@ module Rubocop
182
178
  def custom_severity
183
179
  severity = cop_config && cop_config['Severity']
184
180
  if severity
185
- if Offence::SEVERITIES.include?(severity.to_sym)
181
+ if Offense::SEVERITIES.include?(severity.to_sym)
186
182
  severity.to_sym
187
183
  else
188
184
  warn "Warning: Invalid severity '#{severity}'. " +
189
- "Valid severities are #{Offence::SEVERITIES.join(', ')}."
185
+ "Valid severities are #{Offense::SEVERITIES.join(', ')}."
190
186
  .color(:red)
191
187
  end
192
188
  end
@@ -29,8 +29,8 @@ module Rubocop
29
29
  end
30
30
 
31
31
  MSG_FORMAT = 'Ambiguous %{actual} operator. Parenthesize the method ' \
32
- "arguments if it's surely a %{actual} operator, or add " +
33
- 'a whitespace to the right of the %{operator} if it ' +
32
+ "arguments if it's surely a %{actual} operator, or add " \
33
+ 'a whitespace to the right of the %{operator} if it ' \
34
34
  'should be a %{possible}.'
35
35
 
36
36
  private
@@ -18,7 +18,7 @@ module Rubocop
18
18
  include ParserDiagnostic
19
19
 
20
20
  MSG = 'Ambiguous regexp literal. Parenthesize the method arguments ' \
21
- "if it's surely a regexp literal, or add a whitespace to the " +
21
+ "if it's surely a regexp literal, or add a whitespace to the " \
22
22
  'right of the / if it should be a division.'
23
23
 
24
24
  private
@@ -36,7 +36,7 @@ module Rubocop
36
36
 
37
37
  # assignment nodes from shorthand ops like ||= don't have operator
38
38
  if asgn_node.type != :begin && asgn_node.loc.operator
39
- add_offence(asgn_node, :operator)
39
+ add_offense(asgn_node, :operator)
40
40
  end
41
41
  end
42
42
  end
@@ -115,13 +115,13 @@ module Rubocop
115
115
  match = /\S.*/.match(do_loc.source_line)
116
116
  indentation_of_do_line = match.begin(0)
117
117
  if end_loc.column != indentation_of_do_line
118
- add_offence(nil,
118
+ add_offense(nil,
119
119
  end_loc,
120
- sprintf(MSG, end_loc.line, end_loc.column,
121
- start_loc.source.lines.to_a.first.chomp,
122
- start_loc.line, start_loc.column,
123
- alt_start_msg(match, start_loc, do_loc,
124
- indentation_of_do_line)))
120
+ format(MSG, end_loc.line, end_loc.column,
121
+ start_loc.source.lines.to_a.first.chomp,
122
+ start_loc.line, start_loc.column,
123
+ alt_start_msg(match, start_loc, do_loc,
124
+ indentation_of_do_line)))
125
125
  end
126
126
  end
127
127
  end
@@ -34,7 +34,7 @@ module Rubocop
34
34
 
35
35
  if on_different_line?(node.loc.keyword.line,
36
36
  condition.loc.expression.line)
37
- add_offence(condition, :expression,
37
+ add_offense(condition, :expression,
38
38
  message(node.loc.keyword.source))
39
39
  end
40
40
  end
@@ -27,7 +27,7 @@ module Rubocop
27
27
  DEBUGGER_NODES = [DEBUGGER_NODE, PRY_NODE, REMOTE_PRY_NODE]
28
28
 
29
29
  def on_send(node)
30
- add_offence(node, :selector) if DEBUGGER_NODES.include?(node)
30
+ add_offense(node, :selector) if DEBUGGER_NODES.include?(node)
31
31
  end
32
32
  end
33
33
  end
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for uses of the deprecated class method usages.
7
+ class DeprecatedClassMethods < Cop
8
+ include AST::Sexp
9
+
10
+ MSG = '%s is deprecated in favor of %s.'
11
+
12
+ DEPRECATED_METHODS = [
13
+ [:File, :exists?, :exist?],
14
+ [:Dir, :exists?, :exist?]
15
+ ]
16
+
17
+ def on_send(node)
18
+ receiver, method_name, *_args = *node
19
+
20
+ DEPRECATED_METHODS.each do |data|
21
+ next unless receiver == class_node(data)
22
+ next unless method_name == data[1]
23
+
24
+ add_offense(node, :selector,
25
+ MSG.format(deprecated_method(data),
26
+ replacement_method(data)))
27
+ end
28
+ end
29
+
30
+ def autocorrect(node)
31
+ @corrections << lambda do |corrector|
32
+ receiver, method_name, *_args = *node
33
+
34
+ DEPRECATED_METHODS.each do |data|
35
+ next unless receiver == class_node(data)
36
+ next unless method_name == data[1]
37
+
38
+ corrector.replace(node.loc.selector,
39
+ data[2].to_s)
40
+ end
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def class_node(data)
47
+ s(:const, nil, data[0])
48
+ end
49
+
50
+ def deprecated_method(data)
51
+ format('%s.%s', data[0], data[1])
52
+ end
53
+
54
+ def replacement_method(data)
55
+ format('%s.%s', data[0], data[2])
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -39,7 +39,7 @@ module Rubocop
39
39
  first_else_expr = else_branch.children.first
40
40
 
41
41
  if first_else_expr.loc.expression.line == node.loc.else.line
42
- add_offence(first_else_expr, :expression, message)
42
+ add_offense(first_else_expr, :expression, message)
43
43
  end
44
44
  elsif node.loc.respond_to?(:keyword) &&
45
45
  %w(if elsif).include?(node.loc.keyword.source)
@@ -10,7 +10,7 @@ module Rubocop
10
10
  def on_ensure(node)
11
11
  _body, ensure_body = *node
12
12
 
13
- add_offence(node, :keyword) unless ensure_body
13
+ add_offense(node, :keyword) unless ensure_body
14
14
  end
15
15
  end
16
16
  end
@@ -80,15 +80,17 @@ module Rubocop
80
80
  when :if, :while, :until
81
81
  return if rhs.loc.respond_to?(:question) # ternary
82
82
 
83
- offset = if style == :variable
84
- rhs.loc.keyword.column - node.loc.expression.column
85
- else
86
- 0
87
- end
88
- expr = node.loc.expression
89
- range = Parser::Source::Range.new(expr.source_buffer,
90
- expr.begin_pos,
91
- rhs.loc.keyword.end_pos)
83
+ if style == :variable
84
+ expr = node.loc.expression
85
+ range = Parser::Source::Range.new(expr.source_buffer,
86
+ expr.begin_pos,
87
+ rhs.loc.keyword.end_pos)
88
+ offset = rhs.loc.keyword.column - node.loc.expression.column
89
+ else
90
+ range = rhs.loc.keyword
91
+ offset = 0
92
+ end
93
+
92
94
  check_offset(rhs, range.source, offset)
93
95
  ignore_node(rhs) # Don't check again.
94
96
  end
@@ -108,9 +110,9 @@ module Rubocop
108
110
 
109
111
  if kw_loc.line != end_loc.line &&
110
112
  kw_loc.column != end_loc.column + offset
111
- add_offence(nil, end_loc,
112
- sprintf(MSG, end_loc.line, end_loc.column,
113
- alignment_base, kw_loc.line, kw_loc.column)) do
113
+ add_offense(nil, end_loc,
114
+ format(MSG, end_loc.line, end_loc.column,
115
+ alignment_base, kw_loc.line, kw_loc.column)) do
114
116
  opposite_style_detected
115
117
  end
116
118
  else