rubocop 1.11.0 → 1.15.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 (425) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -3
  3. data/config/default.yml +58 -6
  4. data/exe/rubocop +1 -3
  5. data/lib/rubocop.rb +6 -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/cli/command/suggest_extensions.rb +3 -2
  12. data/lib/rubocop/comment_config.rb +45 -101
  13. data/lib/rubocop/config.rb +11 -26
  14. data/lib/rubocop/config_loader.rb +5 -11
  15. data/lib/rubocop/config_loader_resolver.rb +22 -14
  16. data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
  17. data/lib/rubocop/config_store.rb +1 -2
  18. data/lib/rubocop/config_validator.rb +5 -10
  19. data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
  20. data/lib/rubocop/cop/badge.rb +1 -2
  21. data/lib/rubocop/cop/base.rb +8 -6
  22. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
  23. data/lib/rubocop/cop/bundler/gem_comment.rb +43 -11
  24. data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
  25. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
  26. data/lib/rubocop/cop/commissioner.rb +2 -8
  27. data/lib/rubocop/cop/cop.rb +4 -18
  28. data/lib/rubocop/cop/corrector.rb +1 -4
  29. data/lib/rubocop/cop/correctors/alignment_corrector.rb +6 -12
  30. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  31. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  32. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  33. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  34. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
  35. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  36. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
  37. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
  38. data/lib/rubocop/cop/generator.rb +1 -4
  39. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  40. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  41. data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -5
  42. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
  43. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
  44. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
  45. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
  46. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
  47. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
  48. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
  49. data/lib/rubocop/cop/layout/argument_alignment.rb +34 -18
  50. data/lib/rubocop/cop/layout/array_alignment.rb +7 -6
  51. data/lib/rubocop/cop/layout/assignment_indentation.rb +8 -7
  52. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  53. data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
  54. data/lib/rubocop/cop/layout/block_end_newline.rb +4 -8
  55. data/lib/rubocop/cop/layout/case_indentation.rb +1 -3
  56. data/lib/rubocop/cop/layout/class_structure.rb +4 -10
  57. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +18 -30
  58. data/lib/rubocop/cop/layout/comment_indentation.rb +17 -21
  59. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  60. data/lib/rubocop/cop/layout/dot_position.rb +1 -3
  61. data/lib/rubocop/cop/layout/else_alignment.rb +10 -9
  62. data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
  63. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
  64. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  65. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  66. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  67. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
  68. data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
  69. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  70. data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
  71. data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -5
  72. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +10 -8
  73. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  74. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +36 -20
  75. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  76. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  77. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  78. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +6 -5
  79. data/lib/rubocop/cop/layout/hash_alignment.rb +18 -13
  80. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
  81. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
  82. data/lib/rubocop/cop/layout/indentation_consistency.rb +9 -6
  83. data/lib/rubocop/cop/layout/indentation_style.rb +25 -30
  84. data/lib/rubocop/cop/layout/indentation_width.rb +24 -12
  85. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  86. data/lib/rubocop/cop/layout/line_length.rb +4 -15
  87. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  88. data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
  89. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  90. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
  91. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -15
  92. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +10 -5
  93. data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
  94. data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
  95. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
  96. data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
  97. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  98. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  99. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  100. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
  101. data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -6
  102. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
  103. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
  104. data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
  105. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  106. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  107. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  108. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  109. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  110. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
  111. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  112. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  113. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  114. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  115. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  116. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  117. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
  118. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
  119. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
  120. data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
  121. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
  122. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
  123. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  124. data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
  125. data/lib/rubocop/cop/lint/else_layout.rb +1 -3
  126. data/lib/rubocop/cop/lint/empty_block.rb +18 -2
  127. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  128. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  129. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  130. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  131. data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
  132. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  133. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
  134. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  135. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  136. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
  137. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
  138. data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
  139. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  140. data/lib/rubocop/cop/lint/loop.rb +1 -2
  141. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
  142. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  143. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  144. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
  145. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
  146. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
  147. data/lib/rubocop/cop/lint/number_conversion.rb +11 -5
  148. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  149. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
  150. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  151. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
  152. data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
  153. data/lib/rubocop/cop/lint/rand_one.rb +1 -2
  154. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +9 -22
  155. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
  156. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
  157. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
  158. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
  159. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
  160. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  161. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  162. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  163. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  164. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  165. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
  166. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  167. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
  168. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
  169. data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
  170. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  171. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
  172. data/lib/rubocop/cop/lint/suppressed_exception.rb +44 -1
  173. data/lib/rubocop/cop/lint/symbol_conversion.rb +91 -6
  174. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  175. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  176. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  177. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  178. data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
  179. data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -7
  180. data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
  181. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
  182. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
  183. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
  184. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
  185. data/lib/rubocop/cop/lint/void.rb +5 -12
  186. data/lib/rubocop/cop/message_annotator.rb +1 -3
  187. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  188. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  189. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  190. data/lib/rubocop/cop/metrics/module_length.rb +2 -6
  191. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
  192. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
  193. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  194. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
  195. data/lib/rubocop/cop/migration/department_name.rb +3 -7
  196. data/lib/rubocop/cop/mixin/alignment.rb +12 -7
  197. data/lib/rubocop/cop/mixin/check_line_breakable.rb +20 -4
  198. data/lib/rubocop/cop/mixin/code_length.rb +1 -3
  199. data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
  200. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  201. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  202. data/lib/rubocop/cop/mixin/def_node.rb +2 -5
  203. data/lib/rubocop/cop/mixin/documentation_comment.rb +3 -6
  204. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
  205. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
  206. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
  207. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
  208. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  209. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
  210. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  211. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
  212. data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
  213. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  214. data/lib/rubocop/cop/mixin/line_length_help.rb +13 -10
  215. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  216. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
  217. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  218. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +4 -3
  219. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  220. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +11 -40
  221. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  222. data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
  223. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
  224. data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
  225. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  226. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
  227. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +4 -7
  228. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  229. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  230. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
  231. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  232. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
  233. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
  234. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  235. data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
  236. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  237. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +7 -13
  238. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  239. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
  240. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
  241. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  242. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +6 -3
  243. data/lib/rubocop/cop/naming/method_name.rb +1 -2
  244. data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
  245. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -0
  246. data/lib/rubocop/cop/offense.rb +3 -8
  247. data/lib/rubocop/cop/registry.rb +12 -11
  248. data/lib/rubocop/cop/style/access_modifier_declarations.rb +3 -5
  249. data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
  250. data/lib/rubocop/cop/style/alias.rb +5 -12
  251. data/lib/rubocop/cop/style/and_or.rb +3 -1
  252. data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
  253. data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
  254. data/lib/rubocop/cop/style/attr.rb +1 -3
  255. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  256. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +59 -71
  257. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
  258. data/lib/rubocop/cop/style/case_like_if.rb +16 -6
  259. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  260. data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
  261. data/lib/rubocop/cop/style/class_equality_comparison.rb +2 -0
  262. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  263. data/lib/rubocop/cop/style/collection_compact.rb +1 -3
  264. data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
  265. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  266. data/lib/rubocop/cop/style/command_literal.rb +4 -9
  267. data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
  268. data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
  269. data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
  270. data/lib/rubocop/cop/style/copyright.rb +3 -6
  271. data/lib/rubocop/cop/style/date_time.rb +2 -5
  272. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  273. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
  274. data/lib/rubocop/cop/style/documentation.rb +25 -3
  275. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
  276. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  277. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  278. data/lib/rubocop/cop/style/empty_literal.rb +12 -9
  279. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  280. data/lib/rubocop/cop/style/end_block.rb +1 -2
  281. data/lib/rubocop/cop/style/endless_method.rb +1 -3
  282. data/lib/rubocop/cop/style/eval_with_location.rb +3 -5
  283. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
  284. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
  285. data/lib/rubocop/cop/style/format_string_token.rb +1 -4
  286. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
  287. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  288. data/lib/rubocop/cop/style/hash_conversion.rb +31 -3
  289. data/lib/rubocop/cop/style/hash_each_methods.rb +1 -2
  290. data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
  291. data/lib/rubocop/cop/style/hash_syntax.rb +20 -24
  292. data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
  293. data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
  294. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  295. data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
  296. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  297. data/lib/rubocop/cop/style/lambda.rb +2 -4
  298. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  299. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
  300. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +47 -3
  301. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +26 -16
  302. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  303. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  304. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
  305. data/lib/rubocop/cop/style/min_max.rb +1 -2
  306. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  307. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  308. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  309. data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
  310. data/lib/rubocop/cop/style/module_function.rb +3 -6
  311. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  312. data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
  313. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  314. data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
  315. data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
  316. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  317. data/lib/rubocop/cop/style/negated_if_else_condition.rb +23 -2
  318. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  319. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  320. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  321. data/lib/rubocop/cop/style/next.rb +4 -9
  322. data/lib/rubocop/cop/style/nil_lambda.rb +29 -12
  323. data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
  324. data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
  325. data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
  326. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  327. data/lib/rubocop/cop/style/option_hash.rb +1 -3
  328. data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
  329. data/lib/rubocop/cop/style/or_assignment.rb +2 -6
  330. data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
  331. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
  332. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
  333. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  334. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
  335. data/lib/rubocop/cop/style/proc.rb +1 -2
  336. data/lib/rubocop/cop/style/raise_args.rb +4 -8
  337. data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
  338. data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
  339. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
  340. data/lib/rubocop/cop/style/redundant_begin.rb +40 -6
  341. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  342. data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
  343. data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
  344. data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
  345. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  346. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
  347. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
  348. data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
  349. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  350. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  351. data/lib/rubocop/cop/style/redundant_return.rb +6 -4
  352. data/lib/rubocop/cop/style/redundant_self.rb +9 -9
  353. data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
  354. data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
  355. data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
  356. data/lib/rubocop/cop/style/rescue_modifier.rb +21 -14
  357. data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
  358. data/lib/rubocop/cop/style/return_nil.rb +1 -2
  359. data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
  360. data/lib/rubocop/cop/style/send.rb +1 -2
  361. data/lib/rubocop/cop/style/signal_exception.rb +3 -7
  362. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
  363. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
  364. data/lib/rubocop/cop/style/single_line_methods.rb +21 -4
  365. data/lib/rubocop/cop/style/sole_nested_conditional.rb +31 -7
  366. data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
  367. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  368. data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
  369. data/lib/rubocop/cop/style/string_chars.rb +39 -0
  370. data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
  371. data/lib/rubocop/cop/style/string_literals.rb +2 -5
  372. data/lib/rubocop/cop/style/struct_inheritance.rb +10 -0
  373. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  374. data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
  375. data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
  376. data/lib/rubocop/cop/style/top_level_method_definition.rb +75 -0
  377. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -3
  378. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
  379. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
  380. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  381. data/lib/rubocop/cop/style/trivial_accessors.rb +67 -4
  382. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  383. data/lib/rubocop/cop/style/unless_logical_operators.rb +8 -2
  384. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  385. data/lib/rubocop/cop/style/when_then.rb +1 -3
  386. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  387. data/lib/rubocop/cop/style/word_array.rb +1 -2
  388. data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
  389. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
  390. data/lib/rubocop/cop/team.rb +2 -5
  391. data/lib/rubocop/cop/util.rb +8 -11
  392. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  393. data/lib/rubocop/cop/variable_force.rb +6 -15
  394. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  395. data/lib/rubocop/cop/variable_force/branch.rb +16 -2
  396. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  397. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  398. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  399. data/lib/rubocop/cops_documentation_generator.rb +7 -21
  400. data/lib/rubocop/directive_comment.rb +69 -9
  401. data/lib/rubocop/ext/regexp_parser.rb +3 -6
  402. data/lib/rubocop/file_finder.rb +1 -3
  403. data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
  404. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  405. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
  406. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  407. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  408. data/lib/rubocop/formatter/junit_formatter.rb +23 -14
  409. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  410. data/lib/rubocop/formatter/tap_formatter.rb +4 -2
  411. data/lib/rubocop/magic_comment.rb +1 -1
  412. data/lib/rubocop/options.rb +30 -50
  413. data/lib/rubocop/path_util.rb +1 -3
  414. data/lib/rubocop/rake_task.rb +3 -0
  415. data/lib/rubocop/remote_config.rb +4 -7
  416. data/lib/rubocop/result_cache.rb +5 -12
  417. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  418. data/lib/rubocop/rspec/expect_offense.rb +4 -9
  419. data/lib/rubocop/rspec/shared_contexts.rb +8 -15
  420. data/lib/rubocop/runner.rb +7 -14
  421. data/lib/rubocop/target_finder.rb +19 -16
  422. data/lib/rubocop/target_ruby.rb +4 -8
  423. data/lib/rubocop/version.rb +1 -1
  424. metadata +13 -7
  425. data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -26,8 +26,7 @@ module RuboCop
