rubocop 1.12.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/config/default.yml +10 -0
  4. data/exe/rubocop +1 -3
  5. data/lib/rubocop.rb +1 -1
  6. data/lib/rubocop/cached_data.rb +1 -3
  7. data/lib/rubocop/cli.rb +4 -6
  8. data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
  9. data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
  10. data/lib/rubocop/cli/command/show_cops.rb +1 -4
  11. data/lib/rubocop/comment_config.rb +2 -7
  12. data/lib/rubocop/config.rb +11 -26
  13. data/lib/rubocop/config_loader.rb +5 -11
  14. data/lib/rubocop/config_loader_resolver.rb +22 -14
  15. data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
  16. data/lib/rubocop/config_store.rb +1 -2
  17. data/lib/rubocop/config_validator.rb +5 -10
  18. data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
  19. data/lib/rubocop/cop/badge.rb +1 -2
  20. data/lib/rubocop/cop/base.rb +8 -6
  21. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
  22. data/lib/rubocop/cop/bundler/gem_comment.rb +42 -8
  23. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
  24. data/lib/rubocop/cop/commissioner.rb +2 -8
  25. data/lib/rubocop/cop/cop.rb +4 -18
  26. data/lib/rubocop/cop/corrector.rb +1 -4
  27. data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -6
  28. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  29. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  30. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  31. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  32. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
  33. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  34. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
  35. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
  36. data/lib/rubocop/cop/generator.rb +1 -4
  37. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  38. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  39. data/lib/rubocop/cop/internal_affairs/example_description.rb +6 -4
  40. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
  41. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
  42. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
  43. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
  44. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
  45. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
  46. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -2
  47. data/lib/rubocop/cop/layout/argument_alignment.rb +2 -4
  48. data/lib/rubocop/cop/layout/assignment_indentation.rb +2 -4
  49. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  50. data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
  51. data/lib/rubocop/cop/layout/case_indentation.rb +1 -3
  52. data/lib/rubocop/cop/layout/class_structure.rb +4 -10
  53. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -15
  54. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -5
  55. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  56. data/lib/rubocop/cop/layout/dot_position.rb +1 -3
  57. data/lib/rubocop/cop/layout/else_alignment.rb +1 -3
  58. data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
  59. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
  60. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  61. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  62. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  63. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
  64. data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
  65. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  66. data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
  67. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -2
  68. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  69. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -5
  70. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  71. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  72. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  73. data/lib/rubocop/cop/layout/hash_alignment.rb +3 -6
  74. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
  75. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
  76. data/lib/rubocop/cop/layout/indentation_style.rb +1 -3
  77. data/lib/rubocop/cop/layout/indentation_width.rb +1 -2
  78. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  79. data/lib/rubocop/cop/layout/line_length.rb +4 -15
  80. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  81. data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
  82. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  83. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
  84. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +16 -10
  85. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +4 -0
  86. data/lib/rubocop/cop/layout/redundant_line_break.rb +125 -0
  87. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
  88. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  89. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  90. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  91. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
  92. data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -6
  93. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
  94. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
  95. data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
  96. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  97. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  98. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  99. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  100. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  101. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
  102. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  103. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  104. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  105. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  106. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  107. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  108. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
  109. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
  110. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -4
  111. data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
  112. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
  113. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
  114. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  115. data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
  116. data/lib/rubocop/cop/lint/else_layout.rb +1 -3
  117. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  118. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  119. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  120. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  121. data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
  122. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  123. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
  124. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  125. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  126. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
  127. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
  128. data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
  129. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  130. data/lib/rubocop/cop/lint/loop.rb +1 -2
  131. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
  132. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  133. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  134. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
  135. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
  136. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
  137. data/lib/rubocop/cop/lint/number_conversion.rb +3 -4
  138. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  139. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
  140. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  141. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
  142. data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
  143. data/lib/rubocop/cop/lint/rand_one.rb +1 -2
  144. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +8 -20
  145. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
  146. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
  147. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
  148. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
  149. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
  150. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  151. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  152. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  153. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  154. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  155. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
  156. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  157. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
  158. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
  159. data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
  160. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  161. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
  162. data/lib/rubocop/cop/lint/symbol_conversion.rb +2 -4
  163. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  164. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  165. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  166. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  167. data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
  168. data/lib/rubocop/cop/lint/unreachable_loop.rb +2 -5
  169. data/lib/rubocop/cop/lint/unused_block_argument.rb +4 -8
  170. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
  171. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
  172. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
  173. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
  174. data/lib/rubocop/cop/lint/void.rb +4 -11
  175. data/lib/rubocop/cop/message_annotator.rb +1 -3
  176. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  177. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  178. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  179. data/lib/rubocop/cop/metrics/module_length.rb +2 -6
  180. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
  181. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
  182. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  183. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
  184. data/lib/rubocop/cop/migration/department_name.rb +3 -7
  185. data/lib/rubocop/cop/mixin/alignment.rb +2 -4
  186. data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
  187. data/lib/rubocop/cop/mixin/code_length.rb +1 -3
  188. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  189. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  190. data/lib/rubocop/cop/mixin/def_node.rb +2 -5
  191. data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -5
  192. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
  193. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
  194. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
  195. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
  196. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  197. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +3 -9
  198. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
  199. data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
  200. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  201. data/lib/rubocop/cop/mixin/line_length_help.rb +2 -4
  202. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  203. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
  204. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  205. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -2
  206. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  207. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -37
  208. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  209. data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
  210. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
  211. data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
  212. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  213. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
  214. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +3 -6
  215. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  216. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  217. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
  218. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  219. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
  220. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
  221. data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
  222. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  223. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -7
  224. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  225. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
  226. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
  227. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  228. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -3
  229. data/lib/rubocop/cop/naming/method_name.rb +1 -2
  230. data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
  231. data/lib/rubocop/cop/offense.rb +3 -8
  232. data/lib/rubocop/cop/registry.rb +3 -11
  233. data/lib/rubocop/cop/style/access_modifier_declarations.rb +2 -4
  234. data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
  235. data/lib/rubocop/cop/style/alias.rb +5 -12
  236. data/lib/rubocop/cop/style/and_or.rb +3 -1
  237. data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
  238. data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
  239. data/lib/rubocop/cop/style/attr.rb +1 -3
  240. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  241. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -3
  242. data/lib/rubocop/cop/style/case_like_if.rb +1 -2
  243. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  244. data/lib/rubocop/cop/style/class_and_module_children.rb +3 -6
  245. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  246. data/lib/rubocop/cop/style/collection_compact.rb +1 -3
  247. data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
  248. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  249. data/lib/rubocop/cop/style/command_literal.rb +3 -8
  250. data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
  251. data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
  252. data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
  253. data/lib/rubocop/cop/style/copyright.rb +3 -6
  254. data/lib/rubocop/cop/style/date_time.rb +2 -5
  255. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  256. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
  257. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  258. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  259. data/lib/rubocop/cop/style/empty_literal.rb +4 -8
  260. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  261. data/lib/rubocop/cop/style/end_block.rb +1 -2
  262. data/lib/rubocop/cop/style/endless_method.rb +1 -3
  263. data/lib/rubocop/cop/style/eval_with_location.rb +2 -4
  264. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
  265. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
  266. data/lib/rubocop/cop/style/format_string_token.rb +1 -4
  267. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
  268. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  269. data/lib/rubocop/cop/style/hash_conversion.rb +31 -3
  270. data/lib/rubocop/cop/style/hash_each_methods.rb +1 -2
  271. data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
  272. data/lib/rubocop/cop/style/hash_syntax.rb +4 -9
  273. data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
  274. data/lib/rubocop/cop/style/if_unless_modifier.rb +41 -13
  275. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  276. data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
  277. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  278. data/lib/rubocop/cop/style/lambda.rb +2 -4
  279. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  280. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
  281. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +7 -3
  282. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +10 -18
  283. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  284. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  285. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
  286. data/lib/rubocop/cop/style/min_max.rb +1 -2
  287. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  288. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  289. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  290. data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
  291. data/lib/rubocop/cop/style/module_function.rb +3 -6
  292. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  293. data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
  294. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  295. data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
  296. data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
  297. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  298. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  299. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  300. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  301. data/lib/rubocop/cop/style/next.rb +4 -9
  302. data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
  303. data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
  304. data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
  305. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  306. data/lib/rubocop/cop/style/option_hash.rb +1 -3
  307. data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
  308. data/lib/rubocop/cop/style/or_assignment.rb +2 -6
  309. data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
  310. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
  311. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
  312. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  313. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
  314. data/lib/rubocop/cop/style/proc.rb +1 -2
  315. data/lib/rubocop/cop/style/raise_args.rb +4 -8
  316. data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
  317. data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
  318. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
  319. data/lib/rubocop/cop/style/redundant_begin.rb +15 -4
  320. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  321. data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
  322. data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
  323. data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
  324. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  325. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
  326. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
  327. data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
  328. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  329. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  330. data/lib/rubocop/cop/style/redundant_return.rb +3 -5
  331. data/lib/rubocop/cop/style/redundant_self.rb +2 -6
  332. data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
  333. data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
  334. data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
  335. data/lib/rubocop/cop/style/rescue_modifier.rb +4 -0
  336. data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
  337. data/lib/rubocop/cop/style/return_nil.rb +1 -2
  338. data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
  339. data/lib/rubocop/cop/style/send.rb +1 -2
  340. data/lib/rubocop/cop/style/signal_exception.rb +3 -7
  341. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
  342. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
  343. data/lib/rubocop/cop/style/single_line_methods.rb +16 -4
  344. data/lib/rubocop/cop/style/sole_nested_conditional.rb +1 -2
  345. data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
  346. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  347. data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
  348. data/lib/rubocop/cop/style/string_chars.rb +2 -1
  349. data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
  350. data/lib/rubocop/cop/style/string_literals.rb +2 -5
  351. data/lib/rubocop/cop/style/struct_inheritance.rb +9 -1
  352. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  353. data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
  354. data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
  355. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -2
  356. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
  357. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
  358. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  359. data/lib/rubocop/cop/style/trivial_accessors.rb +2 -4
  360. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  361. data/lib/rubocop/cop/style/unless_logical_operators.rb +2 -2
  362. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  363. data/lib/rubocop/cop/style/when_then.rb +1 -3
  364. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  365. data/lib/rubocop/cop/style/word_array.rb +1 -2
  366. data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
  367. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
  368. data/lib/rubocop/cop/team.rb +2 -5
  369. data/lib/rubocop/cop/util.rb +8 -11
  370. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  371. data/lib/rubocop/cop/variable_force.rb +6 -15
  372. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  373. data/lib/rubocop/cop/variable_force/branch.rb +1 -2
  374. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  375. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  376. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  377. data/lib/rubocop/cops_documentation_generator.rb +7 -21
  378. data/lib/rubocop/directive_comment.rb +5 -0
  379. data/lib/rubocop/file_finder.rb +1 -3
  380. data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
  381. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  382. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
  383. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  384. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  385. data/lib/rubocop/formatter/junit_formatter.rb +3 -9
  386. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  387. data/lib/rubocop/formatter/tap_formatter.rb +4 -2
  388. data/lib/rubocop/options.rb +27 -41
  389. data/lib/rubocop/path_util.rb +1 -3
  390. data/lib/rubocop/rake_task.rb +3 -0
  391. data/lib/rubocop/remote_config.rb +4 -7
  392. data/lib/rubocop/result_cache.rb +5 -12
  393. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  394. data/lib/rubocop/rspec/expect_offense.rb +4 -9
  395. data/lib/rubocop/rspec/shared_contexts.rb +4 -15
  396. data/lib/rubocop/runner.rb +7 -14
  397. data/lib/rubocop/target_finder.rb +11 -16
  398. data/lib/rubocop/target_ruby.rb +4 -8
  399. data/lib/rubocop/version.rb +1 -1
  400. metadata +5 -5
  401. data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -77,8 +77,7 @@ module RuboCop
