rubocop 1.48.1 → 1.62.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 (386) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +7 -5
  4. data/assets/output.css.erb +159 -0
  5. data/assets/output.html.erb +1 -160
  6. data/config/default.yml +217 -35
  7. data/config/obsoletion.yml +5 -0
  8. data/lib/rubocop/cli/command/auto_generate_config.rb +22 -8
  9. data/lib/rubocop/cli/command/execute_runner.rb +7 -2
  10. data/lib/rubocop/cli/command/lsp.rb +19 -0
  11. data/lib/rubocop/cli.rb +16 -8
  12. data/lib/rubocop/config.rb +9 -3
  13. data/lib/rubocop/config_finder.rb +14 -4
  14. data/lib/rubocop/config_loader.rb +8 -9
  15. data/lib/rubocop/config_loader_resolver.rb +4 -3
  16. data/lib/rubocop/config_obsoletion/parameter_rule.rb +9 -1
  17. data/lib/rubocop/config_obsoletion.rb +13 -10
  18. data/lib/rubocop/config_validator.rb +14 -7
  19. data/lib/rubocop/cop/autocorrect_logic.rb +36 -13
  20. data/lib/rubocop/cop/base.rb +23 -4
  21. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -0
  22. data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
  23. data/lib/rubocop/cop/bundler/gem_comment.rb +3 -3
  24. data/lib/rubocop/cop/bundler/gem_version.rb +2 -2
  25. data/lib/rubocop/cop/bundler/ordered_gems.rb +9 -1
  26. data/lib/rubocop/cop/cop.rb +2 -2
  27. data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -1
  28. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
  29. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +5 -13
  30. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -4
  31. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
  32. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
  33. data/lib/rubocop/cop/exclude_limit.rb +1 -1
  34. data/lib/rubocop/cop/gemspec/dependency_version.rb +2 -2
  35. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +3 -3
  36. data/lib/rubocop/cop/gemspec/development_dependencies.rb +1 -1
  37. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +9 -1
  38. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -1
  39. data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
  40. data/lib/rubocop/cop/internal_affairs/cop_description.rb +33 -9
  41. data/lib/rubocop/cop/internal_affairs/example_description.rb +45 -24
  42. data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +2 -2
  43. data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +1 -1
  44. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -1
  45. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
  46. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
  47. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +53 -0
  48. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +127 -33
  49. data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
  50. data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
  51. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +29 -2
  52. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -0
  53. data/lib/rubocop/cop/internal_affairs.rb +2 -0
  54. data/lib/rubocop/cop/layout/argument_alignment.rb +1 -1
  55. data/lib/rubocop/cop/layout/class_structure.rb +8 -0
  56. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +1 -2
  57. data/lib/rubocop/cop/layout/dot_position.rb +1 -5
  58. data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
  59. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +42 -9
  60. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
  61. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +27 -4
  62. data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
  63. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -0
  64. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -0
  65. data/lib/rubocop/cop/layout/end_alignment.rb +20 -4
  66. data/lib/rubocop/cop/layout/extra_spacing.rb +3 -4
  67. data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -1
  68. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +22 -7
  69. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +25 -34
  70. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +7 -19
  71. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +42 -52
  72. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +38 -55
  73. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
  74. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +6 -6
  75. data/lib/rubocop/cop/layout/heredoc_indentation.rb +4 -1
  76. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  77. data/lib/rubocop/cop/layout/indentation_width.rb +3 -3
  78. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -1
  79. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  80. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +17 -9
  81. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +1 -1
  82. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -0
  83. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +8 -27
  84. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +7 -26
  85. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +4 -21
  86. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18 -3
  87. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +6 -30
  88. data/lib/rubocop/cop/layout/redundant_line_break.rb +33 -11
  89. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +4 -4
  90. data/lib/rubocop/cop/layout/single_line_block_chain.rb +5 -0
  91. data/lib/rubocop/cop/layout/space_after_comma.rb +9 -1
  92. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  93. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +2 -2
  94. data/lib/rubocop/cop/layout/space_around_operators.rb +53 -21
  95. data/lib/rubocop/cop/layout/space_before_block_braces.rb +19 -10
  96. data/lib/rubocop/cop/layout/space_before_first_arg.rb +1 -1
  97. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -0
  98. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -1
  99. data/lib/rubocop/cop/layout/space_inside_parens.rb +3 -3
  100. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
  101. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +5 -0
  102. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +13 -1
  103. data/lib/rubocop/cop/lint/assignment_in_condition.rb +4 -4
  104. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +2 -2
  105. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +1 -1
  106. data/lib/rubocop/cop/lint/debugger.rb +19 -5
  107. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +3 -3
  108. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -1
  109. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +122 -0
  110. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -1
  111. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +46 -19
  112. data/lib/rubocop/cop/lint/empty_block.rb +1 -1
  113. data/lib/rubocop/cop/lint/empty_conditional_body.rb +1 -1
  114. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
  115. data/lib/rubocop/cop/lint/erb_new_arguments.rb +6 -7
  116. data/lib/rubocop/cop/lint/float_comparison.rb +10 -0
  117. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
  118. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
  119. data/lib/rubocop/cop/lint/identity_comparison.rb +0 -1
  120. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -3
  121. data/lib/rubocop/cop/lint/inherit_exception.rb +9 -0
  122. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +56 -0
  123. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
  124. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
  125. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  126. data/lib/rubocop/cop/lint/missing_super.rb +34 -5
  127. data/lib/rubocop/cop/lint/mixed_case_range.rb +111 -0
  128. data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
  129. data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -21
  130. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +10 -7
  131. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -5
  132. data/lib/rubocop/cop/lint/number_conversion.rb +14 -4
  133. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +2 -2
  134. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +0 -1
  135. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +2 -2
  136. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -1
  137. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
  138. data/lib/rubocop/cop/lint/redundant_require_statement.rb +12 -3
  139. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +72 -8
  140. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +35 -15
  141. data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -2
  142. data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -2
  143. data/lib/rubocop/cop/lint/rescue_type.rb +1 -3
  144. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +14 -8
  145. data/lib/rubocop/cop/lint/script_permission.rb +3 -3
  146. data/lib/rubocop/cop/lint/self_assignment.rb +38 -0
  147. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -2
  148. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
  149. data/lib/rubocop/cop/lint/shadowed_exception.rb +5 -11
  150. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +7 -1
  151. data/lib/rubocop/cop/lint/struct_new_override.rb +12 -12
  152. data/lib/rubocop/cop/lint/suppressed_exception.rb +2 -2
  153. data/lib/rubocop/cop/lint/symbol_conversion.rb +8 -3
  154. data/lib/rubocop/cop/lint/syntax.rb +6 -3
  155. data/lib/rubocop/cop/lint/to_enum_arguments.rb +19 -6
  156. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +23 -9
  157. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
  158. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +2 -2
  159. data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -3
  160. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -2
  161. data/lib/rubocop/cop/lint/useless_assignment.rb +94 -10
  162. data/lib/rubocop/cop/lint/useless_method_definition.rb +10 -2
  163. data/lib/rubocop/cop/lint/useless_times.rb +2 -2
  164. data/lib/rubocop/cop/lint/void.rb +104 -14
  165. data/lib/rubocop/cop/metrics/abc_size.rb +3 -3
  166. data/lib/rubocop/cop/metrics/block_length.rb +1 -1
  167. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  168. data/lib/rubocop/cop/metrics/class_length.rb +8 -2
  169. data/lib/rubocop/cop/metrics/method_length.rb +1 -1
  170. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -2
  171. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +31 -3
  172. data/lib/rubocop/cop/migration/department_name.rb +2 -2
  173. data/lib/rubocop/cop/mixin/allowed_receivers.rb +34 -0
  174. data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
  175. data/lib/rubocop/cop/mixin/comments_help.rb +19 -11
  176. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
  177. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  178. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  179. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +14 -11
  180. data/lib/rubocop/cop/mixin/hash_transform_method.rb +1 -1
  181. data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
  182. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +4 -3
  183. data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
  184. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +6 -8
  185. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
  186. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
  187. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -1
  188. data/lib/rubocop/cop/mixin/string_help.rb +4 -2
  189. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -1
  190. data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
  191. data/lib/rubocop/cop/naming/block_forwarding.rb +13 -5
  192. data/lib/rubocop/cop/naming/constant_name.rb +2 -3
  193. data/lib/rubocop/cop/naming/file_name.rb +1 -1
  194. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
  195. data/lib/rubocop/cop/naming/inclusive_language.rb +23 -4
  196. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +26 -11
  197. data/lib/rubocop/cop/naming/predicate_name.rb +2 -2
  198. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +11 -3
  199. data/lib/rubocop/cop/naming/variable_name.rb +6 -1
  200. data/lib/rubocop/cop/registry.rb +1 -1
  201. data/lib/rubocop/cop/security/open.rb +2 -2
  202. data/lib/rubocop/cop/style/access_modifier_declarations.rb +2 -2
  203. data/lib/rubocop/cop/style/accessor_grouping.rb +6 -2
  204. data/lib/rubocop/cop/style/alias.rb +9 -8
  205. data/lib/rubocop/cop/style/arguments_forwarding.rb +411 -63
  206. data/lib/rubocop/cop/style/array_first_last.rb +64 -0
  207. data/lib/rubocop/cop/style/array_intersect.rb +13 -5
  208. data/lib/rubocop/cop/style/attr.rb +11 -1
  209. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
  210. data/lib/rubocop/cop/style/begin_block.rb +1 -2
  211. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
  212. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  213. data/lib/rubocop/cop/style/block_delimiters.rb +5 -4
  214. data/lib/rubocop/cop/style/case_like_if.rb +5 -5
  215. data/lib/rubocop/cop/style/class_and_module_children.rb +2 -2
  216. data/lib/rubocop/cop/style/class_check.rb +1 -0
  217. data/lib/rubocop/cop/style/class_equality_comparison.rb +58 -40
  218. data/lib/rubocop/cop/style/class_vars.rb +3 -3
  219. data/lib/rubocop/cop/style/collection_compact.rb +35 -12
  220. data/lib/rubocop/cop/style/collection_methods.rb +2 -0
  221. data/lib/rubocop/cop/style/colon_method_call.rb +2 -2
  222. data/lib/rubocop/cop/style/combinable_loops.rb +36 -8
  223. data/lib/rubocop/cop/style/commented_keyword.rb +5 -2
  224. data/lib/rubocop/cop/style/concat_array_literals.rb +2 -1
  225. data/lib/rubocop/cop/style/conditional_assignment.rb +11 -10
  226. data/lib/rubocop/cop/style/copyright.rb +6 -3
  227. data/lib/rubocop/cop/style/data_inheritance.rb +75 -0
  228. data/lib/rubocop/cop/style/date_time.rb +5 -4
  229. data/lib/rubocop/cop/style/dir.rb +1 -1
  230. data/lib/rubocop/cop/style/dir_empty.rb +8 -14
  231. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
  232. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +2 -2
  233. data/lib/rubocop/cop/style/documentation.rb +1 -1
  234. data/lib/rubocop/cop/style/double_negation.rb +2 -2
  235. data/lib/rubocop/cop/style/each_for_simple_loop.rb +7 -7
  236. data/lib/rubocop/cop/style/each_with_object.rb +2 -2
  237. data/lib/rubocop/cop/style/empty_case_condition.rb +6 -1
  238. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  239. data/lib/rubocop/cop/style/eval_with_location.rb +8 -19
  240. data/lib/rubocop/cop/style/exact_regexp_match.rb +69 -0
  241. data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -2
  242. data/lib/rubocop/cop/style/file_empty.rb +3 -3
  243. data/lib/rubocop/cop/style/file_read.rb +2 -2
  244. data/lib/rubocop/cop/style/for.rb +3 -1
  245. data/lib/rubocop/cop/style/format_string.rb +24 -3
  246. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +4 -2
  247. data/lib/rubocop/cop/style/guard_clause.rb +28 -0
  248. data/lib/rubocop/cop/style/hash_conversion.rb +10 -0
  249. data/lib/rubocop/cop/style/hash_each_methods.rb +106 -33
  250. data/lib/rubocop/cop/style/hash_except.rb +25 -13
  251. data/lib/rubocop/cop/style/hash_syntax.rb +9 -2
  252. data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
  253. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
  254. data/lib/rubocop/cop/style/identical_conditional_branches.rb +34 -5
  255. data/lib/rubocop/cop/style/if_inside_else.rb +6 -0
  256. data/lib/rubocop/cop/style/if_unless_modifier.rb +41 -12
  257. data/lib/rubocop/cop/style/if_with_semicolon.rb +2 -2
  258. data/lib/rubocop/cop/style/inverse_methods.rb +14 -13
  259. data/lib/rubocop/cop/style/invertible_unless_condition.rb +54 -8
  260. data/lib/rubocop/cop/style/lambda.rb +3 -3
  261. data/lib/rubocop/cop/style/lambda_call.rb +5 -0
  262. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +8 -10
  263. data/lib/rubocop/cop/style/map_to_hash.rb +19 -6
  264. data/lib/rubocop/cop/style/map_to_set.rb +4 -1
  265. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +27 -16
  266. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +45 -40
  267. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +20 -0
  268. data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
  269. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +2 -2
  270. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  271. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
  272. data/lib/rubocop/cop/style/multiline_method_signature.rb +16 -4
  273. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +6 -4
  274. data/lib/rubocop/cop/style/multiple_comparison.rb +14 -0
  275. data/lib/rubocop/cop/style/nested_ternary_operator.rb +3 -11
  276. data/lib/rubocop/cop/style/next.rb +1 -1
  277. data/lib/rubocop/cop/style/nil_comparison.rb +2 -0
  278. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  279. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  280. data/lib/rubocop/cop/style/object_then.rb +5 -3
  281. data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
  282. data/lib/rubocop/cop/style/operator_method_call.rb +8 -2
  283. data/lib/rubocop/cop/style/parallel_assignment.rb +29 -23
  284. data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
  285. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -3
  286. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  287. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  288. data/lib/rubocop/cop/style/raise_args.rb +4 -1
  289. data/lib/rubocop/cop/style/redundant_argument.rb +10 -4
  290. data/lib/rubocop/cop/style/redundant_array_constructor.rb +77 -0
  291. data/lib/rubocop/cop/style/redundant_assignment.rb +10 -2
  292. data/lib/rubocop/cop/style/redundant_begin.rb +10 -2
  293. data/lib/rubocop/cop/style/redundant_conditional.rb +2 -10
  294. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +39 -0
  295. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +93 -5
  296. data/lib/rubocop/cop/style/redundant_each.rb +7 -4
  297. data/lib/rubocop/cop/style/redundant_exception.rb +32 -12
  298. data/lib/rubocop/cop/style/redundant_fetch_block.rb +9 -7
  299. data/lib/rubocop/cop/style/redundant_filter_chain.rb +118 -0
  300. data/lib/rubocop/cop/style/redundant_line_continuation.rb +203 -0
  301. data/lib/rubocop/cop/style/redundant_parentheses.rb +72 -23
  302. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
  303. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +100 -0
  304. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -2
  305. data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +46 -0
  306. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +3 -2
  307. data/lib/rubocop/cop/style/redundant_return.rb +14 -3
  308. data/lib/rubocop/cop/style/redundant_self.rb +17 -2
  309. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +8 -1
  310. data/lib/rubocop/cop/style/redundant_sort.rb +10 -9
  311. data/lib/rubocop/cop/style/redundant_sort_by.rb +2 -2
  312. data/lib/rubocop/cop/style/redundant_string_escape.rb +5 -4
  313. data/lib/rubocop/cop/style/regexp_literal.rb +11 -2
  314. data/lib/rubocop/cop/style/require_order.rb +11 -5
  315. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -3
  316. data/lib/rubocop/cop/style/return_nil.rb +6 -2
  317. data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +95 -0
  318. data/lib/rubocop/cop/style/sample.rb +3 -4
  319. data/lib/rubocop/cop/style/select_by_regexp.rb +22 -11
  320. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  321. data/lib/rubocop/cop/style/semicolon.rb +20 -4
  322. data/lib/rubocop/cop/style/signal_exception.rb +1 -1
  323. data/lib/rubocop/cop/style/single_argument_dig.rb +7 -3
  324. data/lib/rubocop/cop/style/single_line_do_end_block.rb +67 -0
  325. data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
  326. data/lib/rubocop/cop/style/slicing_with_range.rb +76 -10
  327. data/lib/rubocop/cop/style/sole_nested_conditional.rb +8 -4
  328. data/lib/rubocop/cop/style/special_global_vars.rb +3 -4
  329. data/lib/rubocop/cop/style/string_chars.rb +1 -0
  330. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
  331. data/lib/rubocop/cop/style/strip.rb +7 -4
  332. data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
  333. data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
  334. data/lib/rubocop/cop/style/symbol_array.rb +35 -15
  335. data/lib/rubocop/cop/style/symbol_proc.rb +36 -0
  336. data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -0
  337. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  338. data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -0
  339. data/lib/rubocop/cop/style/unpack_first.rb +11 -14
  340. data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
  341. data/lib/rubocop/cop/style/yoda_condition.rb +4 -2
  342. data/lib/rubocop/cop/style/yoda_expression.rb +8 -7
  343. data/lib/rubocop/cop/team.rb +1 -1
  344. data/lib/rubocop/cop/util.rb +1 -1
  345. data/lib/rubocop/cop/utils/regexp_ranges.rb +113 -0
  346. data/lib/rubocop/cop/variable_force/assignment.rb +45 -4
  347. data/lib/rubocop/cop/variable_force/variable_table.rb +2 -2
  348. data/lib/rubocop/cop/variable_force.rb +1 -0
  349. data/lib/rubocop/cops_documentation_generator.rb +26 -7
  350. data/lib/rubocop/directive_comment.rb +10 -8
  351. data/lib/rubocop/ext/regexp_node.rb +10 -5
  352. data/lib/rubocop/ext/regexp_parser.rb +5 -2
  353. data/lib/rubocop/file_finder.rb +4 -7
  354. data/lib/rubocop/formatter/disabled_config_formatter.rb +17 -6
  355. data/lib/rubocop/formatter/html_formatter.rb +35 -14
  356. data/lib/rubocop/formatter/json_formatter.rb +0 -1
  357. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  358. data/lib/rubocop/formatter/offense_count_formatter.rb +12 -2
  359. data/lib/rubocop/formatter/simple_text_formatter.rb +1 -1
  360. data/lib/rubocop/formatter.rb +1 -1
  361. data/lib/rubocop/lsp/logger.rb +22 -0
  362. data/lib/rubocop/lsp/routes.rb +246 -0
  363. data/lib/rubocop/lsp/runtime.rb +99 -0
  364. data/lib/rubocop/lsp/server.rb +71 -0
  365. data/lib/rubocop/lsp/severity.rb +27 -0
  366. data/lib/rubocop/lsp.rb +29 -0
  367. data/lib/rubocop/magic_comment.rb +13 -11
  368. data/lib/rubocop/options.rb +26 -10
  369. data/lib/rubocop/path_util.rb +6 -2
  370. data/lib/rubocop/result_cache.rb +6 -3
  371. data/lib/rubocop/rspec/cop_helper.rb +8 -2
  372. data/lib/rubocop/rspec/expect_offense.rb +8 -8
  373. data/lib/rubocop/rspec/shared_contexts.rb +42 -18
  374. data/lib/rubocop/rspec/support.rb +2 -0
  375. data/lib/rubocop/runner.rb +15 -6
  376. data/lib/rubocop/server/cache.rb +1 -1
  377. data/lib/rubocop/server/client_command/exec.rb +3 -3
  378. data/lib/rubocop/server/helper.rb +1 -1
  379. data/lib/rubocop/server/server_command/exec.rb +1 -2
  380. data/lib/rubocop/string_interpreter.rb +3 -3
  381. data/lib/rubocop/target_finder.rb +91 -81
  382. data/lib/rubocop/target_ruby.rb +85 -78
  383. data/lib/rubocop/version.rb +27 -8
  384. data/lib/rubocop.rb +22 -0
  385. metadata +59 -14
  386. /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