26
26
  class RandomWithOffset < Base
27
27
  extend AutoCorrector
28
28
 
29
- MSG = 'Prefer ranges when generating random numbers instead of ' \
30
- 'integers with offsets.'
29
+ MSG = 'Prefer ranges when generating random numbers instead of integers with offsets.'
31
30
  RESTRICT_ON_SEND = %i[+ - succ pred next].freeze
32
31
 
33
32
  # @!method integer_op_rand?(node)
@@ -63,13 +62,9 @@ module RuboCop
63
62
 
64
63
  def on_send(node)
65
64
  return unless node.receiver
66
- return unless integer_op_rand?(node) ||
67
- rand_op_integer?(node) ||
68
- rand_modified?(node)
65
+ return unless integer_op_rand?(node) || rand_op_integer?(node) || rand_modified?(node)
69
66
 
70
- add_offense(node) do |corrector|
71
- autocorrect(corrector, node)
72
- end
67
+ add_offense(node) { |corrector| autocorrect(corrector, node) }
73
68
  end
74
69
 
75
70
  private
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'parser/current'
4
-
5
3
  module RuboCop
6
4
  module Cop
7
5
  module Style
@@ -68,17 +66,10 @@ module RuboCop
68
66
  end
69
67
 
70
68
  def redundant_arg_for_method(method_name)