77
77
  first = args.first.source_range
78
78
  last = args.last.source_range
79
79
 
80
- check_no_space(opening_pipe.end_pos, first.begin_pos,
81
- 'Space before first')
80
+ check_no_space(opening_pipe.end_pos, first.begin_pos, 'Space before first')
82
81
  check_no_space(last_end_pos_inside_pipes(arguments, last),
83
82
  closing_pipe.begin_pos, 'Space after last')
84
83
  end
@@ -98,8 +97,7 @@ module RuboCop
98
97
 
99
98
  check_space(opening_pipe.end_pos, range.begin_pos, range,
100
99
  'before first block parameter', first_arg)
101
- check_no_space(opening_pipe.end_pos, range.begin_pos - 1,
102
- 'Extra space before first')
100
+ check_no_space(opening_pipe.end_pos, range.begin_pos - 1, 'Extra space before first')
103
101
  end
104
102
 
105
103
  def check_closing_pipe_space(arguments, closing_pipe)
@@ -108,10 +106,8 @@ module RuboCop
108
106
  last = args.last.source_range
109
107
  last_end_pos = last_end_pos_inside_pipes(arguments, last)
110
108
 
111
- check_space(last_end_pos, closing_pipe.begin_pos, last,
112
- 'after last block parameter')
113
- check_no_space(last_end_pos + 1, closing_pipe.begin_pos,
114
- 'Extra space after last')
109
+ check_space(last_end_pos, closing_pipe.begin_pos, last, 'after last block parameter')
110
+ check_no_space(last_end_pos + 1, closing_pipe.begin_pos, 'Extra space after last')
115
111
  end
