rubocop 1.12.1 → 1.16.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 (412) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -2
  3. data/config/default.yml +78 -8
  4. data/exe/rubocop +1 -3
  5. data/lib/rubocop.rb +10 -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 +43 -11
  23. data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
  24. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
  25. data/lib/rubocop/cop/commissioner.rb +2 -8
  26. data/lib/rubocop/cop/cop.rb +4 -18
  27. data/lib/rubocop/cop/corrector.rb +1 -4
  28. data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -6
  29. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  30. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  31. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  32. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  33. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
  34. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  35. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
  36. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
  37. data/lib/rubocop/cop/generator.rb +1 -4
  38. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  39. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  40. data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -5
  41. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
  42. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
  43. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
  44. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
  45. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
  46. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
  47. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -2
  48. data/lib/rubocop/cop/layout/argument_alignment.rb +30 -14
  49. data/lib/rubocop/cop/layout/assignment_indentation.rb +2 -4
  50. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  51. data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
  52. data/lib/rubocop/cop/layout/case_indentation.rb +57 -11
  53. data/lib/rubocop/cop/layout/class_structure.rb +4 -10
  54. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -15
  55. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -5
  56. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  57. data/lib/rubocop/cop/layout/dot_position.rb +1 -3
  58. data/lib/rubocop/cop/layout/else_alignment.rb +1 -3
  59. data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
  60. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +2 -5
  61. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  62. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  63. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  64. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
  65. data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
  66. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  67. data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
  68. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -2
  69. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  70. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +14 -5
  71. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  72. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  73. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  74. data/lib/rubocop/cop/layout/hash_alignment.rb +36 -15
  75. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
  76. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
  77. data/lib/rubocop/cop/layout/indentation_style.rb +1 -3
  78. data/lib/rubocop/cop/layout/indentation_width.rb +6 -4
  79. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  80. data/lib/rubocop/cop/layout/line_length.rb +4 -15
  81. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  82. data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
  83. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  84. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
  85. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -10
  86. data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
  87. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
  88. data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
  89. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  90. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  91. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  92. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
  93. data/lib/rubocop/cop/layout/space_around_keyword.rb +19 -6
  94. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
  95. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
  96. data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
  97. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  98. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  99. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  100. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  101. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  102. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
  103. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  104. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  105. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  106. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  107. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  108. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  109. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
  110. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
  111. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
  112. data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
  113. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
  114. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
  115. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  116. data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
  117. data/lib/rubocop/cop/lint/else_layout.rb +1 -3
  118. data/lib/rubocop/cop/lint/empty_block.rb +18 -2
  119. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  120. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  121. data/lib/rubocop/cop/lint/empty_in_pattern.rb +62 -0
  122. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  123. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  124. data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
  125. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  126. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
  127. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  128. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  129. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
  130. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
  131. data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
  132. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  133. data/lib/rubocop/cop/lint/loop.rb +1 -2
  134. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
  135. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  136. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  137. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
  138. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
  139. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
  140. data/lib/rubocop/cop/lint/number_conversion.rb +2 -3
  141. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  142. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
  143. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  144. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
  145. data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
  146. data/lib/rubocop/cop/lint/rand_one.rb +1 -2
  147. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +18 -27
  148. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
  149. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
  150. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
  151. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
  152. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
  153. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  154. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  155. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  156. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  157. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  158. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
  159. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  160. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
  161. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
  162. data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
  163. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  164. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
  165. data/lib/rubocop/cop/lint/symbol_conversion.rb +4 -16
  166. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  167. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  168. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  169. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  170. data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
  171. data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -7
  172. data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
  173. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
  174. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
  175. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
  176. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
  177. data/lib/rubocop/cop/lint/void.rb +5 -12
  178. data/lib/rubocop/cop/message_annotator.rb +1 -3
  179. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  180. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  181. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  182. data/lib/rubocop/cop/metrics/module_length.rb +2 -6
  183. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
  184. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
  185. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  186. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
  187. data/lib/rubocop/cop/migration/department_name.rb +3 -7
  188. data/lib/rubocop/cop/mixin/alignment.rb +2 -4
  189. data/lib/rubocop/cop/mixin/check_line_breakable.rb +19 -3
  190. data/lib/rubocop/cop/mixin/code_length.rb +1 -3
  191. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  192. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  193. data/lib/rubocop/cop/mixin/def_node.rb +2 -5
  194. data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -5
  195. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
  196. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
  197. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
  198. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
  199. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  200. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
  201. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  202. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +17 -9
  203. data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
  204. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  205. data/lib/rubocop/cop/mixin/line_length_help.rb +2 -4
  206. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  207. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
  208. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  209. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -2
  210. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  211. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -17
  212. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  213. data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
  214. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
  215. data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
  216. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  217. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
  218. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +3 -6
  219. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  220. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  221. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
  222. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  223. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
  224. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
  225. data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -5
  226. data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
  227. data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
  228. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  229. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -7
  230. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  231. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
  232. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
  233. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  234. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -3
  235. data/lib/rubocop/cop/naming/method_name.rb +1 -2
  236. data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
  237. data/lib/rubocop/cop/offense.rb +3 -8
  238. data/lib/rubocop/cop/registry.rb +3 -11
  239. data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -3
  240. data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
  241. data/lib/rubocop/cop/style/alias.rb +5 -12
  242. data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
  243. data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
  244. data/lib/rubocop/cop/style/attr.rb +1 -3
  245. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  246. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -3
  247. data/lib/rubocop/cop/style/case_like_if.rb +1 -2
  248. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  249. data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
  250. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  251. data/lib/rubocop/cop/style/collection_compact.rb +1 -3
  252. data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
  253. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  254. data/lib/rubocop/cop/style/command_literal.rb +3 -8
  255. data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
  256. data/lib/rubocop/cop/style/commented_keyword.rb +2 -8
  257. data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
  258. data/lib/rubocop/cop/style/copyright.rb +3 -6
  259. data/lib/rubocop/cop/style/date_time.rb +2 -5
  260. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  261. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
  262. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  263. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  264. data/lib/rubocop/cop/style/empty_literal.rb +12 -9
  265. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  266. data/lib/rubocop/cop/style/end_block.rb +1 -2
  267. data/lib/rubocop/cop/style/endless_method.rb +1 -3
  268. data/lib/rubocop/cop/style/eval_with_location.rb +2 -4
  269. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
  270. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
  271. data/lib/rubocop/cop/style/format_string_token.rb +1 -4
  272. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -8
  273. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  274. data/lib/rubocop/cop/style/hash_conversion.rb +28 -3
  275. data/lib/rubocop/cop/style/hash_each_methods.rb +19 -3
  276. data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
  277. data/lib/rubocop/cop/style/hash_syntax.rb +4 -9
  278. data/lib/rubocop/cop/style/identical_conditional_branches.rb +27 -8
  279. data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
  280. data/lib/rubocop/cop/style/in_pattern_then.rb +56 -0
  281. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  282. data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
  283. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  284. data/lib/rubocop/cop/style/lambda.rb +2 -4
  285. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  286. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
  287. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +1 -1
  288. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +7 -12
  289. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  290. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  291. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
  292. data/lib/rubocop/cop/style/min_max.rb +1 -2
  293. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  294. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  295. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  296. data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
  297. data/lib/rubocop/cop/style/module_function.rb +3 -6
  298. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  299. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +62 -0
  300. data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -3
  301. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  302. data/lib/rubocop/cop/style/multiline_when_then.rb +2 -11
  303. data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
  304. data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
  305. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  306. data/lib/rubocop/cop/style/negated_if_else_condition.rb +17 -9
  307. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  308. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  309. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  310. data/lib/rubocop/cop/style/next.rb +4 -9
  311. data/lib/rubocop/cop/style/nil_lambda.rb +29 -12
  312. data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
  313. data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
  314. data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
  315. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  316. data/lib/rubocop/cop/style/option_hash.rb +1 -3
  317. data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
  318. data/lib/rubocop/cop/style/or_assignment.rb +2 -6
  319. data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
  320. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
  321. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
  322. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  323. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
  324. data/lib/rubocop/cop/style/proc.rb +1 -2
  325. data/lib/rubocop/cop/style/quoted_symbols.rb +110 -0
  326. data/lib/rubocop/cop/style/raise_args.rb +4 -8
  327. data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
  328. data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
  329. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
  330. data/lib/rubocop/cop/style/redundant_begin.rb +4 -4
  331. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  332. data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
  333. data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
  334. data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
  335. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  336. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
  337. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
  338. data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
  339. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  340. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  341. data/lib/rubocop/cop/style/redundant_return.rb +3 -5
  342. data/lib/rubocop/cop/style/redundant_self.rb +25 -7
  343. data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
  344. data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
  345. data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
  346. data/lib/rubocop/cop/style/rescue_modifier.rb +4 -0
  347. data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
  348. data/lib/rubocop/cop/style/return_nil.rb +1 -2
  349. data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
  350. data/lib/rubocop/cop/style/send.rb +1 -2
  351. data/lib/rubocop/cop/style/signal_exception.rb +3 -7
  352. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
  353. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
  354. data/lib/rubocop/cop/style/single_line_methods.rb +20 -4
  355. data/lib/rubocop/cop/style/sole_nested_conditional.rb +15 -7
  356. data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
  357. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  358. data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
  359. data/lib/rubocop/cop/style/string_chars.rb +2 -1
  360. data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
  361. data/lib/rubocop/cop/style/string_literals.rb +3 -5
  362. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -0
  363. data/lib/rubocop/cop/style/struct_inheritance.rb +9 -1
  364. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  365. data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
  366. data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
  367. data/lib/rubocop/cop/style/top_level_method_definition.rb +83 -0
  368. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -2
  369. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
  370. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
  371. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  372. data/lib/rubocop/cop/style/trivial_accessors.rb +67 -4
  373. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  374. data/lib/rubocop/cop/style/unless_logical_operators.rb +2 -2
  375. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  376. data/lib/rubocop/cop/style/when_then.rb +4 -2
  377. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  378. data/lib/rubocop/cop/style/word_array.rb +1 -2
  379. data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
  380. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
  381. data/lib/rubocop/cop/team.rb +2 -5
  382. data/lib/rubocop/cop/util.rb +4 -10
  383. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  384. data/lib/rubocop/cop/variable_force.rb +6 -15
  385. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  386. data/lib/rubocop/cop/variable_force/branch.rb +16 -2
  387. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  388. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  389. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  390. data/lib/rubocop/cops_documentation_generator.rb +7 -21
  391. data/lib/rubocop/directive_comment.rb +5 -1
  392. data/lib/rubocop/file_finder.rb +1 -3
  393. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  394. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
  395. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  396. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  397. data/lib/rubocop/formatter/junit_formatter.rb +23 -14
  398. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  399. data/lib/rubocop/options.rb +30 -50
  400. data/lib/rubocop/path_util.rb +1 -3
  401. data/lib/rubocop/rake_task.rb +3 -0
  402. data/lib/rubocop/remote_config.rb +4 -7
  403. data/lib/rubocop/result_cache.rb +5 -12
  404. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  405. data/lib/rubocop/rspec/expect_offense.rb +4 -9
  406. data/lib/rubocop/rspec/shared_contexts.rb +8 -15
  407. data/lib/rubocop/runner.rb +7 -14
  408. data/lib/rubocop/target_finder.rb +18 -16
  409. data/lib/rubocop/target_ruby.rb +4 -8
  410. data/lib/rubocop/version.rb +1 -1
  411. metadata +16 -7
  412. data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -62,9 +62,7 @@ module RuboCop