71
- return nil unless cop_config['Methods'].key?(method_name)
69
+ arg = cop_config['Methods'].fetch(method_name) { return }
72
70
 
73
71
  @mem ||= {}
74
- @mem[method_name] ||=
75
- begin
76
- arg = cop_config['Methods'].fetch(method_name)
77
- buffer = Parser::Source::Buffer.new('(string)', 1)
78
- buffer.source = arg.inspect
79
- builder = RuboCop::AST::Builder.new
80
- Parser::CurrentRuby.new(builder).parse(buffer)
81
- end
72
+ @mem[method_name] ||= parse(arg.inspect).ast
82
73
  end
83
74
 
84
75
  def argument_range(node)
@@ -81,9 +81,7 @@ module RuboCop
81
81
  end
82
82
 
83
83
  def check_rescue_node(node)
84
- node.child_nodes.each do |child_node|
85
- check_branch(child_node)
86
- end
84
+ node.child_nodes.each { |child_node| check_branch(child_node) }
87
85
  end
88
86
 
89
87
  def check_ensure_node(node)
@@ -36,7 +36,6 @@ module RuboCop
36
36
  # do_something
37
37
  #
38
38
  # # bad
39
- # # When using Ruby 2.5 or later.
40
39
  # do_something do
41
40
  # begin