116
112
 
117
113
  def last_end_pos_inside_pipes(arguments, range)
@@ -123,9 +119,7 @@ module RuboCop
123
119
  end
124
120
 
125
121
  def check_each_arg(args)
126
- args.children.each do |arg|
127
- check_arg(arg)
128
- end
122
+ args.children.each { |arg| check_arg(arg) }
129
123
  end
130
124
 
131
125
  def check_arg(arg)
@@ -160,9 +154,7 @@ module RuboCop
160
154
  return if range.source.include?("\n")
161
155
 
162
156
  message = "#{msg} block parameter detected."
163
- add_offense(range, message: message) do |corrector|
164
- corrector.remove(range)
165
- end
157
+ add_offense(range, message: message) { |corrector| corrector.remove(range) }
166
158
  end
167
159
  end
168
160
  end
@@ -47,8 +47,7 @@ module RuboCop
47
47
  space_on_both_sides = space_on_both_sides?(arg, equals)
48
48
  no_surrounding_space = no_surrounding_space?(arg, equals)
49
49
 
50
- if style == :space && space_on_both_sides ||
51
- style == :no_space && no_surrounding_space
50
+ if style == :space && space_on_both_sides || style == :no_space && no_surrounding_space
52
51
  correct_style_detected
53
52
  else