62
62
  referenced_after_loop?(var, range)
63
63
  end
64
64
 
65
- add_offense(node.loc.keyword) do |corrector|
66
- autocorrect(corrector, node)
67
- end
65
+ add_offense(node.loc.keyword) { |corrector| autocorrect(corrector, node) }
68
66
  end
69
67
 
70
68
  def autocorrect(corrector, node)
@@ -107,8 +105,7 @@ module RuboCop
107
105
  else
108
106
  indentation = body.source_range.source_line[LEADING_SPACE]
109
107
 
110
- ['loop do', body.source.gsub(/^/, configured_indent),
111
- 'end'].join("\n#{indentation}")
108
+ ['loop do', body.source.gsub(/^/, configured_indent), 'end'].join("\n#{indentation}")
112
109
  end
113
110
  end
114
111
 
@@ -136,8 +136,7 @@ module RuboCop
136
136
  end
137
137
 
138
138
  def inverse_blocks
139
- @inverse_blocks ||= cop_config['InverseBlocks']
140
- .merge(cop_config['InverseBlocks'].invert)
139
+ @inverse_blocks ||= cop_config['InverseBlocks'].merge(cop_config['InverseBlocks'].invert)
141
140
  end
142
141
 
143
142
  def negated?(node)
@@ -160,9 +159,7 @@ module RuboCop
160
159
  # `Integer > Numeric`.