data/config/default.yml CHANGED
@@ -30,6 +30,7 @@ AllCops:
30
30
  - '**/*.rbx'
31
31
  - '**/*.ru'
32
32
  - '**/*.ruby'
33
+ - '**/*.schema'
33
34
  - '**/*.spec'
34
35
  - '**/*.thor'
35
36
  - '**/*.watchr'
@@ -55,6 +56,7 @@ AllCops:
55
56
  - '**/Puppetfile'
56
57
  - '**/Rakefile'
57
58
  - '**/rakefile'
59
+ - '**/Schemafile'
58
60
  - '**/Snapfile'
59
61
  - '**/Steepfile'
60
62
  - '**/Thorfile'
@@ -140,8 +142,14 @@ AllCops:
140
142
  # or gems.locked file. (Although the Ruby version is specified in the Gemfile
141
143
  # or gems.rb file, RuboCop reads the final value from the lock file.) If the
142
144
  # Ruby version is still unresolved, RuboCop will use the oldest officially
143
- # supported Ruby version (currently Ruby 2.6).
145
+ # supported Ruby version (currently Ruby 2.7).
144
146
  TargetRubyVersion: ~
147
+ # You can specify the parser engine. There are two options available:
148
+ # - `parser_whitequark` ... https://github.com/whitequark/parser
149
+ # - `parser_prism` ... https://github.com/ruby/prism (`Prism::Translation::Parser`)
150
+ # By default, `parser` is used. For the `TargetRubyVersion` value, `parser` can be specified for versions `2.0` and above.
151
+ # `parser_prism` can be specified for versions `3.3` and above. `parser_prism` is faster but still considered experimental.
152
+ ParserEngine: parser_whitequark
145
153
  # Determines if a notification for extension libraries should be shown when
