rubocop 0.86.0 → 0.89.1

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 (377) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/bin/rubocop-profile +32 -0
  4. data/config/default.yml +198 -25
  5. data/lib/rubocop.rb +30 -5
  6. data/lib/rubocop/cli.rb +2 -4
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +42 -7
  8. data/lib/rubocop/cli/command/base.rb +1 -0
  9. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  10. data/lib/rubocop/cli/command/show_cops.rb +3 -3
  11. data/lib/rubocop/cli/command/version.rb +2 -2
  12. data/lib/rubocop/comment_config.rb +5 -7
  13. data/lib/rubocop/config.rb +20 -3
  14. data/lib/rubocop/config_loader.rb +41 -69
  15. data/lib/rubocop/config_loader_resolver.rb +3 -3
  16. data/lib/rubocop/config_obsoletion.rb +6 -2
  17. data/lib/rubocop/config_store.rb +4 -0
  18. data/lib/rubocop/config_validator.rb +2 -4
  19. data/lib/rubocop/cop/autocorrect_logic.rb +14 -24
  20. data/lib/rubocop/cop/badge.rb +1 -1
  21. data/lib/rubocop/cop/base.rb +407 -0
  22. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
  23. data/lib/rubocop/cop/commissioner.rb +47 -50
  24. data/lib/rubocop/cop/cop.rb +85 -236
  25. data/lib/rubocop/cop/corrector.rb +38 -115
  26. data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
  27. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
  28. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
  29. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
  30. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
  31. data/lib/rubocop/cop/force.rb +1 -0
  32. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +38 -12
  33. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  34. data/lib/rubocop/cop/generator.rb +1 -1
  35. data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
  36. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
  37. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
  38. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
  39. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
  40. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
  41. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
  42. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
  43. data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
  44. data/lib/rubocop/cop/layout/case_indentation.rb +18 -19
  45. data/lib/rubocop/cop/layout/class_structure.rb +5 -44
  46. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  47. data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
  48. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  49. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -8
  50. data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
  51. data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
  52. data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -0
  53. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
  54. data/lib/rubocop/cop/layout/hash_alignment.rb +1 -2
  55. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
  56. data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
  57. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  58. data/lib/rubocop/cop/layout/multiline_block_layout.rb +16 -6
  59. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
  60. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
  61. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +22 -27
  62. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
  63. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -2
  64. data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
  65. data/lib/rubocop/cop/legacy/corrector.rb +29 -0
  66. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
  67. data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
  68. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
  69. data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
  70. data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
  71. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
  72. data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
  73. data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
  74. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
  75. data/lib/rubocop/cop/lint/debugger.rb +7 -1
  76. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
  77. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +21 -17
  78. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
  79. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  80. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
  81. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
  82. data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
  83. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
  84. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  85. data/lib/rubocop/cop/lint/else_layout.rb +1 -1
  86. data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
  87. data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
  88. data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
  89. data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
  90. data/lib/rubocop/cop/lint/empty_when.rb +2 -2
  91. data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
  92. data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
  93. data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
  94. data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
  95. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  96. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
  97. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
  98. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +5 -4
  99. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
  100. data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
  101. data/lib/rubocop/cop/lint/interpolation_check.rb +21 -5
  102. data/lib/rubocop/cop/lint/literal_as_condition.rb +14 -2
  103. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
  104. data/lib/rubocop/cop/lint/loop.rb +23 -2
  105. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
  106. data/lib/rubocop/cop/lint/missing_super.rb +99 -0
  107. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  108. data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
  109. data/lib/rubocop/cop/lint/nested_method_definition.rb +15 -21
  110. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  111. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  112. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +84 -13
  113. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
  114. data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
  115. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
  116. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +90 -0
  117. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +12 -13
  118. data/lib/rubocop/cop/lint/percent_string_array.rb +13 -12
  119. data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
  120. data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
  121. data/lib/rubocop/cop/lint/rand_one.rb +3 -3
  122. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +41 -40
  123. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
  124. data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
  125. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +15 -11
  126. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
  127. data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
  128. data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
  129. data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
  130. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
  131. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  132. data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
  133. data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
  134. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
  135. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
  136. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +10 -2
  137. data/lib/rubocop/cop/lint/script_permission.rb +10 -7
  138. data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
  139. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
  140. data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
  141. data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
  142. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
  143. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
  144. data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
  145. data/lib/rubocop/cop/lint/syntax.rb +11 -26
  146. data/lib/rubocop/cop/lint/to_json.rb +4 -6
  147. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
  148. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
  149. data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
  150. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  151. data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
  152. data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
  153. data/lib/rubocop/cop/lint/unused_method_argument.rb +9 -4
  154. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  155. data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
  156. data/lib/rubocop/cop/lint/useless_access_modifier.rb +26 -16
  157. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
  158. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
  159. data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
  160. data/lib/rubocop/cop/lint/void.rb +3 -7
  161. data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
  162. data/lib/rubocop/cop/metrics/block_length.rb +24 -2
  163. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
  164. data/lib/rubocop/cop/metrics/class_length.rb +26 -3
  165. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
  166. data/lib/rubocop/cop/metrics/method_length.rb +25 -2
  167. data/lib/rubocop/cop/metrics/module_length.rb +26 -3
  168. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
  169. data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
  170. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
  171. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +157 -0
  172. data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
  173. data/lib/rubocop/cop/migration/department_name.rb +14 -16
  174. data/lib/rubocop/cop/mixin/alignment.rb +2 -1
  175. data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
  176. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
  177. data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
  178. data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
  179. data/lib/rubocop/cop/mixin/code_length.rb +26 -5
  180. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
  181. data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
  182. data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
  183. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
  184. data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
  185. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  186. data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
  187. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
  188. data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
  189. data/lib/rubocop/cop/mixin/range_help.rb +18 -4
  190. data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
  191. data/lib/rubocop/cop/mixin/surrounding_space.rb +4 -24
  192. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  193. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +10 -15
  194. data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
  195. data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
  196. data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
  197. data/lib/rubocop/cop/naming/ascii_identifiers.rb +29 -6
  198. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +3 -3
  199. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  200. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
  201. data/lib/rubocop/cop/naming/constant_name.rb +2 -2
  202. data/lib/rubocop/cop/naming/file_name.rb +3 -3
  203. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
  204. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
  205. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
  206. data/lib/rubocop/cop/naming/method_name.rb +1 -1
  207. data/lib/rubocop/cop/naming/method_parameter_name.rb +2 -2
  208. data/lib/rubocop/cop/naming/predicate_name.rb +6 -10
  209. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
  210. data/lib/rubocop/cop/naming/variable_name.rb +1 -1
  211. data/lib/rubocop/cop/naming/variable_number.rb +1 -1
  212. data/lib/rubocop/cop/offense.rb +16 -2
  213. data/lib/rubocop/cop/registry.rb +3 -3
  214. data/lib/rubocop/cop/security/eval.rb +2 -2
  215. data/lib/rubocop/cop/security/json_load.rb +6 -8
  216. data/lib/rubocop/cop/security/marshal_load.rb +2 -4
  217. data/lib/rubocop/cop/security/open.rb +2 -2
  218. data/lib/rubocop/cop/security/yaml_load.rb +6 -6
  219. data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
  220. data/lib/rubocop/cop/style/accessor_grouping.rb +149 -0
  221. data/lib/rubocop/cop/style/alias.rb +41 -36
  222. data/lib/rubocop/cop/style/and_or.rb +9 -11
  223. data/lib/rubocop/cop/style/array_coercion.rb +63 -0
  224. data/lib/rubocop/cop/style/array_join.rb +6 -8
  225. data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
  226. data/lib/rubocop/cop/style/attr.rb +11 -9
  227. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -7
  228. data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
  229. data/lib/rubocop/cop/style/begin_block.rb +2 -2
  230. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +141 -0
  231. data/lib/rubocop/cop/style/block_comments.rb +14 -18
  232. data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
  233. data/lib/rubocop/cop/style/case_equality.rb +22 -3
  234. data/lib/rubocop/cop/style/case_like_if.rb +220 -0
  235. data/lib/rubocop/cop/style/class_and_module_children.rb +14 -11
  236. data/lib/rubocop/cop/style/class_check.rb +7 -9
  237. data/lib/rubocop/cop/style/class_methods.rb +7 -11
  238. data/lib/rubocop/cop/style/class_vars.rb +24 -7
  239. data/lib/rubocop/cop/style/collection_methods.rb +11 -17
  240. data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
  241. data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
  242. data/lib/rubocop/cop/style/command_literal.rb +23 -24
  243. data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
  244. data/lib/rubocop/cop/style/commented_keyword.rb +6 -3
  245. data/lib/rubocop/cop/style/conditional_assignment.rb +13 -4
  246. data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
  247. data/lib/rubocop/cop/style/copyright.rb +12 -12
  248. data/lib/rubocop/cop/style/date_time.rb +2 -2
  249. data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
  250. data/lib/rubocop/cop/style/dir.rb +9 -12
  251. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
  252. data/lib/rubocop/cop/style/documentation.rb +6 -8
  253. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  254. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
  255. data/lib/rubocop/cop/style/double_negation.rb +2 -2
  256. data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
  257. data/lib/rubocop/cop/style/each_with_object.rb +16 -19
  258. data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
  259. data/lib/rubocop/cop/style/empty_else.rb +17 -19
  260. data/lib/rubocop/cop/style/empty_literal.rb +20 -21
  261. data/lib/rubocop/cop/style/empty_method.rb +10 -13
  262. data/lib/rubocop/cop/style/encoding.rb +5 -9
  263. data/lib/rubocop/cop/style/end_block.rb +4 -6
  264. data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
  265. data/lib/rubocop/cop/style/even_odd.rb +7 -11
  266. data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -22
  267. data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
  268. data/lib/rubocop/cop/style/exponential_notation.rb +7 -9
  269. data/lib/rubocop/cop/style/float_division.rb +8 -11
  270. data/lib/rubocop/cop/style/for.rb +11 -15
  271. data/lib/rubocop/cop/style/format_string.rb +21 -19
  272. data/lib/rubocop/cop/style/format_string_token.rb +10 -12
  273. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
  274. data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
  275. data/lib/rubocop/cop/style/global_vars.rb +2 -2
  276. data/lib/rubocop/cop/style/guard_clause.rb +5 -6
  277. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
  278. data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
  279. data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
  280. data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
  281. data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
  282. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
  283. data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
  284. data/lib/rubocop/cop/style/if_inside_else.rb +3 -3
  285. data/lib/rubocop/cop/style/if_unless_modifier.rb +18 -40
  286. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +11 -3
  287. data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
  288. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
  289. data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
  290. data/lib/rubocop/cop/style/inline_comment.rb +3 -3
  291. data/lib/rubocop/cop/style/inverse_methods.rb +22 -32
  292. data/lib/rubocop/cop/style/lambda.rb +7 -12
  293. data/lib/rubocop/cop/style/lambda_call.rb +14 -13
  294. data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
  295. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
  296. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
  297. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
  298. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
  299. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
  300. data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
  301. data/lib/rubocop/cop/style/min_max.rb +8 -12
  302. data/lib/rubocop/cop/style/missing_else.rb +11 -21
  303. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
  304. data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
  305. data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
  306. data/lib/rubocop/cop/style/module_function.rb +10 -13
  307. data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
  308. data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
  309. data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
  310. data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
  311. data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
  312. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -6
  313. data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
  314. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  315. data/lib/rubocop/cop/style/mutable_constant.rb +27 -24
  316. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -6
  317. data/lib/rubocop/cop/style/numeric_predicate.rb +7 -4
  318. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
  319. data/lib/rubocop/cop/style/parallel_assignment.rb +5 -5
  320. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  321. data/lib/rubocop/cop/style/proc.rb +1 -1
  322. data/lib/rubocop/cop/style/random_with_offset.rb +5 -10
  323. data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
  324. data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
  325. data/lib/rubocop/cop/style/redundant_exception.rb +18 -10
  326. data/lib/rubocop/cop/style/redundant_fetch_block.rb +26 -7
  327. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
  328. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  329. data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -1
  330. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -1
  331. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +11 -11
  332. data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
  333. data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
  334. data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
  335. data/lib/rubocop/cop/style/signal_exception.rb +3 -1
  336. data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
  337. data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
  338. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -2
  339. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  340. data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
  341. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
  342. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  343. data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
  344. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
  345. data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
  346. data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -8
  347. data/lib/rubocop/cop/team.rb +98 -82
  348. data/lib/rubocop/cop/tokens_util.rb +84 -0
  349. data/lib/rubocop/cop/util.rb +3 -13
  350. data/lib/rubocop/cop/utils/format_string.rb +1 -2
  351. data/lib/rubocop/cop/variable_force.rb +0 -2
  352. data/lib/rubocop/cop/variable_force/branch.rb +1 -0
  353. data/lib/rubocop/cop/variable_force/variable.rb +7 -5
  354. data/lib/rubocop/cops_documentation_generator.rb +282 -0
  355. data/lib/rubocop/error.rb +1 -0
  356. data/lib/rubocop/file_finder.rb +12 -12
  357. data/lib/rubocop/formatter/disabled_config_formatter.rb +2 -2
  358. data/lib/rubocop/formatter/formatter_set.rb +1 -0
  359. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  360. data/lib/rubocop/name_similarity.rb +1 -3
  361. data/lib/rubocop/options.rb +18 -11
  362. data/lib/rubocop/path_util.rb +17 -17
  363. data/lib/rubocop/rake_task.rb +7 -9
  364. data/lib/rubocop/result_cache.rb +12 -8
  365. data/lib/rubocop/rspec/cop_helper.rb +4 -4
  366. data/lib/rubocop/rspec/expect_offense.rb +53 -22
  367. data/lib/rubocop/rspec/shared_contexts.rb +16 -17
  368. data/lib/rubocop/runner.rb +35 -34
  369. data/lib/rubocop/target_finder.rb +13 -10
  370. data/lib/rubocop/target_ruby.rb +1 -1
  371. data/lib/rubocop/version.rb +2 -2
  372. metadata +40 -11
  373. data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
  374. data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
  375. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
  376. data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -35
  377. data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -53,22 +53,23 @@ module RuboCop