54
53
  incorrect_style_detected(arg, value)
@@ -33,10 +33,8 @@ module RuboCop
33
33
  DO = 'do'
34
34
  SAFE_NAVIGATION = '&.'
35
35
  NAMESPACE_OPERATOR = '::'
36
- ACCEPT_LEFT_PAREN =
37
- %w[break defined? next not rescue return super yield].freeze
38
- ACCEPT_LEFT_SQUARE_BRACKET =
39
- %w[super yield].freeze
36
+ ACCEPT_LEFT_PAREN = %w[break defined? next not rescue return super yield].freeze
37
+ ACCEPT_LEFT_SQUARE_BRACKET = %w[super yield].freeze
40
38
  ACCEPT_NAMESPACE_OPERATOR = 'super'
41
39
 
42
40
  def on_and(node)
@@ -194,8 +192,7 @@ module RuboCop
194
192
 
195
193
  return false if accepted_opening_delimiter?(range, char)
196
194
  return false if safe_navigation_call?(range, pos)
197
- return false if accept_namespace_operator?(range) &&
198
- namespace_operator?(range, pos)
195
+ return false if accept_namespace_operator?(range) && namespace_operator?(range, pos)
199
196
 
200
197
  !/[\s;,#\\)}\].]/.match?(char)
201
198
  end
@@ -92,9 +92,7 @@ module RuboCop
92
92
  if node.setter_method?
93
93
  on_special_asgn(node)
94
94
  elsif regular_operator?(node)
95
- check_operator(:send,
96
- node.loc.selector,
97
- node.first_argument.source_range)
95
+ check_operator(:send, node.loc.selector, node.first_argument.source_range)
98
96
  end
99
97
  end
100
98
 
@@ -138,13 +136,11 @@ module RuboCop
138
136
  private
139
137
 
140
138
  def regular_operator?(send_node)
141
- !send_node.unary_operation? && !send_node.dot? &&
142
- operator_with_regular_syntax?(send_node)
139
+ !send_node.unary_operation? && !send_node.dot? && operator_with_regular_syntax?(send_node)
143
140
  end
144
141
 
145
142
  def operator_with_regular_syntax?(send_node)
146
- send_node.operator_method? &&
147
- !IRREGULAR_METHODS.include?(send_node.method_name)
143
+ send_node.operator_method? && !IRREGULAR_METHODS.include?(send_node.method_name)
148
144
  end
149
145
 
150
146
  def check_operator(type, operator, right_operand)
@@ -225,8 +221,7 @@ module RuboCop
225
221
  end
226
222
 
227
223
  def hash_table_style?
228
- align_hash_cop_config &&
229
- align_hash_cop_config['EnforcedHashRocketStyle'] == 'table'
224
+ align_hash_cop_config && align_hash_cop_config['EnforcedHashRocketStyle'] == 'table'
230
225
  end
231
226
 
232
227
  def space_around_exponent_operator?
@@ -136,8 +136,7 @@ module RuboCop
136
136
  end
137
137
 
138
138
  def conflict_with_block_delimiters?(node)
139
- block_delimiters_style == 'line_count_based' &&
140
- style == :no_space && node.multiline?
139
+ block_delimiters_style == 'line_count_based' && style == :no_space && node.multiline?
141
140
  end
142
141
 
143
142
  def block_delimiters_style
@@ -53,9 +53,7 @@ module RuboCop
53
53
  end
54
54
 
55
55
  def register_offense(range)
56
- add_offense(range) do |corrector|
57
- corrector.remove(range)
58
- end
56
+ add_offense(range) { |corrector| corrector.remove(range) }
59
57
  end
60
58
 
61
59
  def reference_variable_with_brackets?(node)
@@ -25,9 +25,7 @@ module RuboCop
25
25
 
26
26
  range = token2.pos
27
27
 
28
- add_offense(range) do |corrector|
29
- corrector.insert_before(range, ' ')
30
- end
28
+ add_offense(range) { |corrector| corrector.insert_before(range, ' ') }
31
29
  end
32
30
  end
33
31
  end
@@ -26,23 +26,18 @@ module RuboCop
26
26
  include RangeHelp
27
27
  extend AutoCorrector
28
28
 
29
- MSG = 'Put one space between the method name and ' \
30
- 'the first argument.'
29
+ MSG = 'Put one space between the method name and the first argument.'
31
30
 
32
31
  def on_send(node)
33
32
  return unless regular_method_call_with_arguments?(node)
34
33
 
35
34
  first_arg = node.first_argument.source_range
36
- first_arg_with_space = range_with_surrounding_space(range: first_arg,
37
- side: :left)
38
- space = range_between(first_arg_with_space.begin_pos,
39
- first_arg.begin_pos)
35
+ first_arg_with_space = range_with_surrounding_space(range: first_arg, side: :left)
36
+ space = range_between(first_arg_with_space.begin_pos, first_arg.begin_pos)
40
37
  return if space.length == 1
41
38
  return unless expect_params_after_method_name?(node)
42
39
 
43
- add_offense(space) do |corrector|
44
- corrector.replace(space, ' ')
45
- end
40
+ add_offense(space) { |corrector| corrector.replace(space, ' ') }
46
41
  end
47
42
  alias on_csend on_send
48
43
 
@@ -59,8 +54,7 @@ module RuboCop
59
54
  first_arg = node.first_argument
60
55
 
61
56
  same_line?(first_arg, node) &&
62
- !(allow_for_alignment? &&
63
- aligned_with_something?(first_arg.source_range))
57
+ !(allow_for_alignment? && aligned_with_something?(first_arg.source_range))
64
58
  end
65
59
 
66
60
  def no_space_between_method_name_and_first_argument?(node)
@@ -24,10 +24,8 @@ module RuboCop
24
24
  include RangeHelp
25
25
  extend AutoCorrector
26
26
 
27
- MSG_REQUIRE_SPACE = 'Use a space between `->` and ' \
28
- '`(` in lambda literals.'
29
- MSG_REQUIRE_NO_SPACE = 'Do not use spaces between `->` and ' \
30
- '`(` in lambda literals.'
27
+ MSG_REQUIRE_SPACE = 'Use a space between `->` and `(` in lambda literals.'
28
+ MSG_REQUIRE_NO_SPACE = 'Do not use spaces between `->` and `(` in lambda literals.'
31
29
 
32
30
  def on_send(node)
33
31
  return unless arrow_lambda_with_args?(node)
@@ -142,11 +142,9 @@ module RuboCop
142
142
  case style
143
143
  when :no_space
144
144
  start_ok = next_to_comment?(node, left)
145
- no_space_offenses(node, left, right, MSG, start_ok: start_ok,
146
- end_ok: end_ok)
145
+ no_space_offenses(node, left, right, MSG, start_ok: start_ok, end_ok: end_ok)
147
146
  when :space
148
- space_offenses(node, left, right, MSG, start_ok: start_ok,
149
- end_ok: end_ok)
147
+ space_offenses(node, left, right, MSG, start_ok: start_ok, end_ok: end_ok)
150
148
  else
151
149
  compact_offenses(node, left, right, start_ok, end_ok)
152
150
  end
@@ -160,21 +158,18 @@ module RuboCop
160
158
  if qualifies_for_compact?(node, left, side: :left)
161
159
  compact_offense(node, left, side: :left)
162
160
  elsif !multi_dimensional_array?(node, left, side: :left)
163
- space_offenses(node, left, nil, MSG, start_ok: start_ok,
164
- end_ok: true)
161
+ space_offenses(node, left, nil, MSG, start_ok: start_ok, end_ok: true)
165
162
  end
166
163
  if qualifies_for_compact?(node, right)
167
164
  compact_offense(node, right)
168
165
  elsif !multi_dimensional_array?(node, right)
169
- space_offenses(node, nil, right, MSG, start_ok: true,
170
- end_ok: end_ok)
166
+ space_offenses(node, nil, right, MSG, start_ok: true, end_ok: end_ok)
171
167
  end
172
168
  end
173
169
 
174
170
  def qualifies_for_compact?(node, token, side: :right)
175
171
  if side == :right
176
- multi_dimensional_array?(node, token) &&
177
- !next_to_bracket?(token)
172
+ multi_dimensional_array?(node, token) && !next_to_bracket?(token)
178
173
  else
179
174
  multi_dimensional_array?(node, token, side: :left) &&
180
175
  !next_to_bracket?(token, side: :left)
@@ -18,8 +18,7 @@ module RuboCop
18
18
  extend AutoCorrector
19
19
 
20
20
  MSG = 'Use only a single space inside array percent literal.'
21
- MULTIPLE_SPACES_BETWEEN_ITEMS_REGEX =
22
- /(?:[\S&&[^\\]](?:\\ )*)( {2,})(?=\S)/.freeze
21
+ MULTIPLE_SPACES_BETWEEN_ITEMS_REGEX = /(?:[\S&&[^\\]](?:\\ )*)( {2,})(?=\S)/.freeze
23
22
 
24
23
  def on_array(node)
25
24
  process(node, '%i', '%I', '%w', '%W')
@@ -36,11 +35,7 @@ module RuboCop
36
35
  private
37
36
 
38
37
  def each_unnecessary_space_match(node, &blk)
39
- each_match_range(
40
- contents_range(node),
41
- MULTIPLE_SPACES_BETWEEN_ITEMS_REGEX,
42
- &blk
43
- )
38
+ each_match_range(contents_range(node), MULTIPLE_SPACES_BETWEEN_ITEMS_REGEX, &blk)
44
39
  end
45
40
  end
46
41
  end
@@ -129,8 +129,7 @@ module RuboCop
129
129
  args_delimiter = node.arguments.loc.begin # Can be ( | or nil.
130
130
 
131
131
  check_left_brace(inner, node.loc.begin, args_delimiter)
132
- check_right_brace(inner, node.loc.begin, node.loc.end,
133
- node.single_line?)
132
+ check_right_brace(inner, node.loc.begin, node.loc.end, node.single_line?)
134
133
  end
135
134
 
136
135
  def check_left_brace(inner, left_brace, args_delimiter)
@@ -143,8 +142,7 @@ module RuboCop
143
142
 
144
143
  def check_right_brace(inner, left_brace, right_brace, single_line)
145
144
  if single_line && /\S$/.match?(inner)
146
- no_space(right_brace.begin_pos, right_brace.end_pos,
147
- 'Space missing inside }.')
145
+ no_space(right_brace.begin_pos, right_brace.end_pos, 'Space missing inside }.')
148
146
  else
149
147
  return if multiline_block?(left_brace, right_brace) &&
150
148
  aligned_braces?(left_brace, right_brace)
@@ -174,8 +172,7 @@ module RuboCop
174
172
  # We indicate the position after the left brace. Otherwise it's
175
173
  # difficult to distinguish between space missing to the left and to
176
174
  # the right of the brace in autocorrect.
177
- no_space(left_brace.end_pos, left_brace.end_pos + 1,
178
- 'Space missing inside {.')
175
+ no_space(left_brace.end_pos, left_brace.end_pos + 1, 'Space missing inside {.')
179
176
  end
180
177
  end
181
178
 
@@ -188,8 +185,7 @@ module RuboCop
188
185
  'Space between { and | detected.')