146
154
  # rubocop is run. Keys are the name of the extension, and values are an array
147
155
  # of gems in the Gemfile that the extension is suggested for, if not already
@@ -154,6 +162,7 @@ AllCops:
154
162
  rubocop-rake: [rake]
155
163
  rubocop-graphql: [graphql]
156
164
  rubocop-capybara: [capybara]
165
+ rubocop-factory_bot: [factory_bot, factory_bot_rails]
157
166
  # Enable/Disable checking the methods extended by Active Support.
158
167
  ActiveSupportExtensionsEnabled: false
159
168
 
@@ -170,6 +179,16 @@ Bundler/DuplicatedGem:
170
179
  - '**/Gemfile'
171
180
  - '**/gems.rb'
172
181
 
182
+ Bundler/DuplicatedGroup:
183
+ Description: 'Checks for duplicate group entries in Gemfile.'
184
+ Enabled: true
185
+ Severity: warning
186
+ VersionAdded: '1.56'
187
+ Include:
188
+ - '**/*.gemfile'
189
+ - '**/Gemfile'
190
+ - '**/gems.rb'
191
+
173
192
  Bundler/GemComment:
174
193
  Description: 'Add a comment describing each gem.'
175
194
  Enabled: false
@@ -466,7 +485,9 @@ Layout/ClassStructure:
466
485
  Description: 'Enforces a configured order of definitions within a class body.'