53
53
  # # do something
54
54
  # end
55
55
  #
56
- class RescuedExceptionsVariableName < Cop
56
+ class RescuedExceptionsVariableName < Base
57
+ extend AutoCorrector
58
+
57
59
  MSG = 'Use `%<preferred>s` instead of `%<bad>s`.'
58
60
 
59
61
  def on_resbody(node)
60
- name = variable_name(node)
61
- return unless name
62
- return if preferred_name(name).to_sym == name
62
+ offending_name = variable_name(node)
63
+ return unless offending_name
63
64
 
64
- add_offense(node, location: offense_range(node))
65
- end
65
+ preferred_name = preferred_name(offending_name)
66
+ return if preferred_name.to_sym == offending_name
67
+
68
+ range = offense_range(node)
69
+ message = message(node)
66
70
 
67
- def autocorrect(node)
68
- lambda do |corrector|
69
- offending_name = variable_name(node)
70
- preferred_name = preferred_name(offending_name)
71
- corrector.replace(offense_range(node), preferred_name)
71
+ add_offense(range, message: message) do |corrector|
72
+ corrector.replace(range, preferred_name)
72
73
 
73
74
  node.body&.each_descendant(:lvar) do |var|
74
75
  next unless var.children.first == offending_name
@@ -19,7 +19,7 @@ module RuboCop
19
19
  #