42
41
  # something
@@ -63,6 +62,7 @@ module RuboCop
63
62
  # end
64
63
  # end
65
64
  class RedundantBegin < Base
65
+ include RangeHelp
66
66
  extend AutoCorrector
67
67
 
68
68
  MSG = 'Redundant `begin` block detected.'
@@ -75,8 +75,6 @@ module RuboCop
75
75
  alias on_defs on_def
76
76
 
77
77
  def on_block(node)
78
- return if target_ruby_version < 2.5
79
-
80
78
  return if node.send_node.lambda_literal?
81
79
  return if node.braces?
82
80
  return unless node.body&.kwbegin_type?
@@ -95,12 +93,40 @@ module RuboCop
95
93
  private
96
94
 
97
95
  def register_offense(node)
98
- add_offense(node.loc.begin) do |corrector|
99
- corrector.remove(node.loc.begin)
96
+ offense_range = node.loc.begin
97
+
98
+ add_offense(offense_range) do |corrector|
99
+ if any_ancestor_assignment_node?(node)
100
+ replace_begin_with_statement(corrector, offense_range, node)
101
+ else
102
+ corrector.remove(offense_range)
103
+ end
104
+
100
105
  corrector.remove(node.loc.end)
101
106
  end
102
107
  end
103
108
 