467
486
  StyleGuide: '#consistent-classes'
468
487
  Enabled: false
488
+ SafeAutoCorrect: false
469
489
  VersionAdded: '0.52'
490
+ VersionChanged: '1.53'
470
491
  Categories:
471
492
  module_inclusion:
472
493
  - include
@@ -541,7 +562,9 @@ Layout/ElseAlignment:
541
562
  Layout/EmptyComment:
542
563
  Description: 'Checks empty comment.'
543
564
  Enabled: true
565
+ AutoCorrect: contextual
544
566
  VersionAdded: '0.53'
567
+ VersionChanged: '1.61'
545
568
  AllowBorderComment: true
546
569
  AllowMarginComment: true
547
570
 
@@ -574,6 +597,8 @@ Layout/EmptyLineBetweenDefs:
574
597
  EmptyLineBetweenMethodDefs: true
575
598
  EmptyLineBetweenClassDefs: true
576
599
  EmptyLineBetweenModuleDefs: true
600
+ # `DefLikeMacros` takes the name of any macro that you want to treat like a def.
601
+ DefLikeMacros: []
577
602
  # `AllowAdjacentOneLineDefs` means that single line method definitions don't
578
603
  # need an empty line between them. `true` by default.
579
604
  AllowAdjacentOneLineDefs: true
@@ -1016,8 +1041,6 @@ Layout/LineContinuationLeadingSpace:
1016
1041
  Layout/LineContinuationSpacing:
1017
1042
  Description: 'Checks the spacing in front of backslash in line continuations.'
1018
1043
  Enabled: pending
1019
- AutoCorrect: true
1020
- SafeAutoCorrect: true
1021
1044
  VersionAdded: '1.31'
1022
1045
  EnforcedStyle: space
1023
1046
  SupportedStyles:
@@ -1336,6 +1359,10 @@ Layout/SpaceAroundOperators:
1336
1359
  SupportedStylesForExponentOperator:
1337
1360
  - space
1338
1361
  - no_space
1362
+ EnforcedStyleForRationalLiterals: no_space
1363
+ SupportedStylesForRationalLiterals:
1364
+ - space
1365
+ - no_space
1339
1366
 
1340
1367
  Layout/SpaceBeforeBlockBraces:
1341
1368
  Description: >-
@@ -1531,7 +1558,6 @@ Lint/AmbiguousBlockAssociation:
1531
1558
  Description: >-
1532
1559
  Checks for ambiguous block association with method when param passed without
1533
1560
  parentheses.
1534
- StyleGuide: '#syntax'
1535
1561
  Enabled: true
1536
1562
  VersionAdded: '0.48'
1537
1563
  VersionChanged: '1.13'
@@ -1752,6 +1778,11 @@ Lint/DuplicateMagicComment:
1752
1778
  Enabled: pending
1753
1779
  VersionAdded: '1.37'
1754
1780
 
1781
+ Lint/DuplicateMatchPattern:
1782
+ Description: 'Do not repeat patterns in `in` keywords.'
1783
+ Enabled: pending
1784
+ VersionAdded: '1.50'
1785
+
1755
1786
  Lint/DuplicateMethods:
1756
1787
  Description: 'Check for duplicate method definitions.'
1757
1788
  Enabled: true
@@ -1802,16 +1833,18 @@ Lint/EmptyClass:
1802
1833
  Lint/EmptyConditionalBody:
1803
1834
  Description: 'Checks for the presence of `if`, `elsif` and `unless` branches without a body.'
1804
1835
  Enabled: true
1836
+ AutoCorrect: contextual
1805
1837
  SafeAutoCorrect: false
1806
1838
  AllowComments: true
1807
1839
  VersionAdded: '0.89'
1808
- VersionChanged: '1.34'
1840
+ VersionChanged: '1.61'
1809
1841
 
1810
1842
  Lint/EmptyEnsure:
1811
1843
  Description: 'Checks for empty ensure block.'
1812
1844
  Enabled: true
1845
+ AutoCorrect: contextual
1813
1846
  VersionAdded: '0.10'
1814
- VersionChanged: '0.48'
1847
+ VersionChanged: '1.61'
1815
1848
 
1816
1849
  Lint/EmptyExpression:
1817
1850
  Description: 'Checks for empty expressions.'
@@ -1833,8 +1866,9 @@ Lint/EmptyInPattern:
1833
1866
  Lint/EmptyInterpolation:
1834
1867
  Description: 'Checks for empty string interpolation.'
1835
1868
  Enabled: true
1869
+ AutoCorrect: contextual
1836
1870
  VersionAdded: '0.20'
1837
- VersionChanged: '0.45'
1871
+ VersionChanged: '1.61'
1838
1872
 
1839
1873
  Lint/EmptyWhen:
1840
1874
  Description: 'Checks for `when` branches with empty bodies.'
@@ -1940,6 +1974,12 @@ Lint/InterpolationCheck:
1940
1974
  VersionAdded: '0.50'
1941
1975
  VersionChanged: '1.40'
1942
1976
 