20
20
  # # good
21
21
  # fooBar = 1
22
- class VariableName < Cop
22
+ class VariableName < Base
23
23
  include ConfigurableNaming
24
24
 
25
25
  MSG = 'Use %<style>s for variable names.'
@@ -37,7 +37,7 @@ module RuboCop
37
37
  # variableone = 1
38
38
  #
39
39
  # variable_one = 1
40
- class VariableNumber < Cop
40
+ class VariableNumber < Base
41
41
  include ConfigurableNumbering
42
42
 
43
43
  MSG = 'Use %<style>s for variable numbers.'
@@ -54,14 +54,28 @@ module RuboCop
54
54
  # @api private
55
55
  attr_reader :status
56
56
 
57
+ # @api public
58
+ #
59
+ # @!attribute [r] corrector
60
+ #
61
+ # @return [Corrector | nil]
62
+ # the autocorrection for this offense, or `nil` when not available
63
+ attr_reader :corrector
64
+
65
+ PseudoSourceRange = Struct.new(:line, :column, :source_line, :begin_pos,
66
+ :end_pos)
67
+
68
+ NO_LOCATION = PseudoSourceRange.new(1, 0, '', 0, 1).freeze
69
+
57
70
  # @api private
58
- def initialize(severity, location, message, cop_name,
59
- status = :uncorrected)
71
+ def initialize(severity, location, message, cop_name, # rubocop:disable Metrics/ParameterLists
72
+ status = :uncorrected, corrector = nil)
60
73
  @severity = RuboCop::Cop::Severity.new(severity)