161
160
  def possible_class_hierarchy_check?(lhs, rhs, method)
162
161
  CLASS_COMPARISON_METHODS.include?(method) &&
163
- (camel_case_constant?(lhs) ||
164
- (rhs.size == 1 &&
165
- camel_case_constant?(rhs.first)))
162
+ (camel_case_constant?(lhs) || (rhs.size == 1 && camel_case_constant?(rhs.first)))
166
163
  end
167
164
 
168
165
  def camel_case_constant?(node)
@@ -174,8 +171,7 @@ module RuboCop
174
171
  end
175
172
 
176
173
  def remove_end_parenthesis(corrector, node, method, method_call)
177
- return unless EQUALITY_METHODS.include?(method) ||
178
- method_call.parent.begin_type?
174
+ return unless EQUALITY_METHODS.include?(method) || method_call.parent.begin_type?
179
175
 
180
176
  corrector.remove(end_parentheses(node, method_call))
181
177
  end
@@ -67,8 +67,7 @@ module RuboCop
67
67
 
68
68
  def starts_with_hex_or_colon?(str)
69
69
  first_char = str[0].ord
70
- (48..58).cover?(first_char) || (65..70).cover?(first_char) ||
71
- (97..102).cover?(first_char)
70
+ (48..58).cover?(first_char) || (65..70).cover?(first_char) || (97..102).cover?(first_char)
72
71
  end
73
72
  end
74
73
  end
@@ -50,10 +50,8 @@ module RuboCop
50
50
  include ConfigurableEnforcedStyle
51
51
  extend AutoCorrector
52
52
 
53
- LITERAL_MESSAGE = 'Use the `-> { ... }` lambda literal syntax for ' \
54
- '%<modifier>s lambdas.'
55
- METHOD_MESSAGE = 'Use the `lambda` method for %<modifier>s ' \
56
- 'lambdas.'
53
+ LITERAL_MESSAGE = 'Use the `-> { ... }` lambda literal syntax for %<modifier>s lambdas.'
54
+ METHOD_MESSAGE = 'Use the `lambda` method for %<modifier>s lambdas.'
57
55
 
58
56
  OFFENDING_SELECTORS = {
59
57
  style: {
@@ -52,8 +52,7 @@ module RuboCop
52
52
  private
53
53
 
54
54
  def offense?(node)
55
- explicit_style? && node.implicit_call? ||
56
- implicit_style? && !node.implicit_call?
55
+ explicit_style? && node.implicit_call? || implicit_style? && !node.implicit_call?
57
56
  end
58
57
 
59
58
  def message(_node)
@@ -23,14 +23,12 @@ module RuboCop
23
23
  include RangeHelp
24
24
  extend AutoCorrector
25
25
 
26
- MSG = 'Use `\\` instead of `+` or `<<` to concatenate ' \
27
- 'those strings.'
26
+ MSG = 'Use `\\` instead of `+` or `<<` to concatenate those strings.'
28
27
  CONCAT_TOKEN_TYPES = %i[tPLUS tLSHFT].freeze
29
28
  SIMPLE_STRING_TOKEN_TYPE = :tSTRING
30
29
  COMPLEX_STRING_BEGIN_TOKEN = :tSTRING_BEG
31
30
  COMPLEX_STRING_END_TOKEN = :tSTRING_END
32
- HIGH_PRECEDENCE_OP_TOKEN_TYPES = %i[tSTAR2 tPERCENT tDOT
33
- tLBRACK2].freeze
31
+ HIGH_PRECEDENCE_OP_TOKEN_TYPES = %i[tSTAR2 tPERCENT tDOT tLBRACK2].freeze
34
32
  QUOTE_DELIMITERS = %w[' "].freeze
35
33
 
36
34
  def self.autocorrect_incompatible_with
@@ -38,9 +36,7 @@ module RuboCop
38
36
  end
39
37
 
40
38
  def on_new_investigation
41
- processed_source.tokens.each_index do |index|
42
- check_token_set(index)
43
- end
39
+ processed_source.tokens.each_index { |index| check_token_set(index) }
44
40
  end
45
41
 
46
42
  private
@@ -56,9 +52,7 @@ module RuboCop
56
52
 
57
53
  return unless eligible_next_successor?(next_successor)
58
54
 
59
- add_offense(operator.pos) do |corrector|
60
- autocorrect(corrector, operator.pos)
61
- end
55
+ add_offense(operator.pos) { |corrector| autocorrect(corrector, operator.pos) }
62
56
  end
63
57
 
64
58
  def autocorrect(corrector, operator_range)
@@ -89,8 +83,7 @@ module RuboCop
89
83
  end
90
84
 
91
85
  def eligible_next_successor?(next_successor)
92
- !(next_successor &&
93
- HIGH_PRECEDENCE_OP_TOKEN_TYPES.include?(next_successor.type))
86
+ !(next_successor && HIGH_PRECEDENCE_OP_TOKEN_TYPES.include?(next_successor.type))
94
87
  end
95
88
 
96
89
  def eligible_predecessor?(predecessor)
@@ -202,7 +202,7 @@ module RuboCop
202
202
  extend AutoCorrector
203
203
 
204
204
  def self.autocorrect_incompatible_with
205
- [Style::NestedParenthesizedCalls]
205
+ [Style::NestedParenthesizedCalls, Style::RescueModifier]
206
206
  end
207
207
 
208
208
  def on_send(node)
@@ -42,7 +42,7 @@ module RuboCop
42
42
 
43
43
  def inside_endless_method_def?(node)
44
44
  # parens are required around arguments inside an endless method
45
- node.each_ancestor(:def).any?(&:endless?) && node.arguments.any?
45
+ node.each_ancestor(:def, :defs).any?(&:endless?) && node.arguments.any?
46
46
  end
47
47
 
48
48
  def syntax_like_method_call?(node)
@@ -55,8 +55,7 @@ module RuboCop
55
55
 
56
56
  def allowed_camel_case_method_call?(node)
57
57
  node.camel_case_method? &&
58
- (node.arguments.none? ||
59
- cop_config['AllowParenthesesInCamelCaseMethod'])
58
+ (node.arguments.none? || cop_config['AllowParenthesesInCamelCaseMethod'])
60
59
  end
61
60
 
62
61
  def allowed_string_interpolation_method_call?(node)
@@ -99,8 +98,7 @@ module RuboCop
99
98
  end
100
99
 
101
100
  def call_in_optional_arguments?(node)
102
- node.parent &&
103
- (node.parent.optarg_type? || node.parent.kwoptarg_type?)
101
+ node.parent && (node.parent.optarg_type? || node.parent.kwoptarg_type?)
104
102
  end
105
103
 
106
104
  def call_in_single_line_inheritance?(node)
@@ -119,7 +117,7 @@ module RuboCop
119
117
 
120
118
  def call_with_braced_block?(node)
121
119
  (node.send_type? || node.super_type?) &&
122
- node.block_node && node.block_node.braces?
120
+ ((node.parent&.block_type? || node.parent&.numblock_type?) && node.parent&.braces?)
123
121
  end
124
122
 
125
123
  def call_as_argument_or_chain?(node)
@@ -145,13 +143,11 @@ module RuboCop
145
143
  previous = node.descendants.first
146
144
  return false unless previous&.send_type?
147
145
 
148
- previous.parenthesized? ||
149
- allowed_chained_call_with_parentheses?(previous)
146
+ previous.parenthesized? || allowed_chained_call_with_parentheses?(previous)
150
147
  end
151
148
 
152
149
  def ambigious_literal?(node)
153
- splat?(node) || ternary_if?(node) || regexp_slash_literal?(node) ||
154
- unary_literal?(node)
150
+ splat?(node) || ternary_if?(node) || regexp_slash_literal?(node) || unary_literal?(node)
155
151
  end
156
152
 
157
153
  def splat?(node)
@@ -180,8 +176,7 @@ module RuboCop
180
176
  end
181
177
 
182
178
  def assigned_before?(node, target)
183
- node.assignment? &&
184
- node.loc.operator.begin < target.loc.begin
179
+ node.assignment? && node.loc.operator.begin < target.loc.begin
185
180
  end
186
181
 
187
182
  def inside_string_interpolation?(node)
@@ -15,8 +15,7 @@ module RuboCop
15
15
  include IgnoredMethods
16
16
  extend AutoCorrector
17
17
 
18
- MSG = 'Do not use parentheses for method calls with ' \
19
- 'no arguments.'
18
+ MSG = 'Do not use parentheses for method calls with no arguments.'
20
19
 
21
20
  def on_send(node)
22
21
  return unless !node.arguments? && node.parenthesized?
@@ -40,11 +40,9 @@ module RuboCop
40
40
 
41
41
  receiver = node.receiver
42
42
 
43
- return unless receiver&.block_type? &&
44
- receiver.loc.end.is?('end')
43
+ return unless receiver&.block_type? && receiver.loc.end.is?('end')
45
44
 
46
- range = range_between(receiver.loc.end.begin_pos,
47
- node.source_range.end_pos)
45
+ range = range_between(receiver.loc.end.begin_pos, node.source_range.end_pos)
48
46
 
49
47
  add_offense(range)
50
48
  end
@@ -93,8 +93,7 @@ module RuboCop
93
93
  extend AutoCorrector
94
94
 
95
95
  MSG_PRESENT = 'Use def without parentheses.'
96
- MSG_MISSING = 'Use def with parentheses when there are ' \
97
- 'parameters.'
96
+ MSG_MISSING = 'Use def with parentheses when there are parameters.'
98
97
 
99
98
  def on_def(node)
100
99
  return if node.endless?
@@ -124,18 +123,15 @@ module RuboCop
124
123
 
125
124
  def correct_definition(def_node, corrector)
126
125
  arguments_range = def_node.arguments.source_range
127
- args_with_space = range_with_surrounding_space(range: arguments_range,
128
- side: :left)
129
- leading_space = range_between(args_with_space.begin_pos,
130
- arguments_range.begin_pos)
126
+ args_with_space = range_with_surrounding_space(range: arguments_range, side: :left)
127
+ leading_space = range_between(args_with_space.begin_pos, arguments_range.begin_pos)
131
128
  corrector.replace(leading_space, '(')
132
129
  corrector.insert_after(arguments_range, ')')
133
130
  end
134
131
 
135
132
  def require_parentheses?(args)
136
133
  style == :require_parentheses ||
137
- (style == :require_no_parentheses_except_multiline &&
138
- args.multiline?)
134
+ (style == :require_no_parentheses_except_multiline && args.multiline?)
139
135
  end
140
136
 
141
137
  def arguments_without_parentheses?(node)
@@ -40,8 +40,7 @@ module RuboCop
40
40
  PATTERN
41
41
 
42
42
  def message(offender, receiver)
43
- format(MSG, offender: offender.source,
44
- receiver: receiver.source)
43
+ format(MSG, offender: offender.source, receiver: receiver.source)
45
44
  end
46
45
 
47
46
  def offending_range(node)
@@ -98,10 +98,8 @@ module RuboCop
98
98
  include ConfigurableEnforcedStyle
99
99
 
100
100
  MSG = '`%<type>s` condition requires an `else`-clause.'
101
- MSG_NIL = '`%<type>s` condition requires an `else`-clause with ' \
102
- '`nil` in it.'
103
- MSG_EMPTY = '`%<type>s` condition requires an empty ' \
104
- '`else`-clause.'
101
+ MSG_NIL = '`%<type>s` condition requires an `else`-clause with `nil` in it.'
102
+ MSG_EMPTY = '`%<type>s` condition requires an empty `else`-clause.'
105
103
 
106
104
  def on_normal_if_unless(node)
107
105
  return if case_style?
@@ -22,8 +22,7 @@ module RuboCop
22
22
  # end
23
23
  #
24
24
  class MissingRespondToMissing < Base
25
- MSG =
26
- 'When using `method_missing`, define `respond_to_missing?`.'
25
+ MSG = 'When using `method_missing`, define `respond_to_missing?`.'
27
26
 
28
27
  def on_def(node)
29
28
  return unless node.method?(:method_missing)
@@ -53,8 +53,7 @@ module RuboCop
53
53
  def range_to_remove_for_subsequent_mixin(mixins, node)
54
54
  range = node.loc.expression
55
55
  prev_mixin = mixins.each_cons(2) { |m, n| break m if n == node }
56
- between = prev_mixin.loc.expression.end
57
- .join(range.begin)
56
+ between = prev_mixin.loc.expression.end.join(range.begin)
58
57
  # if separated from previous mixin with only whitespace?
59
58
  unless /\S/.match?(between.source)
60
59
  range = range.join(between) # then remove that too
@@ -103,12 +102,9 @@ module RuboCop
103
102
  end
104
103
 
105
104
  def sibling_mixins(send_node)
106
- siblings = send_node.parent.each_child_node(:send)
107
- .select(&:macro?)
105
+ siblings = send_node.parent.each_child_node(:send).select(&:macro?)
108
106
 
109
- siblings.select do |sibling_node|
110
- sibling_node.method?(send_node.method_name)
111
- end
107
+ siblings.select { |sibling_node| sibling_node.method?(send_node.method_name) }
112
108
  end
113
109
 
114
110
  def grouped_style?
@@ -129,9 +125,7 @@ module RuboCop
129
125
  end
130
126
 
131
127
  def group_mixins(node, mixins)
132
- mixin_names = mixins.reverse.flat_map do |mixin|
133
- mixin.arguments.map(&:source)
134
- end
128
+ mixin_names = mixins.reverse.flat_map { |mixin| mixin.arguments.map(&:source) }
135
129
 
136
130
  "#{node.method_name} #{mixin_names.join(', ')}"
137
131
  end
@@ -41,8 +41,7 @@ module RuboCop
41
41
  # prepend M
42
42
  # end
43
43
  class MixinUsage < Base
44
- MSG = '`%<statement>s` is used at the top level. Use inside `class` ' \
45
- 'or `module`.'
44
+ MSG = '`%<statement>s` is used at the top level. Use inside `class` or `module`.'
46
45
  RESTRICT_ON_SEND = %i[include extend prepend].freeze
47
46
 
48
47
  # @!method include_statement(node)
@@ -75,12 +75,9 @@ module RuboCop
75
75
  include ConfigurableEnforcedStyle
76
76
  extend AutoCorrector
77
77
 
78
- MODULE_FUNCTION_MSG =
79
- 'Use `module_function` instead of `extend self`.'
80
- EXTEND_SELF_MSG =
81
- 'Use `extend self` instead of `module_function`.'
82
- FORBIDDEN_MSG =
83
- 'Do not use `module_function` or `extend self`.'
78
+ MODULE_FUNCTION_MSG = 'Use `module_function` instead of `extend self`.'
79
+ EXTEND_SELF_MSG = 'Use `extend self` instead of `module_function`.'
80
+ FORBIDDEN_MSG = 'Do not use `module_function` or `extend self`.'
84
81
 
85
82
  # @!method module_function_node?(node)
86
83
  def_node_matcher :module_function_node?, '(send nil? :module_function)'
@@ -33,8 +33,7 @@ module RuboCop
33
33
 
34
34
  next unless receiver&.block_type? && receiver&.multiline?
35
35
 
36
- range = range_between(receiver.loc.end.begin_pos,
37
- node.send_node.source_range.end_pos)
36
+ range = range_between(receiver.loc.end.begin_pos, node.send_node.source_range.end_pos)
38
37
 
39
38
  add_offense(range)
40
39
 
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks uses of the `then` keyword in multi-line `in` statement.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # case expression
11
+ # in pattern then
12
+ # end
13
+ #
14
+ # # good
15
+ # case expression
16
+ # in pattern
17
+ # end
18
+ #
19
+ # # good
20
+ # case expression
21
+ # in pattern then do_something
22
+ # end
23
+ #
24
+ # # good
25
+ # case expression
26
+ # in pattern then do_something(arg1,
27
+ # arg2)
28
+ # end
29
+ #
30
+ class MultilineInPatternThen < Base
31
+ include RangeHelp
32
+ extend AutoCorrector
33
+ extend TargetRubyVersion
34
+
35
+ minimum_target_ruby_version 2.7
36
+
37
+ MSG = 'Do not use `then` for multiline `in` statement.'
38
+
39
+ def on_in_pattern(node)
40
+ return if !node.then? || require_then?(node)
41
+
42
+ range = node.loc.begin
43
+ add_offense(range) do |corrector|
44
+ corrector.remove(
45
+ range_with_surrounding_space(range: range, side: :left, newlines: false)
46
+ )
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ # Requires `then` for write `in` and its body on the same line.
53
+ def require_then?(in_pattern_node)
54
+ return true if in_pattern_node.pattern.first_line != in_pattern_node.pattern.last_line
55
+ return false unless in_pattern_node.body
56
+
57
+ in_pattern_node.loc.line == in_pattern_node.body.loc.line
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -29,9 +29,7 @@ module RuboCop
29
29
  return if opening_line(node) == closing_line(node)
30
30
  return if correction_exceeds_max_line_length?(node)
31
31
 
32
- add_offense(node) do |corrector|
33
- autocorrect(corrector, node)
34
- end
32
+ add_offense(node) { |corrector| autocorrect(corrector, node) }
35
33
  end
36
34
  alias on_defs on_def
37
35