109
+ def replace_begin_with_statement(corrector, offense_range, node)
110
+ first_child = node.children.first
111
+
112
+ source = first_child.source
113
+ source = "(#{source})" if first_child.if_type? && first_child.modifier_form?
114
+
115
+ corrector.replace(offense_range, source)
116
+ corrector.remove(range_between(offense_range.end_pos, first_child.source_range.end_pos))
117
+
118
+ restore_removed_comments(corrector, offense_range, node, first_child)
119
+ end
120
+
121
+ # Restore comments that occur between "begin" and "first_child".
122
+ # These comments will be moved to above the assignment line.
123
+ def restore_removed_comments(corrector, offense_range, node, first_child)
124
+ comments_range = range_between(offense_range.end_pos, first_child.source_range.begin_pos)
125
+ comments = comments_range.source
126
+
127
+ corrector.insert_before(node.parent, comments) unless comments.blank?
128
+ end
129
+
104
130
  def empty_begin?(node)
105
131
  node.children.empty?
106
132
  end
@@ -114,9 +140,17 @@ module RuboCop
114
140
  def valid_context_using_only_begin?(node)
115
141
  parent = node.parent
116
142
 
117
- node.each_ancestor.any?(&:assignment?) || parent&.post_condition_loop? ||
143
+ valid_begin_assignment?(node) || parent&.post_condition_loop? ||
118
144
  parent&.send_type? || parent&.operator_keyword?
119
145
  end
146
+
147
+ def valid_begin_assignment?(node)
148
+ any_ancestor_assignment_node?(node) && !node.children.one?
149
+ end
150
+
151
+ def any_ancestor_assignment_node?(node)
152
+ node.each_ancestor.any?(&:assignment?)
153
+ end
120
154
  end
121
155
  end
122
156
  end
@@ -18,8 +18,7 @@ module RuboCop
18
18
  include PercentLiteral
19
19
  extend AutoCorrector
20
20
 
21
- MSG = 'Do not use `%W` unless interpolation is needed. ' \
22
- 'If not, use `%w`.'
21
+ MSG = 'Do not use `%W` unless interpolation is needed. If not, use `%w`.'
23
22
 
24
23
  def on_array(node)
25
24
  process(node, '%W')
@@ -78,9 +78,7 @@ module RuboCop
78
78
  return false if use_if_branch?(else_branch) || use_hash_key_assignment?(else_branch)
79
79
 
80
80
  condition == if_branch && !node.elsif? && (
81
- node.ternary? ||
82
- !else_branch.instance_of?(AST::Node) ||
83
- else_branch.single_line?
81
+ node.ternary? || !else_branch.instance_of?(AST::Node) || else_branch.single_line?
84
82
  )
85
83
  end
86
84
 
@@ -104,8 +102,7 @@ module RuboCop
104
102
 
105
103
  def make_ternary_form(node)
106
104
  _condition, if_branch, else_branch = *node
107
- ternary_form = [if_branch.source,
108
- else_source(else_branch)].join(' || ')
105
+ ternary_form = [if_branch.source, else_source(else_branch)].join(' || ')
109
106
 
110
107
  if node.parent&.send_type?
111
108
  "(#{ternary_form})"