61
74
  @location = location
62
75
  @message = message.freeze
63
76
  @cop_name = cop_name.freeze
64
77
  @status = status
78
+ @corrector = corrector
65
79
  freeze
66
80
  end
67
81
 
@@ -100,9 +100,9 @@ module RuboCop
100
100
  # @note Emits a warning if the provided name has an incorrect namespace
101
101
  #
102
102
  # @return [String] Qualified cop name
103
- def qualified_cop_name(name, path, shall_warn = true)
103
+ def qualified_cop_name(name, path, warn: true)
104
104
  badge = Badge.parse(name)
105
- print_warning(name, path) if shall_warn && department_missing?(badge, name)
105
+ print_warning(name, path) if warn && department_missing?(badge, name)
106
106
  return name if registered?(badge)
107
107
 
108
108
  potential_badges = qualify_badge(badge)
@@ -149,7 +149,7 @@ module RuboCop
149
149
  @registry.size
150
150
  end
151
151
 
152
- def enabled(config, only = [], only_safe = false)
152
+ def enabled(config, only = [], only_safe: false)
153
153
  select do |cop|
154
154
  only.include?(cop.cop_name) || enabled?(cop, config, only_safe)
155
155
  end
@@ -11,7 +11,7 @@ module RuboCop
11
11
  #