189
186
  end
190
187
  else
191
- brace_with_space = range_with_surrounding_space(range: left_brace,
192
- side: :right)
188
+ brace_with_space = range_with_surrounding_space(range: left_brace, side: :right)
193
189
  space(brace_with_space.begin_pos + 1, brace_with_space.end_pos,
194
190
  'Space inside { detected.')
195
191
  end
@@ -200,8 +196,7 @@ module RuboCop
200
196
  end
201
197
 
202
198
  def space_inside_right_brace(right_brace)
203
- brace_with_space = range_with_surrounding_space(range: right_brace,
204
- side: :left)
199
+ brace_with_space = range_with_surrounding_space(range: right_brace, side: :left)
205
200
  space(brace_with_space.begin_pos, brace_with_space.end_pos - 1,
206
201
  'Space inside } detected.')
207
202
  end
@@ -90,8 +90,7 @@ module RuboCop
90
90
  expect_space = expect_space?(token1, token2)
91
91
 
92
92
  if offense?(token1, expect_space)
93
- incorrect_style_detected(token1, token2,
94
- expect_space, is_empty_braces)
93
+ incorrect_style_detected(token1, token2, expect_space, is_empty_braces)
95
94
  else
96
95
  correct_style_detected
97
96
  end
@@ -107,8 +107,7 @@ module RuboCop
107
107
  current_token = tokens.reverse.find(&:left_ref_bracket?)