@@ -31,8 +31,7 @@ module RuboCop
31
31
  operators = RuboCop::AST::Node::COMPARISON_OPERATORS.to_a
32
32
  COMPARISON_OPERATOR_MATCHER = "{:#{operators.join(' :')}}"
33
33
 
34
- MSG = 'This conditional expression can just be replaced ' \
35
- 'by `%<msg>s`.'
34
+ MSG = 'This conditional expression can just be replaced by `%<msg>s`.'
36
35
 
37
36
  def on_if(node)
38
37
  return unless offense?(node)
@@ -78,11 +77,9 @@ module RuboCop
78
77
 
79
78
  def invert_expression?(node)
80
79
  (
81
- (node.if? || node.elsif? || node.ternary?) &&
82
- redundant_condition_inverted?(node)
80
+ (node.if? || node.elsif? || node.ternary?) && redundant_condition_inverted?(node)
83
81
  ) || (
84
- node.unless? &&
85
- redundant_condition?(node)
82
+ node.unless? && redundant_condition?(node)
86
83
  )
87
84
  end
88
85
 
@@ -20,8 +20,7 @@ module RuboCop
20
20
  extend AutoCorrector
21
21
 
22
22
  MSG_1 = 'Redundant `RuntimeError` argument can be removed.'
23
- MSG_2 = 'Redundant `RuntimeError.new` call can be replaced with ' \
24
- 'just the message.'
23
+ MSG_2 = 'Redundant `RuntimeError.new` call can be replaced with just the message.'
25
24
 
26
25
  RESTRICT_ON_SEND = %i[raise fail].freeze
27
26
 
@@ -35,11 +34,9 @@ module RuboCop
35
34
  exploded?(node) do |command, message|
36
35
  add_offense(node, message: MSG_1) do |corrector|
37
36
  if node.parenthesized?
38
- corrector.replace(node,
39
- "#{command}(#{message.source})")
37
+ corrector.replace(node, "#{command}(#{message.source})")
40
38
  else
41
- corrector.replace(node,
42
- "#{command} #{message.source}")
39
+ corrector.replace(node, "#{command} #{message.source}")
43
40
  end
44
41
  end
45
42
  end
@@ -40,7 +40,7 @@ module RuboCop
40
40
  return unless name_node.value.end_with?('.rb')
41
41
 
42
42
  add_offense(name_node) do |corrector|
43
- correction = name_node.value.sub(/\.rb\z/, '')
43
+ correction = name_node.value.delete_suffix('.rb')
44
44
 
45
45
  corrector.replace(name_node, "'#{correction}'")
46
46
  end
@@ -17,8 +17,7 @@ module RuboCop
17
17
  extend AutoCorrector
18
18
  include FrozenStringLiteral
19
19
 
20
- MSG = 'Do not freeze immutable objects, as freezing them has no ' \
21
- 'effect.'
20
+ MSG = 'Do not freeze immutable objects, as freezing them has no effect.'
22
21
  RESTRICT_ON_SEND = %i[freeze].freeze
23
22
 
24
23
  def on_send(node)
@@ -72,8 +72,7 @@ module RuboCop
72
72
  end
73
73
 
74
74
  def embedded_in_percent_array?(node)
75
- node.parent&.array_type? &&
76
- percent_literal?(node.parent)
75
+ node.parent&.array_type? && percent_literal?(node.parent)
77
76
  end
78
77
 
79
78
  def autocorrect_variable_interpolation(corrector, embedded_node, node)
@@ -18,8 +18,7 @@ module RuboCop
18
18
  extend AutoCorrector
19
19
 
20
20
  # @!method square_brackets?(node)
21
- def_node_matcher :square_brackets?,
22
- '(send {(send _recv _msg) str array hash} :[] ...)'
21
+ def_node_matcher :square_brackets?, '(send {(send _recv _msg) str array hash} :[] ...)'
23
22
 
24
23
  # @!method range_end?(node)
25
24
  def_node_matcher :range_end?, '^^{irange erange}'
@@ -31,8 +30,7 @@ module RuboCop
31
30
  def_node_matcher :rescue?, '{^resbody ^^resbody}'
32
31
 
33
32
  # @!method arg_in_call_with_block?(node)
34
- def_node_matcher :arg_in_call_with_block?,
35
- '^^(block (send _ _ equal?(%0) ...) ...)'
33
+ def_node_matcher :arg_in_call_with_block?, '^^(block (send _ _ equal?(%0) ...) ...)'
36
34
 
37
35
  def on_begin(node)
38
36
  return if !parentheses?(node) || parens_allowed?(node) || ignore_syntax?(node)
@@ -135,8 +133,7 @@ module RuboCop
135
133
 
136
134
  node = node.children.first while suspect_unary?(node)
137
135
 
138
- return if node.send_type? &&
139
- !method_call_with_redundant_parentheses?(node)
136
+ return if node.send_type? && !method_call_with_redundant_parentheses?(node)
140
137
 
141
138
  offense(begin_node, 'an unary operation')
142
139
  end
@@ -161,16 +158,11 @@ module RuboCop
161
158
  # { a: (1
162
159
  # ), }
163
160
  # ```
164
- (hash_element?(node) || array_element?(node)) &&
165
- only_closing_paren_before_comma?(node)
161
+ hash_or_array_element?(node) && only_closing_paren_before_comma?(node)
166
162
  end
167
163
 
168
- def hash_element?(node)
169
- node.parent&.pair_type?
170
- end
171
-
172
- def array_element?(node)
173
- node.parent&.array_type?
164
+ def hash_or_array_element?(node)
165
+ node.each_ancestor(:array, :hash).any?
174
166
  end
175
167
 
176
168
  def only_closing_paren_before_comma?(node)
@@ -181,9 +173,7 @@ module RuboCop
181
173
  end
182
174
 
183
175
  def disallowed_literal?(begin_node, node)
184
- node.literal? &&
185
- !node.range_type? &&
186
- !raised_to_power_negative_numeric?(begin_node, node)
176
+ node.literal? && !node.range_type? && !raised_to_power_negative_numeric?(begin_node, node)
187
177
  end
188
178
 
189
179
  def raised_to_power_negative_numeric?(begin_node, node)
@@ -225,9 +215,7 @@ module RuboCop
225
215
  end
226
216
 
227
217
  def first_argument?(node)
228
- first_send_argument?(node) ||
229
- first_super_argument?(node) ||
230
- first_yield_argument?(node)
218
+ first_send_argument?(node) || first_super_argument?(node) || first_yield_argument?(node)
231
219
  end
232
220
 
233
221
  # @!method first_send_argument?(node)
@@ -22,8 +22,7 @@ module RuboCop
22
22
 
23
23
  MSG = 'Use `%<q_type>s` only for strings that contain both ' \
24
24
  'single quotes and double quotes%<extra>s.'
25
- DYNAMIC_MSG = ', or for dynamic strings that contain ' \
26
- 'double quotes'
25
+ DYNAMIC_MSG = ', or for dynamic strings that contain double quotes'
27
26
  SINGLE_QUOTE = "'"
28
27
  QUOTE = '"'
29
28
  EMPTY = ''
@@ -72,10 +72,7 @@ module RuboCop
72
72
  end
73
73
 
74
74
  def delimiter?(node, char)
75
- delimiters = [
76
- node.loc.begin.source[-1],
77
- node.loc.end.source[0]
78
- ]
75
+ delimiters = [node.loc.begin.source[-1], node.loc.end.source[0]]
79
76
 
80
77
  delimiters.include?(char)
81
78
  end
@@ -71,9 +71,12 @@ module RuboCop
71
71
  elsif hash_without_braces?(return_node.first_argument)
72
72
  add_braces(corrector, return_node.first_argument)
73
73
  end
74
+ if return_node.splat_argument?
75
+ first_argument = return_node.first_argument
76
+ corrector.replace(first_argument, first_argument.source.delete_prefix('*'))
77
+ end
74
78
 