1977
+ Lint/ItWithoutArgumentsInBlock:
1978
+ Description: 'Checks uses of `it` calls without arguments in block.'
1979
+ Reference: 'https://bugs.ruby-lang.org/issues/18980'
1980
+ Enabled: pending
1981
+ VersionAdded: '1.59'
1982
+
1943
1983
  Lint/LambdaWithoutLiteralBlock:
1944
1984
  Description: 'Checks uses of lambda without a literal block.'
1945
1985
  Enabled: pending
@@ -1950,6 +1990,11 @@ Lint/LiteralAsCondition:
1950
1990
  Enabled: true
1951
1991
  VersionAdded: '0.51'
1952
1992
 
1993
+ Lint/LiteralAssignmentInCondition:
1994
+ Description: 'Checks for literal assignments in the conditions.'
1995
+ Enabled: pending
1996
+ VersionAdded: '1.58'
1997
+
1953
1998
  Lint/LiteralInInterpolation:
1954
1999
  Description: 'Checks for literals used in interpolation.'
1955
2000
  Enabled: true
@@ -1984,9 +2029,16 @@ Lint/MissingSuper:
1984
2029
  Checks for the presence of constructors and lifecycle callbacks
1985
2030
  without calls to `super`.
1986
2031
  Enabled: true
2032
+ AllowedParentClasses: []
1987
2033
  VersionAdded: '0.89'
1988
2034
  VersionChanged: '1.4'
1989
2035
 
2036
+ Lint/MixedCaseRange:
2037
+ Description: 'Checks for mixed-case character ranges since they include likely unintended characters.'
2038
+ Enabled: pending
2039
+ SafeAutoCorrect: false
2040
+ VersionAdded: '1.53'
2041
+
1990
2042
  Lint/MixedRegexpCaptureTypes:
1991
2043
  Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
1992
2044
  Enabled: true
@@ -2136,10 +2188,17 @@ Lint/RedundantDirGlobSort:
2136
2188
  VersionChanged: '1.26'
2137
2189
  SafeAutoCorrect: false
2138
2190
 
2191
+ Lint/RedundantRegexpQuantifiers:
2192
+ Description: 'Checks for redundant quantifiers in Regexps.'
2193
+ Enabled: pending
2194
+ VersionAdded: '1.53'
2195
+
2139
2196
  Lint/RedundantRequireStatement:
2140
2197
  Description: 'Checks for unnecessary `require` statement.'
2141
2198
  Enabled: true
2199
+ SafeAutoCorrect: false
2142
2200
  VersionAdded: '0.76'
2201
+ VersionChanged: '1.57'
2143
2202
 
2144
2203
  Lint/RedundantSafeNavigation:
2145
2204
  Description: 'Checks for redundant safe navigation calls.'
@@ -2340,11 +2399,16 @@ Lint/TopLevelReturnWithArgument:
2340
2399
  Description: 'Detects top level return statements with argument.'
2341
2400
  Enabled: true
2342
2401
  VersionAdded: '0.89'
2402
+ # These codes are `eval`-ed in method and their return values may be used.
2403
+ Exclude:
2404
+ - '**/*.jb'
2343
2405
 
2344
2406
  Lint/TrailingCommaInAttributeDeclaration:
2345
2407
  Description: 'Checks for trailing commas in attribute declarations.'
2346
2408
  Enabled: true
2409
+ AutoCorrect: contextual
2347
2410
  VersionAdded: '0.90'
2411
+ VersionChanged: '1.61'
2348
2412
 
2349
2413
  Lint/TripleQuotes:
2350
2414
  Description: 'Checks for useless triple quote constructs.'
@@ -2404,8 +2468,9 @@ Lint/UnusedBlockArgument:
2404
2468
  Description: 'Checks for unused block arguments.'
2405
2469
  StyleGuide: '#underscore-unused-vars'
2406
2470
  Enabled: true
2471
+ AutoCorrect: contextual
2407
2472
  VersionAdded: '0.21'
2408
- VersionChanged: '0.22'
2473
+ VersionChanged: '1.61'
2409
2474
  IgnoreEmptyBlocks: true
2410
2475
  AllowUnusedKeywordArguments: false
2411
2476
 
@@ -2413,8 +2478,9 @@ Lint/UnusedMethodArgument:
2413
2478
  Description: 'Checks for unused method arguments.'
2414
2479
  StyleGuide: '#underscore-unused-vars'
2415
2480
  Enabled: true
2481
+ AutoCorrect: contextual
2416
2482
  VersionAdded: '0.21'
2417
- VersionChanged: '0.81'
2483
+ VersionChanged: '1.61'
2418
2484
  AllowUnusedKeywordArguments: false
2419
2485
  IgnoreEmptyMethods: true
2420
2486
  IgnoreNotImplementedMethods: true
@@ -2438,8 +2504,9 @@ Lint/UriRegexp:
2438
2504
  Lint/UselessAccessModifier:
2439
2505
  Description: 'Checks for useless access modifiers.'
2440
2506
  Enabled: true
2507
+ AutoCorrect: contextual
2441
2508
  VersionAdded: '0.20'
2442
- VersionChanged: '0.83'
2509
+ VersionChanged: '1.61'
2443
2510
  ContextCreatingMethods: []
2444
2511
  MethodCreatingMethods: []
2445
2512
 
@@ -2447,7 +2514,10 @@ Lint/UselessAssignment:
2447
2514
  Description: 'Checks for useless assignment to a local variable.'
2448
2515
  StyleGuide: '#underscore-unused-vars'
2449
2516
  Enabled: true
2517
+ AutoCorrect: contextual
2450
2518
  VersionAdded: '0.11'
2519
+ VersionChanged: '1.61'
2520
+ SafeAutoCorrect: false
2451
2521
 
2452
2522
  Lint/UselessElseWithoutRescue:
2453
2523
  Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
@@ -2458,8 +2528,9 @@ Lint/UselessElseWithoutRescue:
2458
2528
  Lint/UselessMethodDefinition:
2459
2529
  Description: 'Checks for useless method definitions.'
2460
2530
  Enabled: true
2531
+ AutoCorrect: contextual
2461
2532
  VersionAdded: '0.90'
2462
- VersionChanged: '0.91'
2533
+ VersionChanged: '1.61'
2463
2534
  Safe: false
2464
2535
 
2465
2536
  Lint/UselessRescue:
@@ -2475,21 +2546,24 @@ Lint/UselessRuby2Keywords:
2475
2546
  Lint/UselessSetterCall:
2476
2547
  Description: 'Checks for useless setter call to a local variable.'
2477
2548
  Enabled: true
2478
- SafeAutoCorrect: false
2549
+ Safe: false
2479
2550
  VersionAdded: '0.13'
2480
2551
  VersionChanged: '1.2'
2481
- Safe: false
2482
2552
 
2483
2553
  Lint/UselessTimes:
2484
2554
  Description: 'Checks for useless `Integer#times` calls.'
2485
2555
  Enabled: true
2486
- VersionAdded: '0.91'
2487
2556
  Safe: false
2557
+ AutoCorrect: contextual
2558
+ VersionAdded: '0.91'
2559
+ VersionChanged: '1.61'
2488
2560
 
2489
2561
  Lint/Void:
2490
2562
  Description: 'Possible use of operator/literal/variable in void context.'
2491
2563
  Enabled: true
2564
+ AutoCorrect: contextual
2492
2565
  VersionAdded: '0.9'
2566
+ VersionChanged: '1.61'
2493
2567
  CheckForMethodsWithNoSideEffects: false
2494
2568
 
2495
2569
  #################### Metrics ###############################
@@ -2779,7 +2853,7 @@ Naming/InclusiveLanguage:
2779
2853
  Description: 'Recommend the use of inclusive language instead of problematic terms.'
2780
2854
  Enabled: false
2781
2855
  VersionAdded: '1.18'
2782
- VersionChanged: '1.21'
2856
+ VersionChanged: '1.49'
2783
2857
  CheckIdentifiers: true
2784
2858
  CheckConstants: true
2785
2859
  CheckVariables: true
@@ -2939,7 +3013,9 @@ Naming/VariableNumber:
2939
3013
  Security/CompoundHash:
2940
3014
  Description: 'When overwriting Object#hash to combine values, prefer delegating to Array#hash over writing a custom implementation.'
2941
3015
  Enabled: pending
3016
+ Safe: false
2942
3017
  VersionAdded: '1.28'
3018
+ VersionChanged: '1.51'
2943
3019
 
2944
3020
  Security/Eval:
2945
3021
  Description: 'The use of eval represents a serious security risk.'
@@ -3045,7 +3121,20 @@ Style/ArgumentsForwarding:
3045
3121
  StyleGuide: '#arguments-forwarding'
3046
3122
  Enabled: pending
3047
3123
  AllowOnlyRestArgument: true
3124
+ UseAnonymousForwarding: true
3125
+ RedundantRestArgumentNames:
3126
+ - args
3127
+ - arguments
3128
+ RedundantKeywordRestArgumentNames:
3129
+ - kwargs
3130
+ - options
3131
+ - opts
3132
+ RedundantBlockArgumentNames:
3133
+ - blk
3134
+ - block
3135
+ - proc
3048
3136
  VersionAdded: '1.1'
3137
+ VersionChanged: '1.58'
3049
3138
 
3050
3139
  Style/ArrayCoercion:
3051
3140
  Description: >-
@@ -3056,6 +3145,13 @@ Style/ArrayCoercion:
3056
3145
  Enabled: false
3057
3146
  VersionAdded: '0.88'
3058
3147
 
3148
+ Style/ArrayFirstLast:
3149
+ Description: 'Use `arr.first` and `arr.last` instead of `arr[0]` and `arr[-1]`.'
3150
+ Reference: '#first-and-last'
3151
+ Enabled: false
3152
+ VersionAdded: '1.58'
3153
+ Safe: false
3154
+
3059
3155
  Style/ArrayIntersect:
3060
3156
  Description: 'Use `array1.intersect?(array2)` instead of `(array1 & array2).any?`.'
3061
3157
  Enabled: 'pending'
@@ -3277,7 +3373,7 @@ Style/ClassAndModuleChildren:
3277
3373
  StyleGuide: '#namespace-definition'
3278
3374
  # Moving from compact to nested children requires knowledge of whether the
3279
3375
  # outer parent is a module or a class. Moving from nested to compact requires
3280
- # verification that the outer parent is defined elsewhere. Rubocop does not
3376
+ # verification that the outer parent is defined elsewhere. RuboCop does not
3281
3377
  # have the knowledge to perform either operation safely and thus requires
3282
3378
  # manual oversight.
3283
3379
  SafeAutoCorrect: false
@@ -3316,7 +3412,9 @@ Style/ClassEqualityComparison:
3316
3412
  Description: 'Enforces the use of `Object#instance_of?` instead of class comparison for equality.'
3317
3413
  StyleGuide: '#instance-of-vs-class-comparison'
3318
3414
  Enabled: true
3415
+ SafeAutoCorrect: false
3319
3416
  VersionAdded: '0.93'
3417
+ VersionChanged: '1.57'
3320
3418
  AllowedMethods:
3321
3419
  - ==
3322
3420
  - equal?
@@ -3352,6 +3450,7 @@ Style/CollectionCompact:
3352
3450
  Safe: false
3353
3451
  VersionAdded: '1.2'
3354
3452
  VersionChanged: '1.3'
3453
+ AllowedReceivers: []
3355
3454
 
3356
3455
  # Align with the style guide.
3357
3456
  Style/CollectionMethods:
@@ -3370,6 +3469,7 @@ Style/CollectionMethods:
3370
3469
  PreferredMethods:
3371
3470
  collect: 'map'
3372
3471
  collect!: 'map!'
3472
+ collect_concat: 'flat_map'
3373
3473
  inject: 'reduce'
3374
3474
  detect: 'find'
3375
3475
  find_all: 'select'
@@ -3508,6 +3608,14 @@ Style/Copyright:
3508
3608
  Notice: '^Copyright (\(c\) )?2[0-9]{3} .+'
3509
3609
  AutocorrectNotice: ''
3510
3610
 
3611
+ Style/DataInheritance:
3612
+ Description: 'Checks for inheritance from Data.define.'
3613
+ StyleGuide: '#no-extend-data-define'
3614
+ Enabled: pending
3615
+ SafeAutoCorrect: false
3616
+ VersionAdded: '1.49'
3617
+ VersionChanged: '1.51'
3618
+
3511
3619
  Style/DateTime:
3512
3620
  Description: 'Use Time over DateTime.'
3513
3621
  StyleGuide: '#date-time'
@@ -3615,8 +3723,9 @@ Style/EmptyCaseCondition:
3615
3723
  Style/EmptyElse:
3616
3724
  Description: 'Avoid empty else-clauses.'
3617
3725
  Enabled: true
3726
+ AutoCorrect: contextual
3618
3727
  VersionAdded: '0.28'
3619
- VersionChanged: '0.32'
3728
+ VersionChanged: '1.61'
3620
3729
  EnforcedStyle: both
3621
3730
  # empty - warn only on empty `else`
3622
3731
  # nil - warn on `else` with nil in it
@@ -3630,7 +3739,9 @@ Style/EmptyElse:
3630
3739
  Style/EmptyHeredoc:
3631
3740
  Description: 'Checks for using empty heredoc to reduce redundancy.'
3632
3741
  Enabled: pending
3742
+ AutoCorrect: contextual
3633
3743
  VersionAdded: '1.32'
3744
+ VersionChanged: '1.61'
3634
3745
 
3635
3746
  Style/EmptyLambdaParameter:
3636
3747
  Description: 'Omit parens for empty lambda parameters.'
@@ -3648,7 +3759,9 @@ Style/EmptyMethod:
3648
3759
  Description: 'Checks the formatting of empty method definitions.'
3649
3760
  StyleGuide: '#no-single-line-methods'
3650
3761
  Enabled: true
3762
+ AutoCorrect: contextual
3651
3763
  VersionAdded: '0.46'
3764
+ VersionChanged: '1.61'
3652
3765
  EnforcedStyle: compact
3653
3766
  SupportedStyles:
3654
3767
  - compact
@@ -3697,6 +3810,11 @@ Style/EvenOdd:
3697
3810
  VersionAdded: '0.12'