108
108
  previous_token = previous_token(current_token)
109
109
 
110
- if node.method?(:[]=) ||
111
- previous_token && !previous_token.right_bracket?
110
+ if node.method?(:[]=) || previous_token && !previous_token.right_bracket?
112
111
  tokens.find(&:left_ref_bracket?)
113
112
  else
114
113
  current_token
@@ -11,11 +11,7 @@ module RuboCop
11
11
  end
12
12
 
13
13
  def <<(callable)
14
- suppress_clobbering do
15
- @corrector.transaction do
16
- callable.call(@corrector)
17
- end
18
- end
14
+ suppress_clobbering { @corrector.transaction { callable.call(@corrector) } }
19
15
  end
20
16
 
21
17
  def empty?
@@ -24,9 +20,7 @@ module RuboCop
24
20
 
25
21
  def concat(corrections)
26
22
  if corrections.is_a?(CorrectionsProxy)
27
- suppress_clobbering do
28
- corrector.merge!(corrections.corrector)
29
- end
23
+ suppress_clobbering { corrector.merge!(corrections.corrector) }
30
24
  else
31
25
  corrections.each { |correction| self << correction }
32
26
  end
@@ -13,9 +13,7 @@ module RuboCop
13
13
  merge!(corr.send(:corrector))
14
14
  else
15
15
  # warn "Corrector.new with corrections is deprecated." unless corr.empty? TODO
16
- corr.each do |c|
17
- corrections << c
18
- end
16
+ corr.each { |c| corrections << c }
19
17
  end
20
18
  end
21
19
 
@@ -25,12 +25,7 @@ module RuboCop
25
25
 
26
26
  SIMPLE_ASSIGNMENT_TYPES = %i[lvasgn ivasgn cvasgn gvasgn casgn].freeze
27
27
 
28
- MISTAKES = {
29
- '=-' => '-=',
30
- '=+' => '+=',
31
- '=*' => '*=',
32
- '=!' => '!='
33
- }.freeze
28
+ MISTAKES = { '=-' => '-=', '=+' => '+=', '=*' => '*=', '=!' => '!=' }.freeze
34
29
 
35
30
  def on_asgn(node)
36
31
  return unless (rhs = rhs(node))
@@ -6,6 +6,8 @@ module RuboCop
6
6
  # This cop checks for ambiguous block association with method
7
7
  # when param passed without parentheses.
8
8
  #
9
+ # This cop can customize ignored methods with `IgnoredMethods`.
10
+ #
9
11
  # @example
10
12
  #
11
13
  # # bad
@@ -26,7 +28,14 @@ module RuboCop
26
28
  # # good
27
29
  # # Lambda arguments require no disambiguation
28
30
  # foo = ->(bar) { bar.baz }
31
+ #
32
+ # @example IgnoredMethods: [change]
33
+ #
34
+ # # good
35
+ # expect { do_something }.to change { object.attribute }
29
36
  class AmbiguousBlockAssociation < Base
37
+ include IgnoredMethods
38
+
30
39
  MSG = 'Parenthesize the param `%<param>s` to make sure that the ' \
31
40
  'block will be associated with the `%<method>s` method ' \
32
41
  'call.'
@@ -35,8 +44,7 @@ module RuboCop
35
44
  return unless node.arguments?
36
45
 
37
46
  return unless ambiguous_block_association?(node)
38
- return if node.parenthesized? ||
39
- node.last_argument.lambda? || allowed_method?(node)
47
+ return if node.parenthesized? || node.last_argument.lambda? || allowed_method?(node)
40
48
 
41
49
  message = message(node)
42
50
 
@@ -47,19 +55,18 @@ module RuboCop
47
55
  private
48
56
 
49
57
  def ambiguous_block_association?(send_node)
50
- send_node.last_argument.block_type? &&
51
- !send_node.last_argument.send_node.arguments?
58
+ send_node.last_argument.block_type? && !send_node.last_argument.send_node.arguments?
52
59
  end
53
60
 
54
61
  def allowed_method?(node)
55
- node.assignment? || node.operator_method? || node.method?(:[])
62
+ node.assignment? || node.operator_method? || node.method?(:[]) ||
63
+ ignored_method?(node.last_argument.send_node.source)
56
64
  end
57
65
 
58
66
  def message(send_node)
59
67
  block_param = send_node.last_argument
60
68
 
61
- format(MSG, param: block_param.source,
62
- method: block_param.send_node.source)
69
+ format(MSG, param: block_param.source, method: block_param.send_node.source)
63
70
  end
64
71
  end
65
72
  end