75
- keyword = range_with_surrounding_space(range: return_node.loc.keyword,
76
- side: :right)
79
+ keyword = range_with_surrounding_space(range: return_node.loc.keyword, side: :right)
77
80
  corrector.remove(keyword)
78
81
  end
79
82
 
@@ -109,8 +112,7 @@ module RuboCop
109
112
  # rubocop:enable Metrics/CyclomaticComplexity
110
113
 
111
114
  def check_return_node(node)
112
- return if cop_config['AllowMultipleReturnValues'] &&
113
- node.children.size > 1
115
+ return if cop_config['AllowMultipleReturnValues'] && node.children.size > 1
114
116
 
115
117
  add_offense(node.loc.keyword, message: message(node)) do |corrector|
116
118
  if node.arguments?
@@ -11,7 +11,7 @@ module RuboCop
11
11
  # presence of a method name clash with an argument or a local
12
12
  # variable.
13
13
  #
14
- # * Calling an attribute writer to prevent an local variable assignment.
14
+ # * Calling an attribute writer to prevent a local variable assignment.
15
15
  #
16
16
  # Note, with using explicit self you can only send messages with public or
17
17
  # protected scope, you cannot send private messages this way.
@@ -92,9 +92,7 @@ module RuboCop
92
92
 
93
93
  def on_masgn(node)
94
94
  lhs, rhs = *node
95
- lhs.children.each do |child|
96
- add_lhs_to_local_variables_scopes(rhs, child.to_a.first)
97
- end
95
+ lhs.children.each { |child| add_lhs_to_local_variables_scopes(rhs, child.to_a.first) }
98
96
  end
99
97
 
100
98
  def on_lvasgn(node)
@@ -144,8 +142,12 @@ module RuboCop
144
142
  end
145
143
 
146
144
  def on_argument(node)
147
- name, = *node
148
- @local_variables_scopes[node] << name
145
+ if node.mlhs_type?
146
+ on_args(node)
147
+ else
148
+ name, = *node
149
+ @local_variables_scopes[node] << name
150
+ end
149
151
  end
150
152
 
151
153
  def allow_self(node)
@@ -156,9 +158,7 @@ module RuboCop
156
158
 
157
159
  def add_lhs_to_local_variables_scopes(rhs, lhs)
158
160
  if rhs&.send_type? && !rhs.arguments.empty?
159
- rhs.arguments.each do |argument|
160
- @local_variables_scopes[argument] << lhs
161
- end
161
+ rhs.arguments.each { |argument| @local_variables_scopes[argument] << lhs }
162
162
  else
163
163
  @local_variables_scopes[rhs] << lhs
164
164
  end
@@ -66,8 +66,8 @@ module RuboCop
66
66
  alias on_gvasgn on_lvasgn
67
67
 
68
68
  def on_send(node)
69
- # TODO: replace with #end_with? after supporting only ruby >= 2.7
70
- return unless node.method_name.match?(/=$/)
69
+ # TODO: Remove `Symbol#to_s` after supporting only Ruby >= 2.7.
70
+ return unless node.method_name.to_s.end_with?('=')
71
71
  return unless redundant_assignment?(node)
72
72
 
73
73
  message = format(MSG, method_name: node.first_argument.method_name)
@@ -53,8 +53,7 @@ module RuboCop
53
53
  include RangeHelp
54
54
  extend AutoCorrector
55
55
 
56
- MSG = 'Use `%<suggestion>s` instead of '\
57
- '`%<sorter>s...%<accessor_source>s`.'
56
+ MSG = 'Use `%<suggestion>s` instead of `%<sorter>s...%<accessor_source>s`.'
58
57
 
59
58
  RESTRICT_ON_SEND = %i[sort sort_by].freeze
60
59
 
@@ -112,9 +111,7 @@ module RuboCop
112
111
  ).source
113
112
 
114
113
  format(MSG,
115
- suggestion: suggestion(sorter,
116
- accessor,
117
- arg_value(node)),
114
+ suggestion: suggestion(sorter, accessor, arg_value(node)),
118
115
  sorter: sorter,
119
116
  accessor_source: accessor_source)
120
117
  end