3698
3811
  VersionChanged: '0.29'
3699
3812
 
3813
+ Style/ExactRegexpMatch:
3814
+ Description: 'Checks for exact regexp match inside Regexp literals.'
3815
+ Enabled: pending
3816
+ VersionAdded: '1.51'
3817
+
3700
3818
  Style/ExpandPathArguments:
3701
3819
  Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`."
3702
3820
  Enabled: true
@@ -3737,7 +3855,6 @@ Style/FileEmpty:
3737
3855
  Prefer to use `File.empty?('path/to/file')` when checking if a file is empty.
3738
3856
  Enabled: pending
3739
3857
  Safe: false
3740
- SafeAutoCorrect: false
3741
3858
  VersionAdded: '1.48'
3742
3859
 
3743
3860
  Style/FileRead:
@@ -3876,8 +3993,9 @@ Style/HashConversion:
3876
3993
  Description: 'Avoid Hash[] in favor of ary.to_h or literal hashes.'
3877
3994
  StyleGuide: '#avoid-hash-constructor'
3878
3995
  Enabled: pending
3996
+ SafeAutoCorrect: false
3879
3997
  VersionAdded: '1.10'
3880
- VersionChanged: '1.11'
3998
+ VersionChanged: '1.55'
3881
3999
  AllowSplatArgument: true
3882
4000
 
3883
4001
  Style/HashEachMethods:
@@ -4059,7 +4177,9 @@ Style/InverseMethods:
4059
4177
  Style/InvertibleUnlessCondition:
4060
4178
  Description: 'Favor `if` with inverted condition over `unless`.'
4061
4179
  Enabled: false
4180
+ Safe: false
4062
4181
  VersionAdded: '1.44'
4182
+ VersionChanged: '1.50'
4063
4183
  # `InverseMethods` are methods that can be inverted in a `unless` condition.
4064
4184
  # The relationship of inverse methods needs to be defined in both directions.
4065
4185
  # Keys and values both need to be defined as symbols.
@@ -4076,14 +4196,6 @@ Style/InvertibleUnlessCondition:
4076
4196
  :none?: :any?
4077
4197
  :even?: :odd?
4078
4198
  :odd?: :even?
4079
- # `ActiveSupport` defines some common inverse methods. They are listed below,
4080
- # and not enabled by default.
4081
- # :present?: :blank?
4082
- # :blank?: :present?
4083
- # :include?: :exclude?
4084
- # :exclude?: :include?
4085
- # :one?: :many?
4086
- # :many?: :one?
4087
4199
 
4088
4200
  Style/IpAddresses:
4089
4201
  Description: "Don't include literal IP addresses in code."
@@ -4360,6 +4472,7 @@ Style/MultipleComparison:
4360
4472
  VersionAdded: '0.49'
4361
4473
  VersionChanged: '1.1'
4362
4474
  AllowMethodComparison: true
4475
+ ComparisonsThreshold: 2
4363
4476
 
4364
4477
  Style/MutableConstant:
4365
4478
  Description: 'Do not assign mutable objects to constants.'
@@ -4565,11 +4678,10 @@ Style/NumericPredicate:
4565
4678
  Checks for the use of predicate- or comparison methods for
4566
4679
  numeric comparisons.
4567
4680
  StyleGuide: '#predicate-methods'
4568
- Safe: false
4569
4681
  # This will change to a new method call which isn't guaranteed to be on the
4570
4682
  # object. Switching these methods has to be done with knowledge of the types
4571
4683
  # of the variables which rubocop doesn't have.
4572
- SafeAutoCorrect: false
4684
+ Safe: false
4573
4685
  Enabled: true
4574
4686
  VersionAdded: '0.42'
4575
4687
  VersionChanged: '0.59'
@@ -4615,7 +4727,9 @@ Style/OpenStructUse:
4615
4727
  - https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats
4616
4728
 
4617
4729
  Enabled: pending
4730
+ Safe: false
4618
4731
  VersionAdded: '1.23'
4732
+ VersionChanged: '1.51'
4619
4733
 
4620
4734
  Style/OperatorMethodCall:
4621
4735
  Description: 'Checks for redundant dot before operator method call.'
@@ -4625,6 +4739,7 @@ Style/OperatorMethodCall:
4625
4739
 
4626
4740
  Style/OptionHash:
4627
4741
  Description: "Don't use option hashes when you can use keyword arguments."
4742
+ StyleGuide: '#keyword-arguments-vs-option-hashes'
4628
4743
  Enabled: false
4629
4744
  VersionAdded: '0.33'
4630
4745
  VersionChanged: '0.34'
@@ -4747,8 +4862,9 @@ Style/RaiseArgs:
4747
4862
  Description: 'Checks the arguments passed to raise/fail.'
4748
4863
  StyleGuide: '#exception-class-messages'
4749
4864
  Enabled: true
4865
+ Safe: false
4750
4866
  VersionAdded: '0.14'
4751
- VersionChanged: '1.2'
4867
+ VersionChanged: '1.61'
4752
4868
  EnforcedStyle: exploded
4753
4869
  SupportedStyles:
4754
4870
  - compact # raise Exception.new(msg)
@@ -4768,12 +4884,16 @@ Style/RedundantArgument:
4768
4884
  Enabled: pending
4769
4885
  Safe: false
4770
4886
  VersionAdded: '1.4'
4771
- VersionChanged: '1.40'
4887
+ VersionChanged: '1.55'
4772
4888
  Methods:
4773
4889
  # Array#join
4774
4890
  join: ''
4775
4891
  # Array#sum
4776
4892
  sum: 0
4893
+ # Kernel.#exit
4894
+ exit: true
4895
+ # Kernel.#exit!
4896
+ exit!: false
4777
4897
  # String#split
4778
4898
  split: ' '
4779
4899
  # String#chomp
@@ -4781,6 +4901,11 @@ Style/RedundantArgument:
4781
4901
  # String#chomp!
4782
4902
  chomp!: "\n"
4783
4903
 
4904
+ Style/RedundantArrayConstructor:
4905
+ Description: 'Checks for the instantiation of array using redundant `Array` constructor.'
4906
+ Enabled: pending
4907
+ VersionAdded: '1.52'
4908
+
4784
4909
  Style/RedundantAssignment:
4785
4910
  Description: 'Checks for redundant assignment before returning.'
4786
4911
  Enabled: true
@@ -4813,6 +4938,11 @@ Style/RedundantConstantBase:
4813
4938
  Enabled: pending
4814
4939
  VersionAdded: '1.40'
4815
4940
 
4941
+ Style/RedundantCurrentDirectoryInPath:
4942
+ Description: 'Checks for uses a redundant current directory in path.'
4943
+ Enabled: pending
4944
+ VersionAdded: '1.53'
4945
+
4816
4946
  Style/RedundantDoubleSplatHashBraces:
4817
4947
  Description: 'Checks for redundant uses of double splat hash braces.'
4818
4948
  Enabled: pending
@@ -4835,7 +4965,7 @@ Style/RedundantFetchBlock:
4835
4965
  Description: >-
4836
4966
  Use `fetch(key, value)` instead of `fetch(key) { value }`
4837
4967
  when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant.
4838
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code'
4968
+ Reference: 'https://github.com/fastruby/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code'
4839
4969
  Enabled: true
4840
4970
  Safe: false
4841
4971
  # If enabled, this cop will autocorrect usages of
@@ -4852,6 +4982,15 @@ Style/RedundantFileExtensionInRequire:
4852
4982
  Enabled: true
4853
4983
  VersionAdded: '0.88'
4854
4984
 
4985
+ Style/RedundantFilterChain:
4986
+ Description: >-
4987
+ Identifies usages of `any?`, `empty?`, `none?` or `one?` predicate methods chained to
4988
+ `select`/`filter`/`find_all` and change them to use predicate method instead.
4989
+ Enabled: pending
4990
+ SafeAutoCorrect: false
4991
+ VersionAdded: '1.52'
4992
+ VersionChanged: '1.57'
4993
+
4855
4994
  Style/RedundantFreeze:
4856
4995
  Description: "Checks usages of Object#freeze on immutable objects."
4857
4996
  Enabled: true
@@ -4866,10 +5005,11 @@ Style/RedundantHeredocDelimiterQuotes:
4866
5005
  Style/RedundantInitialize:
4867
5006
  Description: 'Checks for redundant `initialize` methods.'
4868
5007
  Enabled: pending
5008
+ AutoCorrect: contextual
4869
5009
  Safe: false
4870
5010
  AllowComments: true
4871
5011
  VersionAdded: '1.27'
4872
- VersionChanged: '1.28'
5012
+ VersionChanged: '1.61'
4873
5013
 
4874
5014
  Style/RedundantInterpolation:
4875
5015
  Description: 'Checks for strings that are just an interpolated expression.'
@@ -4878,6 +5018,11 @@ Style/RedundantInterpolation:
4878
5018
  VersionAdded: '0.76'
4879
5019
  VersionChanged: '1.30'
4880
5020
 
5021
+ Style/RedundantLineContinuation:
5022
+ Description: 'Check for redundant line continuation.'
5023
+ Enabled: pending
5024
+ VersionAdded: '1.49'
5025
+
4881
5026
  Style/RedundantParentheses:
4882
5027
  Description: "Checks for parentheses that seem not to serve any purpose."
4883
5028
  Enabled: true
@@ -4889,11 +5034,21 @@ Style/RedundantPercentQ:
4889
5034
  Enabled: true
4890
5035
  VersionAdded: '0.76'
4891
5036
 
5037
+ Style/RedundantRegexpArgument:
5038
+ Description: 'Identifies places where argument can be replaced from a deterministic regexp to a string.'
5039
+ Enabled: pending
5040
+ VersionAdded: '1.53'
5041
+
4892
5042
  Style/RedundantRegexpCharacterClass:
4893
5043
  Description: 'Checks for unnecessary single-element Regexp character classes.'
4894
5044
  Enabled: true
4895
5045
  VersionAdded: '0.85'
4896
5046
 
5047
+ Style/RedundantRegexpConstructor:
5048
+ Description: 'Checks for the instantiation of regexp using redundant `Regexp.new` or `Regexp.compile`.'
5049
+ Enabled: pending
5050
+ VersionAdded: '1.52'
5051
+
4897
5052
  Style/RedundantRegexpEscape:
4898
5053
  Description: 'Checks for redundant escapes in Regexps.'
4899
5054
  Enabled: true
@@ -4996,6 +5151,15 @@ Style/ReturnNil:
4996
5151
  - return_nil
4997
5152
  VersionAdded: '0.50'
4998
5153
 
5154
+ Style/ReturnNilInPredicateMethodDefinition:
5155
+ Description: 'Checks if uses of `return` or `return nil` in predicate method definition.'
5156
+ StyleGuide: '#bool-methods-qmark'
5157
+ Enabled: pending
5158
+ SafeAutoCorrect: false
5159
+ AllowedMethods: []
5160
+ AllowedPatterns: []
5161
+ VersionAdded: '1.53'
5162
+
4999
5163
  Style/SafeNavigation:
5000
5164
  Description: >-
5001
5165
  Transforms usages of a method call safeguarded by
@@ -5023,7 +5187,7 @@ Style/Sample:
5023
5187
  Description: >-
5024
5188
  Use `sample` instead of `shuffle.first`,
5025
5189
  `shuffle.last`, and `shuffle[Integer]`.
5026
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
5190
+ Reference: 'https://github.com/fastruby/fast-ruby#arrayshufflefirst-vs-arraysample-code'
5027
5191
  Enabled: true
5028
5192
  VersionAdded: '0.30'
5029
5193
 
@@ -5088,6 +5252,12 @@ Style/SingleLineBlockParams:
5088
5252
  - acc
5089
5253
  - elem
5090
5254
 
5255
+ Style/SingleLineDoEndBlock:
5256
+ Description: 'Checks for single-line `do`...`end` blocks.'
5257
+ StyleGuide: '#single-line-do-end-block'
5258
+ Enabled: pending
5259
+ VersionAdded: '1.57'
5260
+
5091
5261
  Style/SingleLineMethods:
5092
5262
  Description: 'Avoid single-line methods.'
5093
5263
  StyleGuide: '#no-single-line-methods'
@@ -5097,7 +5267,8 @@ Style/SingleLineMethods:
5097
5267
  AllowIfMethodIsEmpty: true
5098
5268
 
5099
5269
  Style/SlicingWithRange:
5100
- Description: 'Checks array slicing is done with endless ranges when suitable.'
5270
+ Description: 'Checks array slicing is done with redundant, endless, and beginless ranges when suitable.'
5271
+ StyleGuide: '#slicing-with-ranges'
5101
5272
  Enabled: true
5102
5273
  VersionAdded: '0.83'
5103
5274
  Safe: false
@@ -5224,6 +5395,12 @@ Style/StructInheritance:
5224
5395
  VersionAdded: '0.29'
5225
5396
  VersionChanged: '1.20'
5226
5397
 
5398
+ Style/SuperWithArgsParentheses:
5399
+ Description: 'Use parentheses for `super` with arguments.'
5400
+ StyleGuide: '#super-with-args'
5401
+ Enabled: pending
5402
+ VersionAdded: '1.58'
5403
+
5227
5404
  Style/SwapValues:
5228
5405
  Description: 'Enforces the use of shorthand-style swapping of 2 variables.'
5229
5406
  StyleGuide: '#values-swapping'
@@ -5480,6 +5657,11 @@ Style/WordArray:
5480
5657
  # The regular expression `WordRegex` decides what is considered a word.
5481
5658
  WordRegex: !ruby/regexp '/\A(?:\p{Word}|\p{Word}-\p{Word}|\n|\t)+\z/'
5482
5659
 
5660
+ Style/YAMLFileRead:
5661
+ Description: 'Checks for the use of `YAML.load`, `YAML.safe_load`, and `YAML.parse` with `File.read` argument.'
5662
+ Enabled: pending
5663
+ VersionAdded: '1.53'
5664
+
5483
5665
  Style/YodaCondition:
5484
5666
  Description: 'Forbid or enforce yoda conditions.'
5485
5667
  Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions'