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
@@ -14,6 +14,8 @@ module Rubocop
14
14
  # end
15
15
  # end
16
16
  class IndentationConsistency < Cop
17
+ include AutocorrectAlignment
18
+
17
19
  MSG = 'Inconsistent indentation detected.'
18
20
 
19
21
  def on_begin(node)
@@ -33,17 +35,7 @@ module Rubocop
33
35
  AccessModifierIndentation.modifier_node?(child)
34
36
  end
35
37
 
36
- children_to_check.map(&:loc).each_cons(2) do |child1, child2|
37
- if child2.line > child1.line && child2.column != child1.column
38
- expr = child2.expression
39
- indentation = expr.source_line =~ /\S/
40
- end_pos = expr.begin_pos
41
- begin_pos = end_pos - indentation
42
- add_offence(nil,
43
- Parser::Source::Range.new(expr.source_buffer,
44
- begin_pos, end_pos))
45
- end
46
- end
38
+ check_alignment(children_to_check)
47
39
  end
48
40
  end
49
41
  end
@@ -13,6 +13,7 @@ module Rubocop
13
13
  # end
14
14
  # end
15
15
  class IndentationWidth < Cop
16
+ include AutocorrectAlignment
16
17
  include CheckMethods
17
18
  include CheckAssignment
18
19
  include IfNode
@@ -49,10 +50,10 @@ module Rubocop
49
50
  check_indentation(node.loc.keyword, body)
50
51
  end
51
52
 
52
- def on_while(node)
53
+ def on_while(node, base = node)
53
54
  _condition, body = *node
54
55
  if node.loc.keyword.begin_pos == node.loc.expression.begin_pos
55
- check_indentation(node.loc.keyword, body)
56
+ check_indentation(base.loc, body)
56
57
  end
57
58
  end
58
59
 
@@ -75,7 +76,7 @@ module Rubocop
75
76
  end
76
77
  end
77
78
 
78
- def on_if(node, offset = 0)
79
+ def on_if(node, base = node)
79
80
  return if ignored_node?(node)
80
81
  return if ternary_op?(node)
81
82
  return if modifier_if?(node)
@@ -86,7 +87,7 @@ module Rubocop
86
87
  else _condition, body = *node
87
88
  end
88
89
 
89
- check_if(node, body, else_clause, offset) if body
90
+ check_if(node, body, else_clause, base.loc) if body
90
91
  end
91
92
 
92
93
  private
@@ -97,29 +98,46 @@ module Rubocop
97
98
  # we check its indentation.
98
99
  rhs = first_part_of_call_chain(rhs)
99
100
 
100
- if rhs && rhs.type == :if
101
- on_if(rhs, rhs.loc.column - node.loc.column)
101
+ if rhs
102
+ end_alignment_config = config.for_cop('EndAlignment')
103
+ style = if end_alignment_config['Enabled']
104
+ end_alignment_config['AlignWith']
105
+ else
106
+ 'keyword'
107
+ end
108
+ base = style == 'variable' ? node : rhs
109
+
110
+ case rhs.type
111
+ when :if then on_if(rhs, base)
112
+ when :while, :until then on_while(rhs, base)
113
+ else return
114
+ end
115
+
102
116
  ignore_node(rhs)
103
117
  end
104
118
  end
105
119
 
106
- def check_if(node, body, else_clause, offset)
120
+ def check_if(node, body, else_clause, base_loc)
107
121
  return if ternary_op?(node)
108
- # Don't check if expression is on same line as "then" keyword.
109
- check_indentation(node.loc.keyword, body, offset)
122
+
123
+ check_indentation(base_loc, body)
124
+
110
125
  if else_clause
111
126
  if elsif?(else_clause)
112
127
  _condition, inner_body, inner_else_clause = *else_clause
113
- check_if(else_clause, inner_body, inner_else_clause, offset)
128
+ check_if(else_clause, inner_body, inner_else_clause, base_loc)
114
129
  else
115
130
  check_indentation(node.loc.else, else_clause)
116
131
  end
117
132
  end
118
133
  end
119
134
 
120
- def check_indentation(base_loc, body_node, offset = 0)
135
+ def check_indentation(base_loc, body_node)
121
136
  return unless body_node
137
+
138
+ # Don't check if expression is on same line as "then" keyword, etc.
122
139
  return if body_node.loc.line == base_loc.line
140
+
123
141
  return if starts_with_access_modifier?(body_node)
124
142
 
125
143
  # Don't check indentation if the line doesn't start with the body.
@@ -128,22 +146,25 @@ module Rubocop
128
146
  return unless body_node.loc.column == first_char_pos_on_line
129
147
 
130
148
  indentation = body_node.loc.column - base_loc.column
131
- return if indentation == CORRECT_INDENTATION ||
132
- indentation + offset == CORRECT_INDENTATION
149
+ @column_delta = CORRECT_INDENTATION - indentation
150
+ return if @column_delta == 0
151
+
152
+ # This cop only auto-corrects the first statement in a def body, for
153
+ # example.
154
+ body_node = body_node.children.first if body_node.type == :begin
133
155
 
134
156
  expr = body_node.loc.expression
135
- begin_pos, end_pos =
136
- if indentation >= 0
137
- [expr.begin_pos - indentation, expr.begin_pos]
138
- else
139
- [expr.begin_pos, expr.begin_pos - indentation]
140
- end
157
+ pos = if indentation >= 0
158
+ (expr.begin_pos - indentation)..expr.begin_pos
159
+ else
160
+ expr.begin_pos..(expr.begin_pos - indentation)
161
+ end
141
162
 
142
- add_offence(nil,
163
+ add_offense(body_node,
143
164
  Parser::Source::Range.new(expr.source_buffer,
144
- begin_pos, end_pos),
145
- sprintf("Use #{CORRECT_INDENTATION} (not %d) spaces " +
146
- 'for indentation.', indentation))
165
+ pos.begin, pos.end),
166
+ format("Use #{CORRECT_INDENTATION} (not %d) spaces " \
167
+ 'for indentation.', indentation))
147
168
  end
148
169
 
149
170
  def starts_with_access_modifier?(body_node)
@@ -24,9 +24,9 @@ module Rubocop
24
24
  lambda_length = lambda_length(node)
25
25
 
26
26
  if selector != '->' && lambda_length == 0
27
- add_offence(block_method, :expression, SINGLE_MSG)
27
+ add_offense(block_method, :expression, SINGLE_MSG)
28
28
  elsif selector == '->' && lambda_length > 0
29
- add_offence(block_method, :expression, MULTI_MSG)
29
+ add_offense(block_method, :expression, MULTI_MSG)
30
30
  end
31
31
  end
32
32
  end
@@ -21,8 +21,8 @@ module Rubocop
21
21
  # we care only about `call` methods
22
22
  return unless selector == :call
23
23
 
24
- if offence?(node)
25
- add_offence(node, :expression) { opposite_style_detected }
24
+ if offense?(node)
25
+ add_offense(node, :expression) { opposite_style_detected }
26
26
  else
27
27
  correct_style_detected
28
28
  end
@@ -30,7 +30,7 @@ module Rubocop
30
30
 
31
31
  private
32
32
 
33
- def offence?(node)
33
+ def offense?(node)
34
34
  # lambda.() does not have a selector
35
35
  style == :call && node.loc.selector.nil? ||
36
36
  style == :braces && node.loc.selector
@@ -14,7 +14,7 @@ module Rubocop
14
14
  processed_source.comments.each do |comment|
15
15
  if comment.text =~ /^#+[^#\s:+-]/
16
16
  unless comment.text.start_with?('#!') && comment.loc.line == 1
17
- add_offence(comment, :expression)
17
+ add_offense(comment, :expression)
18
18
  end
19
19
  end
20
20
  end
@@ -20,7 +20,7 @@ module Rubocop
20
20
  MSG = 'Use \\ instead of + to concatenate those strings.'
21
21
 
22
22
  def on_send(node)
23
- add_offence(node, :selector) if offending_node?(node)
23
+ add_offense(node, :selector) if offending_node?(node)
24
24
  end
25
25
 
26
26
  def autocorrect(node)
@@ -38,9 +38,9 @@ module Rubocop
38
38
  # TODO: Report Emacs bug.
39
39
  return false unless :+ == method
40
40
 
41
- return false unless receiver.type == :str
41
+ return false unless string_type?(receiver.type)
42
42
 
43
- return false unless arg.type == :str
43
+ return false unless string_type?(arg.type)
44
44
 
45
45
  plus_at_line_end?(node.loc.expression.source)
46
46
  end
@@ -49,6 +49,10 @@ module Rubocop
49
49
  # check if the first line of the expression ends with a +
50
50
  expression =~ /.+\+\s*$/
51
51
  end
52
+
53
+ def string_type?(node_type)
54
+ [:str, :dstr].include?(node_type)
55
+ end
52
56
  end
53
57
  end
54
58
  end
@@ -13,8 +13,8 @@ module Rubocop
13
13
  def investigate(processed_source)
14
14
  processed_source.lines.each_with_index do |line, index|
15
15
  if line.length > max
16
- message = sprintf(MSG, line.length, max)
17
- add_offence(nil,
16
+ message = format(MSG, line.length, max)
17
+ add_offense(nil,
18
18
  source_range(processed_source.buffer,
19
19
  processed_source[0...index], max,
20
20
  line.length - max),
@@ -13,7 +13,7 @@ module Rubocop
13
13
  # methods starting with a capital letter should be skipped
14
14
  return if method_name =~ /\A[A-Z]/
15
15
 
16
- add_offence(node, :begin) if args.empty? && node.loc.begin
16
+ add_offense(node, :begin) if args.empty? && node.loc.begin
17
17
  end
18
18
 
19
19
  def autocorrect(node)
@@ -22,7 +22,7 @@ module Rubocop
22
22
  [EmptyLiteral::HASH_NODE,
23
23
  EmptyLiteral::ARRAY_NODE,
24
24
  EmptyLiteral::STR_NODE].include?(node)
25
- fail CorrectionNotPossible
25
+ return
26
26
  end
27
27
  @corrections << lambda do |corrector|
28
28
  corrector.remove(node.loc.begin)
@@ -20,7 +20,7 @@ module Rubocop
20
20
  # If the method that is chained on the do...end block is itself a
21
21
  # method with a block, we allow it. It's pretty safe to assume that
22
22
  # these calls are not missed by anyone reading code. We also want to
23
- # avoid double reporting of offences checked by the
23
+ # avoid double reporting of offenses checked by the
24
24
  # MultilineBlockChain cop.
25
25
  ignore_node(method)
26
26
  end
@@ -32,7 +32,7 @@ module Rubocop
32
32
  range = Parser::Source::Range.new(receiver.loc.end.source_buffer,
33
33
  receiver.loc.end.begin_pos,
34
34
  node.loc.expression.end_pos)
35
- add_offence(nil, range)
35
+ add_offense(nil, range)
36
36
  end
37
37
  end
38
38
  end
@@ -12,7 +12,7 @@ module Rubocop
12
12
  def check(node, _method_name, args, _body)
13
13
  if style == :require_parentheses
14
14
  if arguments?(args) && !parentheses?(args)
15
- add_offence(node,
15
+ add_offense(node,
16
16
  args.loc.expression,
17
17
  'Use def with parentheses when there are ' \
18
18
  'parameters.') do
@@ -22,7 +22,7 @@ module Rubocop
22
22
  correct_style_detected
23
23
  end
24
24
  elsif parentheses?(args)
25
- add_offence(args, :expression, 'Use def without parentheses.') do
25
+ add_offense(args, :expression, 'Use def without parentheses.') do
26
26
  opposite_style_detected
27
27
  end
28
28
  else
@@ -33,11 +33,13 @@ module Rubocop
33
33
  def autocorrect(node)
34
34
  @corrections << lambda do |corrector|
35
35
  if style == :require_parentheses
36
-
37
- corrector.insert_after(args_node(node).loc.expression, ')')
38
- expression = node.loc.expression
39
- replacement = expression.source.sub(/(def\s+\S+)\s+/, '\1(')
40
- corrector.replace(expression, replacement)
36
+ args_expr = args_node(node).loc.expression
37
+ args_with_space = range_with_surrounding_space(args_expr, :left)
38
+ just_space = Parser::Source::Range.new(args_expr.source_buffer,
39
+ args_with_space.begin_pos,
40
+ args_expr.begin_pos)
41
+ corrector.replace(just_space, '(')
42
+ corrector.insert_after(args_expr, ')')
41
43
  elsif style == :require_no_parentheses
42
44
  corrector.replace(node.loc.begin, ' ')
43
45
  corrector.remove(node.loc.end)
@@ -22,7 +22,7 @@ module Rubocop
22
22
 
23
23
  if body && body.type == :begin
24
24
  body.children.each do |body_node|
25
- add_offence(body_node, :expression) if body_node == TARGET_NODE
25
+ add_offense(body_node, :expression) if body_node == TARGET_NODE
26
26
  end
27
27
  end
28
28
  end
@@ -30,7 +30,7 @@ module Rubocop
30
30
  Parser::Source::Range.new(end_kw_loc.source_buffer,
31
31
  end_kw_loc.begin_pos,
32
32
  method.loc.expression.end_pos)
33
- add_offence(nil, range)
33
+ add_offense(nil, range)
34
34
  # Done. If there are more blocks in the chain, they will be
35
35
  # found by subsequent calls to on_block.
36
36
  break
@@ -14,7 +14,7 @@ module Rubocop
14
14
  # discard non-ternary ops
15
15
  return unless loc.respond_to?(:question)
16
16
 
17
- add_offence(node, :expression) if loc.line != loc.colon.line
17
+ add_offense(node, :expression) if loc.line != loc.colon.line
18
18
  end
19
19
  end
20
20
  end
@@ -6,7 +6,7 @@ module Rubocop
6
6
  # This cop checks for nested ternary op expressions.
7
7
  class NestedTernaryOperator < Cop
8
8
  MSG = 'Ternary operators must not be nested. Prefer if/else ' \
9
- 'constructs instead.'
9
+ 'constructs instead.'
10
10
 
11
11
  def on_if(node)
12
12
  loc = node.loc
@@ -16,7 +16,7 @@ module Rubocop
16
16
 
17
17
  node.children.each do |child|
18
18
  on_node(:if, child) do |c|
19
- add_offence(c, :expression) if c.loc.respond_to?(:question)
19
+ add_offense(c, :expression) if c.loc.respond_to?(:question)
20
20
  end
21
21
  end
22
22
  end
@@ -29,7 +29,7 @@ module Rubocop
29
29
  if OPS.include?(op)
30
30
  _receiver, _method, args = *node
31
31
 
32
- add_offence(node, :selector) if args == NIL_NODE
32
+ add_offense(node, :selector) if args == NIL_NODE
33
33
  end
34
34
  end
35
35
  end
@@ -13,7 +13,7 @@ module Rubocop
13
13
  # not does not take any arguments
14
14
  if args.empty? && method_name == :! &&
15
15
  node.loc.selector.is?('not')
16
- add_offence(node, :selector)
16
+ add_offense(node, :selector)
17
17
  end
18
18
  end
19
19
  end
@@ -7,12 +7,12 @@ module Rubocop
7
7
  # of digits in them.
8
8
  class NumericLiterals < Cop
9
9
  # The parameter is called MinDigits (meaning the minimum number of
10
- # digits for which an offence can be registered), but essentially it's
10
+ # digits for which an offense can be registered), but essentially it's
11
11
  # a Max parameter (the maximum number of something that's allowed).
12
12
  include ConfigurableMax
13
13
 
14
14
  MSG = 'Separate every 3 digits in the integer portion of a number ' \
15
- 'with underscores(_).'
15
+ 'with underscores(_).'
16
16
 
17
17
  def on_int(node)
18
18
  check(node)
@@ -37,10 +37,10 @@ module Rubocop
37
37
  if int.size >= min_digits
38
38
  case int
39
39
  when /^\d+$/
40
- add_offence(node, :expression) { self.max = int.size }
40
+ add_offense(node, :expression) { self.max = int.size }
41
41
  when /\d{4}/, /_\d{1,2}_/
42
- add_offence(node, :expression) do
43
- self.config_to_allow_offences = { 'Enabled' => false }
42
+ add_offense(node, :expression) do
43
+ self.config_to_allow_offenses = { 'Enabled' => false }
44
44
  end
45
45
  end
46
46
  end
@@ -17,8 +17,8 @@ module Rubocop
17
17
 
18
18
  if name !~ /\A\w/ && !BLACKLISTED.include?(name) &&
19
19
  args.children.size == 1 && args != TARGET_ARGS
20
- add_offence(args.children[0], :expression,
21
- sprintf(MSG, name))
20
+ add_offense(args.children[0], :expression,
21
+ format(MSG, name))
22
22
  end
23
23
  end
24
24
  end
@@ -15,7 +15,7 @@ module Rubocop
15
15
  def on_args(node)
16
16
  count = args_count(node)
17
17
  if count > max_params
18
- add_offence(node, :expression, sprintf(MSG, max_params)) do
18
+ add_offense(node, :expression, format(MSG, max_params)) do
19
19
  self.max = count
20
20
  end
21
21
  end
@@ -32,15 +32,16 @@ module Rubocop
32
32
  # allow safe assignment
33
33
  return if safe_assignment?(cond) && safe_assignment_allowed?
34
34
 
35
- add_offence(cond, :expression, message(node))
35
+ add_offense(cond, :expression, message(node))
36
36
  end
37
37
  end
38
38
 
39
39
  def parens_required?(node)
40
- expr = node.loc.expression.source
41
- keyword = node.loc.keyword.source
40
+ exp = node.loc.expression
41
+ kw = node.loc.keyword
42
+ kw_offset = kw.begin_pos - exp.begin_pos
42
43
 
43
- expr.start_with?("#{keyword}(")
44
+ exp.source[kw_offset..-1].start_with?(kw.source + '(')
44
45
  end
45
46
 
46
47
  def message(node)