12
12
  # eval(something)
13
13
  # binding.eval(something)
14
- class Eval < Cop
14
+ class Eval < Base
15
15
  MSG = 'The use of `eval` is a serious security risk.'
16
16
 
17
17
  def_node_matcher :eval?, <<~PATTERN
@@ -22,7 +22,7 @@ module RuboCop
22
22
  eval?(node) do |code|
23
23
  return if code.dstr_type? && code.recursive_literal?
24
24
 
25
- add_offense(node, location: :selector)
25
+ add_offense(node.loc.selector)
26
26
  end
27
27
  end
28
28
  end
@@ -22,7 +22,9 @@ module RuboCop
22
22
  # # good
23
23
  # JSON.parse("{}")
24
24
  #
25
- class JSONLoad < Cop
25
+ class JSONLoad < Base
26
+ extend AutoCorrector
27
+
26
28
  MSG = 'Prefer `JSON.parse` over `JSON.%<method>s`.'
27
29
 
28
30
  def_node_matcher :json_load, <<~PATTERN
@@ -31,15 +33,11 @@ module RuboCop
31
33
 
32
34
  def on_send(node)
33
35
  json_load(node) do |method|
34
- add_offense(node,
35
- location: :selector,
36
- message: format(MSG, method: method))
36
+ add_offense(node.loc.selector, message: format(MSG, method: method)) do |corrector|
37
+ corrector.replace(node.loc.selector, 'parse')
38
+ end
37
39
  end
38
40
  end
39
-
40
- def autocorrect(node)
41
- ->(corrector) { corrector.replace(node.loc.selector, 'parse') }
42
- end
43
41
  end
44
42
  end
45
43
  end
@@ -18,7 +18,7 @@ module RuboCop
18
18
  # # okish - deep copy hack
19
19
  # Marshal.load(Marshal.dump({}))
20
20
  #
21
- class MarshalLoad < Cop
21
+ class MarshalLoad < Base
22
22
  MSG = 'Avoid using `Marshal.%<method>s`.'
23
23
 
24
24
  def_node_matcher :marshal_load, <<~PATTERN
@@ -28,9 +28,7 @@ module RuboCop
28
28
 
29
29
  def on_send(node)
30
30
  marshal_load(node) do |method|
31
- add_offense(node,
32
- location: :selector,
33
- message: format(MSG, method: method))
31
+ add_offense(node.loc.selector, message: format(MSG, method: method))
34
32
  end
35
33
  end
36
34
  end
@@ -19,7 +19,7 @@ module RuboCop
19
19
  # File.open(something)
20
20
  # IO.popen(something)
21
21
  # URI.parse(something).open
22
- class Open < Cop
22
+ class Open < Base
23
23
  MSG = 'The use of `Kernel#open` is a serious security risk.'
24
24
 
25
25
  def_node_matcher :open?, <<~PATTERN
@@ -30,7 +30,7 @@ module RuboCop
30
30
  open?(node) do |code|
31
31
  return if safe?(code)
32
32
 
33
- add_offense(node, location: :selector)
33
+ add_offense(node.loc.selector)
34
34
  end
35
35
  end
36
36
 
@@ -15,7 +15,9 @@ module RuboCop
15
15
  # YAML.safe_load("--- foo")
16
16
  # YAML.dump("foo")
17
17
  #
18
- class YAMLLoad < Cop
18
+ class YAMLLoad < Base
19
+ extend AutoCorrector
20
+
19
21
  MSG = 'Prefer using `YAML.safe_load` over `YAML.load`.'
20
22
 
21
23
  def_node_matcher :yaml_load, <<~PATTERN
@@ -24,13 +26,11 @@ module RuboCop
24
26
 
25
27
  def on_send(node)
26
28
  yaml_load(node) do
27
- add_offense(node, location: :selector)
29
+ add_offense(node.loc.selector) do |corrector|
30
+ corrector.replace(node.loc.selector, 'safe_load')
31
+ end
28
32
  end
29
33
  end
30
-
31
- def autocorrect(node)
32
- ->(corrector) { corrector.replace(node.loc.selector, 'safe_load') }
33
- end
34
34
  end
35
35
  end
36
36
  end
@@ -62,9 +62,11 @@ module RuboCop
62
62
  # private :bar, :baz
63
63
  #
64
64
  # end
65
- class AccessModifierDeclarations < Cop
65
+ class AccessModifierDeclarations < Base
66
66
  include ConfigurableEnforcedStyle
67
67
 
68
+ ACCESS_MODIFIERS = %i[private protected public module_function].to_set.freeze
69
+
68
70
  GROUP_STYLE_MESSAGE = [
69
71
  '`%<access_modifier>s` should not be',
70
72
  'inlined in method definitions.'
@@ -80,15 +82,12 @@ module RuboCop
80
82
  PATTERN
81
83
 
82
84
  def on_send(node)
83
- return unless node.access_modifier?
85
+ return unless access_modifier?(node)
84
86
  return if node.parent.pair_type?
85
- return if cop_config['AllowModifiersOnSymbols'] &&
86
- access_modifier_with_symbol?(node)
87
+ return if cop_config['AllowModifiersOnSymbols'] && access_modifier_with_symbol?(node)
87
88
 
88
89
  if offense?(node)
89
- add_offense(node, location: :selector) do
90
- opposite_style_detected
91
- end
90
+ add_offense(node.loc.selector) if opposite_style_detected
92
91
  else
93
92
  correct_style_detected
94
93
  end
@@ -96,6 +95,14 @@ module RuboCop
96
95
 
97
96
  private
98
97
 
98
+ def access_modifier?(node)
99
+ maybe_access_modifier?(node) && node.access_modifier?
100
+ end
101
+
102
+ def maybe_access_modifier?(node)
103
+ !node.receiver && ACCESS_MODIFIERS.include?(node.method_name)
104
+ end
105
+
99
106
  def offense?(node)
100
107
  (group_style? && access_modifier_is_inlined?(node)) ||
101
108
  (inline_style? && access_modifier_is_not_inlined?(node))
@@ -117,8 +124,8 @@ module RuboCop
117
124
  !access_modifier_is_inlined?(node)
118
125
  end
119
126
 
120
- def message(node)
121
- access_modifier = node.loc.selector.source
127
+ def message(range)
128
+ access_modifier = range.source
122
129
 
123
130
  if group_style?
124
131
  format(GROUP_STYLE_MESSAGE, access_modifier: access_modifier)
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for grouping of accessors in `class` and `module` bodies.
7
+ # By default it enforces accessors to be placed in grouped declarations,
8
+ # but it can be configured to enforce separating them in multiple declarations.
9
+ #
10
+ # @example EnforcedStyle: grouped (default)
11
+ # # bad
12
+ # class Foo
13
+ # attr_reader :bar
14
+ # attr_reader :baz
15
+ # end
16
+ #
17
+ # # good
18
+ # class Foo
19
+ # attr_reader :bar, :baz
20
+ # end
21
+ #
22
+ # @example EnforcedStyle: separated
23
+ # # bad
24
+ # class Foo
25
+ # attr_reader :bar, :baz
26
+ # end
27
+ #
28
+ # # good
29
+ # class Foo
30
+ # attr_reader :bar
31
+ # attr_reader :baz
32
+ # end
33
+ #
34
+ class AccessorGrouping < Base
35
+ include ConfigurableEnforcedStyle
36
+ include RangeHelp
37
+ include VisibilityHelp
38
+ extend AutoCorrector
39
+
40
+ GROUPED_MSG = 'Group together all `%<accessor>s` attributes.'
41
+ SEPARATED_MSG = 'Use one attribute per `%<accessor>s`.'
42
+
43
+ ACCESSOR_METHODS = %i[attr_reader attr_writer attr_accessor attr].freeze
44
+
45
+ def on_class(node)
46
+ class_send_elements(node).each do |macro|
47
+ next unless accessor?(macro)
48
+
49
+ check(macro)
50
+ end
51
+ end
52
+ alias on_sclass on_class
53
+ alias on_module on_class
54
+
55
+ private
56
+
57
+ def check(send_node)
58
+ return if previous_line_comment?(send_node)
59
+ return unless grouped_style? && sibling_accessors(send_node).size > 1 ||
60
+ separated_style? && send_node.arguments.size > 1
61
+
62
+ message = message(send_node)
63
+ add_offense(send_node, message: message) do |corrector|
64
+ autocorrect(corrector, send_node)
65
+ end
66
+ end
67
+
68
+ def autocorrect(corrector, node)
69
+ if (preferred_accessors = preferred_accessors(node))
70
+ corrector.replace(node, preferred_accessors)
71
+ else
72
+ range = range_with_surrounding_space(range: node.loc.expression, side: :left)
73
+ corrector.remove(range)
74
+ end
75
+ end
76
+
77
+ def previous_line_comment?(node)
78
+ comment_line?(processed_source[node.first_line - 2])
79
+ end
80
+
81
+ def class_send_elements(class_node)
82
+ class_def = class_node.body
83
+
84
+ if !class_def || class_def.def_type?
85
+ []
86
+ elsif class_def.send_type?
87
+ [class_def]
88
+ else
89
+ class_def.each_child_node(:send).to_a
90
+ end
91
+ end
92
+
93
+ def accessor?(send_node)
94
+ send_node.macro? && ACCESSOR_METHODS.include?(send_node.method_name)
95
+ end
96
+
97
+ def grouped_style?
98
+ style == :grouped
99
+ end
100
+
101
+ def separated_style?
102
+ style == :separated
103
+ end
104
+
105
+ def sibling_accessors(send_node)
106
+ send_node.parent.each_child_node(:send).select do |sibling|
107
+ accessor?(sibling) &&
108
+ sibling.method?(send_node.method_name) &&
109
+ node_visibility(sibling) == node_visibility(send_node) &&
110
+ !previous_line_comment?(sibling)
111
+ end
112
+ end
113
+
114
+ def message(send_node)
115
+ msg = grouped_style? ? GROUPED_MSG : SEPARATED_MSG
116
+ format(msg, accessor: send_node.method_name)
117
+ end
118
+
119
+ def preferred_accessors(node)
120
+ if grouped_style?
121
+ accessors = sibling_accessors(node)
122
+ group_accessors(node, accessors) if node == accessors.first
123
+ else
124
+ separate_accessors(node)
125
+ end
126
+ end
127
+
128
+ def group_accessors(node, accessors)
129
+ accessor_names = accessors.flat_map do |accessor|
130
+ accessor.arguments.map(&:source)
131
+ end
132
+
133
+ "#{node.method_name} #{accessor_names.join(', ')}"
134
+ end
135
+
136
+ def separate_accessors(node)
137
+ node.arguments.map do |arg|
138
+ if arg == node.arguments.first
139
+ "#{node.method_name} #{arg.source}"
140
+ else
141
+ indent = ' ' * node.loc.column
142
+ "#{indent}#{node.method_name} #{arg.source}"
143
+ end
144
+ end.join("\n")
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
@@ -22,8 +22,9 @@ module RuboCop
22
22
  #
23
23
  # # good
24
24
  # alias_method :bar, :foo
25
- class Alias < Cop
25
+ class Alias < Base
26
26
  include ConfigurableEnforcedStyle
27
+ extend AutoCorrector
27
28
 
28
29
  MSG_ALIAS = 'Use `alias_method` instead of `alias`.'
29
30
  MSG_ALIAS_METHOD = 'Use `alias` instead of `alias_method` ' \
@@ -36,31 +37,37 @@ module RuboCop
36
37
  return unless style == :prefer_alias && alias_keyword_possible?(node)
37
38
 
38
39
  msg = format(MSG_ALIAS_METHOD, current: lexical_scope_type(node))
39
- add_offense(node, location: :selector, message: msg)
40
+ add_offense(node.loc.selector, message: msg) do |corrector|
41
+ autocorrect(corrector, node)
42
+ end
40
43
  end
41
44
 
42
45
  def on_alias(node)
43
46
  return unless alias_method_possible?(node)
44
47
 
45
48
  if scope_type(node) == :dynamic || style == :prefer_alias_method
46
- add_offense(node, location: :keyword, message: MSG_ALIAS)
49
+ add_offense(node.loc.keyword, message: MSG_ALIAS) do |corrector|
50
+ autocorrect(corrector, node)
51
+ end
47
52
  elsif node.children.none? { |arg| bareword?(arg) }
48
- add_offense_for_args(node)
53
+ add_offense_for_args(node) do |corrector|
54
+ autocorrect(corrector, node)
55
+ end
49
56
  end
50
57
  end
51
58
 
52
- def autocorrect(node)
59
+ private
60
+
61
+ def autocorrect(corrector, node)
53
62
  if node.send_type?
54
- correct_alias_method_to_alias(node)
63
+ correct_alias_method_to_alias(corrector, node)
55
64
  elsif scope_type(node) == :dynamic || style == :prefer_alias_method
56
- correct_alias_to_alias_method(node)
65
+ correct_alias_to_alias_method(corrector, node)
57
66
  else
58
- correct_alias_with_symbol_args(node)
67
+ correct_alias_with_symbol_args(corrector, node)
59
68
  end
60
69
  end
61
70
 
62
- private
63
-
64
71
  def alias_keyword_possible?(node)
65
72
  scope_type(node) != :dynamic && node.arguments.all?(&:sym_type?)
66
73
  end
@@ -70,14 +77,14 @@ module RuboCop
70
77
  node.children.none?(&:gvar_type?)
71
78
  end
72
79
 
73
- def add_offense_for_args(node)
80
+ def add_offense_for_args(node, &block)
74
81
  existing_args = node.children.map(&:source).join(' ')
75
82
  preferred_args = node.children.map { |a| a.source[1..-1] }.join(' ')
76
83
  arg_ranges = node.children.map(&:source_range)
77
84
  msg = format(MSG_SYMBOL_ARGS,
78
85
  prefer: preferred_args,
79
86
  current: existing_args)
80
- add_offense(node, location: arg_ranges.reduce(&:join), message: msg)
87
+ add_offense(arg_ranges.reduce(&:join), message: msg, &block)
81
88
  end
82
89
 
83
90
  # In this expression, will `self` be the same as the innermost enclosing
@@ -101,41 +108,39 @@ module RuboCop
101
108
  end
102
109
 
103
110
  def lexical_scope_type(node)
104
- node.each_ancestor(:class, :module) do |ancestor|
105
- return ancestor.class_type? ? 'in a class body' : 'in a module body'
111
+ ancestor = node.each_ancestor(:class, :module).first
112
+ if ancestor.nil?
113
+ 'at the top level'
114
+ elsif ancestor.class_type?
115
+ 'in a class body'
116
+ else
117
+ 'in a module body'
106
118
  end
107
- 'at the top level'
108
119
  end
109
120
 
110
121
  def bareword?(sym_node)
111
122
  !sym_node.source.start_with?(':')
112
123
  end
113
124
 
114
- def correct_alias_method_to_alias(send_node)
115
- lambda do |corrector|
116
- new, old = *send_node.arguments
117
- replacement = "alias #{identifier(new)} #{identifier(old)}"
118
- corrector.replace(send_node, replacement)
119
- end
125
+ def correct_alias_method_to_alias(corrector, send_node)
126
+ new, old = *send_node.arguments
127
+ replacement = "alias #{identifier(new)} #{identifier(old)}"
128
+
129
+ corrector.replace(send_node, replacement)
120
130
  end
121
131
 
122
- def correct_alias_to_alias_method(node)
123
- lambda do |corrector|
124
- replacement =
125
- 'alias_method ' \
126
- ":#{identifier(node.new_identifier)}, " \
127
- ":#{identifier(node.old_identifier)}"
128
- corrector.replace(node, replacement)
129
- end
132
+ def correct_alias_to_alias_method(corrector, node)
133
+ replacement =
134
+ 'alias_method ' \
135
+ ":#{identifier(node.new_identifier)}, " \
136
+ ":#{identifier(node.old_identifier)}"
137
+
138
+ corrector.replace(node, replacement)
130
139
  end
131
140
 
132
- def correct_alias_with_symbol_args(node)
133
- lambda do |corrector|
134
- corrector.replace(node.new_identifier,
135
- node.new_identifier.source[1..-1])
136
- corrector.replace(node.old_identifier,
137
- node.old_identifier.source[1..-1])
138
- end
141
+ def correct_alias_with_symbol_args(corrector, node)
142
+ corrector.replace(node.new_identifier, node.new_identifier.source[1..-1])
143
+ corrector.replace(node.old_identifier, node.old_identifier.source[1..-1])
139
144
  end
140
145
 
141
146
  def_node_matcher :identifier, <<~PATTERN