rubocop 1.27.0 → 1.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (680) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +8 -6
  4. data/config/default.yml +462 -69
  5. data/config/obsoletion.yml +35 -2
  6. data/exe/rubocop +15 -7
  7. data/lib/rubocop/arguments_env.rb +17 -0
  8. data/lib/rubocop/arguments_file.rb +17 -0
  9. data/lib/rubocop/cache_config.rb +29 -0
  10. data/lib/rubocop/cli/command/{auto_genenerate_config.rb → auto_generate_config.rb} +27 -5
  11. data/lib/rubocop/cli/command/execute_runner.rb +15 -10
  12. data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
  13. data/lib/rubocop/cli/command/show_cops.rb +1 -1
  14. data/lib/rubocop/cli/command/suggest_extensions.rb +62 -17
  15. data/lib/rubocop/cli.rb +57 -9
  16. data/lib/rubocop/comment_config.rb +60 -1
  17. data/lib/rubocop/config.rb +52 -20
  18. data/lib/rubocop/config_finder.rb +68 -0
  19. data/lib/rubocop/config_loader.rb +49 -69
  20. data/lib/rubocop/config_loader_resolver.rb +11 -12
  21. data/lib/rubocop/config_obsoletion/changed_parameter.rb +5 -0
  22. data/lib/rubocop/config_obsoletion/parameter_rule.rb +4 -0
  23. data/lib/rubocop/config_obsoletion.rb +9 -4
  24. data/lib/rubocop/config_validator.rb +22 -5
  25. data/lib/rubocop/cop/autocorrect_logic.rb +32 -14
  26. data/lib/rubocop/cop/badge.rb +10 -5
  27. data/lib/rubocop/cop/base.rb +119 -83
  28. data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
  29. data/lib/rubocop/cop/bundler/gem_comment.rb +2 -2
  30. data/lib/rubocop/cop/bundler/gem_filename.rb +5 -5
  31. data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -2
  32. data/lib/rubocop/cop/commissioner.rb +19 -6
  33. data/lib/rubocop/cop/cop.rb +54 -34
  34. data/lib/rubocop/cop/corrector.rb +33 -13
  35. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
  36. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
  37. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -4
  38. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  39. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +7 -5
  40. data/lib/rubocop/cop/correctors/if_then_corrector.rb +1 -1
  41. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
  42. data/lib/rubocop/cop/correctors/line_break_corrector.rb +8 -2
  43. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -10
  44. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +3 -8
  45. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +59 -1
  46. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +3 -3
  47. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
  48. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -1
  49. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +1 -1
  50. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +2 -2
  51. data/lib/rubocop/cop/gemspec/dependency_version.rb +154 -0
  52. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +92 -0
  53. data/lib/rubocop/cop/gemspec/development_dependencies.rb +107 -0
  54. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +4 -7
  55. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
  56. data/lib/rubocop/cop/gemspec/require_mfa.rb +21 -21
  57. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  58. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -2
  59. data/lib/rubocop/cop/generator.rb +6 -3
  60. data/lib/rubocop/cop/internal_affairs/cop_description.rb +98 -0
  61. data/lib/rubocop/cop/internal_affairs/create_empty_file.rb +37 -0
  62. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +1 -1
  63. data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +111 -0
  64. data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +1 -1
  65. data/lib/rubocop/cop/internal_affairs/lambda_or_proc.rb +46 -0
  66. data/lib/rubocop/cop/internal_affairs/location_expression.rb +37 -0
  67. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -1
  68. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +80 -0
  69. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +3 -7
  70. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -1
  71. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +69 -0
  72. data/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb +42 -0
  73. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -1
  74. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +12 -4
  75. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
  76. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -1
  77. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +66 -0
  78. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +62 -0
  79. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +60 -0
  80. data/lib/rubocop/cop/internal_affairs.rb +11 -0
  81. data/lib/rubocop/cop/layout/argument_alignment.rb +22 -1
  82. data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
  83. data/lib/rubocop/cop/layout/assignment_indentation.rb +1 -1
  84. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
  85. data/lib/rubocop/cop/layout/block_alignment.rb +17 -13
  86. data/lib/rubocop/cop/layout/block_end_newline.rb +32 -10
  87. data/lib/rubocop/cop/layout/case_indentation.rb +17 -1
  88. data/lib/rubocop/cop/layout/class_structure.rb +37 -27
  89. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +1 -1
  90. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +3 -7
  91. data/lib/rubocop/cop/layout/comment_indentation.rb +5 -3
  92. data/lib/rubocop/cop/layout/condition_position.rb +1 -1
  93. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  94. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  95. data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
  96. data/lib/rubocop/cop/layout/empty_comment.rb +4 -4
  97. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
  98. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
  99. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -2
  100. data/lib/rubocop/cop/layout/empty_lines.rb +4 -2
  101. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +7 -2
  102. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +1 -1
  103. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +25 -4
  104. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +1 -1
  105. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +7 -5
  106. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +10 -10
  107. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -1
  108. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +1 -1
  109. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +10 -10
  110. data/lib/rubocop/cop/layout/end_alignment.rb +10 -2
  111. data/lib/rubocop/cop/layout/end_of_line.rb +5 -5
  112. data/lib/rubocop/cop/layout/extra_spacing.rb +16 -7
  113. data/lib/rubocop/cop/layout/first_argument_indentation.rb +43 -32
  114. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +21 -14
  115. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +36 -9
  116. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +52 -13
  117. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +37 -2
  118. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +58 -9
  119. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +53 -20
  120. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
  121. data/lib/rubocop/cop/layout/hash_alignment.rb +2 -0
  122. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +11 -5
  123. data/lib/rubocop/cop/layout/heredoc_indentation.rb +9 -12
  124. data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -1
  125. data/lib/rubocop/cop/layout/indentation_style.rb +8 -3
  126. data/lib/rubocop/cop/layout/indentation_width.rb +16 -9
  127. data/lib/rubocop/cop/layout/initial_indentation.rb +3 -3
  128. data/lib/rubocop/cop/layout/leading_comment_space.rb +2 -2
  129. data/lib/rubocop/cop/layout/leading_empty_lines.rb +1 -1
  130. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +136 -0
  131. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +140 -0
  132. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
  133. data/lib/rubocop/cop/layout/line_length.rb +13 -6
  134. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +1 -1
  135. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +32 -2
  136. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +2 -2
  137. data/lib/rubocop/cop/layout/multiline_block_layout.rb +5 -3
  138. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +1 -1
  139. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +30 -2
  140. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +40 -3
  141. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
  142. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -5
  143. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  144. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +77 -0
  145. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +3 -3
  146. data/lib/rubocop/cop/layout/redundant_line_break.rb +10 -11
  147. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -3
  148. data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
  149. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  150. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
  151. data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -3
  152. data/lib/rubocop/cop/layout/space_around_operators.rb +2 -2
  153. data/lib/rubocop/cop/layout/space_before_block_braces.rb +5 -3
  154. data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -0
  155. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
  156. data/lib/rubocop/cop/layout/space_before_first_arg.rb +2 -2
  157. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +3 -3
  158. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +32 -30
  159. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -0
  160. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +35 -15
  161. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +30 -3
  162. data/lib/rubocop/cop/layout/space_inside_parens.rb +2 -2
  163. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +34 -0
  164. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +11 -7
  165. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +6 -5
  166. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -10
  167. data/lib/rubocop/cop/layout/trailing_whitespace.rb +15 -8
  168. data/lib/rubocop/cop/legacy/corrections_proxy.rb +1 -1
  169. data/lib/rubocop/cop/legacy/corrector.rb +1 -1
  170. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -1
  171. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +40 -8
  172. data/lib/rubocop/cop/lint/ambiguous_operator.rb +5 -1
  173. data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -1
  174. data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -5
  175. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +1 -1
  176. data/lib/rubocop/cop/lint/assignment_in_condition.rb +12 -2
  177. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
  178. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
  179. data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
  180. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +51 -0
  181. data/lib/rubocop/cop/lint/constant_resolution.rb +5 -1
  182. data/lib/rubocop/cop/lint/debugger.rb +28 -32
  183. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +67 -111
  184. data/lib/rubocop/cop/lint/deprecated_constants.rb +9 -2
  185. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +1 -1
  186. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
  187. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -3
  188. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  189. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +1 -1
  190. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
  191. data/lib/rubocop/cop/lint/duplicate_magic_comment.rb +73 -0
  192. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +122 -0
  193. data/lib/rubocop/cop/lint/duplicate_methods.rb +49 -19
  194. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +27 -10
  195. data/lib/rubocop/cop/lint/duplicate_require.rb +11 -2
  196. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +1 -1
  197. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  198. data/lib/rubocop/cop/lint/else_layout.rb +6 -10
  199. data/lib/rubocop/cop/lint/empty_block.rb +4 -8
  200. data/lib/rubocop/cop/lint/empty_class.rb +4 -2
  201. data/lib/rubocop/cop/lint/empty_conditional_body.rb +111 -3
  202. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  203. data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
  204. data/lib/rubocop/cop/lint/empty_file.rb +1 -1
  205. data/lib/rubocop/cop/lint/empty_in_pattern.rb +1 -1
  206. data/lib/rubocop/cop/lint/empty_interpolation.rb +2 -2
  207. data/lib/rubocop/cop/lint/empty_when.rb +1 -1
  208. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  209. data/lib/rubocop/cop/lint/erb_new_arguments.rb +12 -12
  210. data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
  211. data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
  212. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  213. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +14 -7
  214. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +16 -18
  215. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +2 -2
  216. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +6 -3
  217. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +2 -2
  218. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  219. data/lib/rubocop/cop/lint/interpolation_check.rb +6 -5
  220. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +3 -3
  221. data/lib/rubocop/cop/lint/literal_as_condition.rb +6 -1
  222. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +49 -3
  223. data/lib/rubocop/cop/lint/loop.rb +2 -2
  224. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +19 -4
  225. data/lib/rubocop/cop/lint/missing_super.rb +32 -3
  226. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -0
  227. data/lib/rubocop/cop/lint/nested_method_definition.rb +54 -10
  228. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  229. data/lib/rubocop/cop/lint/next_without_accumulator.rb +25 -6
  230. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +162 -0
  231. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +17 -5
  232. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
  233. data/lib/rubocop/cop/lint/number_conversion.rb +32 -10
  234. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +3 -3
  235. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +4 -3
  236. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +4 -5
  237. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +17 -2
  238. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +7 -2
  239. data/lib/rubocop/cop/lint/percent_string_array.rb +2 -2
  240. data/lib/rubocop/cop/lint/percent_symbol_array.rb +2 -2
  241. data/lib/rubocop/cop/lint/raise_exception.rb +2 -2
  242. data/lib/rubocop/cop/lint/rand_one.rb +1 -1
  243. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +55 -15
  244. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +8 -8
  245. data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +7 -0
  246. data/lib/rubocop/cop/lint/redundant_require_statement.rb +48 -7
  247. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +16 -3
  248. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +2 -2
  249. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +35 -15
  250. data/lib/rubocop/cop/lint/redundant_with_index.rb +15 -12
  251. data/lib/rubocop/cop/lint/redundant_with_object.rb +14 -13
  252. data/lib/rubocop/cop/lint/refinement_import_methods.rb +3 -2
  253. data/lib/rubocop/cop/lint/regexp_as_condition.rb +9 -3
  254. data/lib/rubocop/cop/lint/require_parentheses.rb +4 -2
  255. data/lib/rubocop/cop/lint/require_range_parentheses.rb +57 -0
  256. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  257. data/lib/rubocop/cop/lint/rescue_type.rb +3 -3
  258. data/lib/rubocop/cop/lint/return_in_void_context.rb +6 -18
  259. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +44 -8
  260. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +2 -2
  261. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
  262. data/lib/rubocop/cop/lint/script_permission.rb +2 -2
  263. data/lib/rubocop/cop/lint/self_assignment.rb +1 -1
  264. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -4
  265. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -1
  266. data/lib/rubocop/cop/lint/shadowed_exception.rb +17 -12
  267. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +29 -4
  268. data/lib/rubocop/cop/lint/struct_new_override.rb +3 -3
  269. data/lib/rubocop/cop/lint/suppressed_exception.rb +2 -2
  270. data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
  271. data/lib/rubocop/cop/lint/syntax.rb +5 -1
  272. data/lib/rubocop/cop/lint/to_enum_arguments.rb +14 -4
  273. data/lib/rubocop/cop/lint/to_json.rb +1 -1
  274. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +24 -10
  275. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +2 -2
  276. data/lib/rubocop/cop/lint/triple_quotes.rb +1 -1
  277. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
  278. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +1 -1
  279. data/lib/rubocop/cop/lint/unified_integer.rb +3 -1
  280. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  281. data/lib/rubocop/cop/lint/unreachable_loop.rb +15 -9
  282. data/lib/rubocop/cop/lint/unused_block_argument.rb +1 -1
  283. data/lib/rubocop/cop/lint/unused_method_argument.rb +7 -2
  284. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  285. data/lib/rubocop/cop/lint/uri_regexp.rb +1 -1
  286. data/lib/rubocop/cop/lint/useless_access_modifier.rb +18 -13
  287. data/lib/rubocop/cop/lint/useless_assignment.rb +57 -2
  288. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +2 -3
  289. data/lib/rubocop/cop/lint/useless_method_definition.rb +13 -5
  290. data/lib/rubocop/cop/lint/useless_rescue.rb +89 -0
  291. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +16 -6
  292. data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -2
  293. data/lib/rubocop/cop/lint/useless_times.rb +3 -3
  294. data/lib/rubocop/cop/lint/void.rb +92 -21
  295. data/lib/rubocop/cop/metrics/abc_size.rb +5 -3
  296. data/lib/rubocop/cop/metrics/block_length.rb +17 -12
  297. data/lib/rubocop/cop/metrics/block_nesting.rb +3 -3
  298. data/lib/rubocop/cop/metrics/class_length.rb +11 -5
  299. data/lib/rubocop/cop/metrics/collection_literal_length.rb +76 -0
  300. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -2
  301. data/lib/rubocop/cop/metrics/method_length.rb +18 -12
  302. data/lib/rubocop/cop/metrics/module_length.rb +10 -5
  303. data/lib/rubocop/cop/metrics/parameter_lists.rb +28 -1
  304. data/lib/rubocop/cop/metrics/perceived_complexity.rb +2 -2
  305. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  306. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +29 -7
  307. data/lib/rubocop/cop/migration/department_name.rb +1 -1
  308. data/lib/rubocop/cop/mixin/alignment.rb +2 -2
  309. data/lib/rubocop/cop/mixin/allowed_identifiers.rb +2 -2
  310. data/lib/rubocop/cop/mixin/allowed_methods.rb +23 -2
  311. data/lib/rubocop/cop/mixin/allowed_pattern.rb +56 -0
  312. data/lib/rubocop/cop/mixin/annotation_comment.rb +14 -7
  313. data/lib/rubocop/cop/mixin/check_line_breakable.rb +5 -1
  314. data/lib/rubocop/cop/mixin/code_length.rb +1 -1
  315. data/lib/rubocop/cop/mixin/comments_help.rb +29 -5
  316. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +21 -9
  317. data/lib/rubocop/cop/mixin/def_node.rb +2 -7
  318. data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
  319. data/lib/rubocop/cop/mixin/duplication.rb +1 -1
  320. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -1
  321. data/lib/rubocop/cop/mixin/first_element_line_break.rb +11 -7
  322. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +4 -0
  323. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +1 -1
  324. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +157 -12
  325. data/lib/rubocop/cop/mixin/hash_transform_method.rb +13 -9
  326. data/lib/rubocop/cop/mixin/line_length_help.rb +11 -2
  327. data/lib/rubocop/cop/mixin/method_complexity.rb +13 -16
  328. data/lib/rubocop/cop/mixin/min_branches_count.rb +40 -0
  329. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +34 -12
  330. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +5 -6
  331. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
  332. data/lib/rubocop/cop/mixin/percent_array.rb +58 -1
  333. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
  334. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +2 -2
  335. data/lib/rubocop/cop/mixin/range_help.rb +28 -7
  336. data/lib/rubocop/cop/mixin/require_library.rb +2 -0
  337. data/lib/rubocop/cop/mixin/rescue_node.rb +5 -3
  338. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
  339. data/lib/rubocop/cop/mixin/statement_modifier.rb +19 -4
  340. data/lib/rubocop/cop/mixin/string_help.rb +1 -1
  341. data/lib/rubocop/cop/mixin/surrounding_space.rb +13 -11
  342. data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -3
  343. data/lib/rubocop/cop/mixin/visibility_help.rb +40 -5
  344. data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
  345. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -2
  346. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  347. data/lib/rubocop/cop/naming/block_forwarding.rb +8 -4
  348. data/lib/rubocop/cop/naming/block_parameter_name.rb +2 -2
  349. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +4 -2
  350. data/lib/rubocop/cop/naming/constant_name.rb +4 -4
  351. data/lib/rubocop/cop/naming/file_name.rb +2 -2
  352. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
  353. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  354. data/lib/rubocop/cop/naming/inclusive_language.rb +31 -8
  355. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +23 -8
  356. data/lib/rubocop/cop/naming/method_name.rb +9 -9
  357. data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
  358. data/lib/rubocop/cop/naming/predicate_name.rb +33 -4
  359. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +13 -5
  360. data/lib/rubocop/cop/naming/variable_name.rb +10 -1
  361. data/lib/rubocop/cop/naming/variable_number.rb +28 -18
  362. data/lib/rubocop/cop/offense.rb +1 -1
  363. data/lib/rubocop/cop/registry.rb +73 -45
  364. data/lib/rubocop/cop/security/compound_hash.rb +106 -0
  365. data/lib/rubocop/cop/security/eval.rb +1 -1
  366. data/lib/rubocop/cop/security/json_load.rb +1 -1
  367. data/lib/rubocop/cop/security/marshal_load.rb +1 -1
  368. data/lib/rubocop/cop/security/open.rb +1 -1
  369. data/lib/rubocop/cop/security/yaml_load.rb +2 -2
  370. data/lib/rubocop/cop/style/access_modifier_declarations.rb +92 -3
  371. data/lib/rubocop/cop/style/accessor_grouping.rb +49 -23
  372. data/lib/rubocop/cop/style/alias.rb +13 -5
  373. data/lib/rubocop/cop/style/and_or.rb +12 -12
  374. data/lib/rubocop/cop/style/arguments_forwarding.rb +7 -6
  375. data/lib/rubocop/cop/style/array_coercion.rb +1 -1
  376. data/lib/rubocop/cop/style/array_intersect.rb +111 -0
  377. data/lib/rubocop/cop/style/array_join.rb +1 -1
  378. data/lib/rubocop/cop/style/ascii_comments.rb +2 -2
  379. data/lib/rubocop/cop/style/attr.rb +12 -2
  380. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +1 -1
  381. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  382. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -1
  383. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
  384. data/lib/rubocop/cop/style/block_comments.rb +3 -3
  385. data/lib/rubocop/cop/style/block_delimiters.rb +52 -11
  386. data/lib/rubocop/cop/style/case_equality.rb +41 -11
  387. data/lib/rubocop/cop/style/case_like_if.rb +22 -5
  388. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  389. data/lib/rubocop/cop/style/class_and_module_children.rb +9 -16
  390. data/lib/rubocop/cop/style/class_check.rb +1 -1
  391. data/lib/rubocop/cop/style/class_equality_comparison.rb +95 -13
  392. data/lib/rubocop/cop/style/class_methods.rb +1 -1
  393. data/lib/rubocop/cop/style/class_methods_definitions.rb +3 -2
  394. data/lib/rubocop/cop/style/class_vars.rb +1 -1
  395. data/lib/rubocop/cop/style/collection_compact.rb +25 -9
  396. data/lib/rubocop/cop/style/collection_methods.rb +3 -1
  397. data/lib/rubocop/cop/style/colon_method_call.rb +2 -2
  398. data/lib/rubocop/cop/style/colon_method_definition.rb +1 -1
  399. data/lib/rubocop/cop/style/combinable_loops.rb +30 -8
  400. data/lib/rubocop/cop/style/command_literal.rb +2 -2
  401. data/lib/rubocop/cop/style/comment_annotation.rb +2 -2
  402. data/lib/rubocop/cop/style/commented_keyword.rb +5 -5
  403. data/lib/rubocop/cop/style/comparable_clamp.rb +125 -0
  404. data/lib/rubocop/cop/style/concat_array_literals.rb +94 -0
  405. data/lib/rubocop/cop/style/conditional_assignment.rb +10 -15
  406. data/lib/rubocop/cop/style/constant_visibility.rb +1 -1
  407. data/lib/rubocop/cop/style/copyright.rb +6 -3
  408. data/lib/rubocop/cop/style/data_inheritance.rb +75 -0
  409. data/lib/rubocop/cop/style/date_time.rb +2 -2
  410. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -1
  411. data/lib/rubocop/cop/style/dir.rb +4 -1
  412. data/lib/rubocop/cop/style/dir_empty.rb +60 -0
  413. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
  414. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +2 -2
  415. data/lib/rubocop/cop/style/documentation.rb +23 -11
  416. data/lib/rubocop/cop/style/documentation_method.rb +11 -5
  417. data/lib/rubocop/cop/style/double_negation.rb +31 -3
  418. data/lib/rubocop/cop/style/each_for_simple_loop.rb +42 -7
  419. data/lib/rubocop/cop/style/each_with_object.rb +41 -10
  420. data/lib/rubocop/cop/style/empty_block_parameter.rb +3 -3
  421. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -2
  422. data/lib/rubocop/cop/style/empty_else.rb +40 -3
  423. data/lib/rubocop/cop/style/empty_heredoc.rb +73 -0
  424. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +3 -3
  425. data/lib/rubocop/cop/style/empty_literal.rb +2 -2
  426. data/lib/rubocop/cop/style/empty_method.rb +18 -3
  427. data/lib/rubocop/cop/style/encoding.rb +2 -2
  428. data/lib/rubocop/cop/style/end_block.rb +1 -1
  429. data/lib/rubocop/cop/style/endless_method.rb +2 -2
  430. data/lib/rubocop/cop/style/env_home.rb +56 -0
  431. data/lib/rubocop/cop/style/eval_with_location.rb +5 -5
  432. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  433. data/lib/rubocop/cop/style/exact_regexp_match.rb +62 -0
  434. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -1
  435. data/lib/rubocop/cop/style/explicit_block_argument.rb +7 -3
  436. data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
  437. data/lib/rubocop/cop/style/fetch_env_var.rb +132 -0
  438. data/lib/rubocop/cop/style/file_empty.rb +71 -0
  439. data/lib/rubocop/cop/style/file_read.rb +1 -1
  440. data/lib/rubocop/cop/style/file_write.rb +1 -1
  441. data/lib/rubocop/cop/style/float_division.rb +1 -1
  442. data/lib/rubocop/cop/style/for.rb +3 -1
  443. data/lib/rubocop/cop/style/format_string.rb +1 -1
  444. data/lib/rubocop/cop/style/format_string_token.rb +73 -23
  445. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +7 -4
  446. data/lib/rubocop/cop/style/global_std_stream.rb +1 -1
  447. data/lib/rubocop/cop/style/global_vars.rb +1 -1
  448. data/lib/rubocop/cop/style/guard_clause.rb +161 -25
  449. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +2 -1
  450. data/lib/rubocop/cop/style/hash_conversion.rb +1 -1
  451. data/lib/rubocop/cop/style/hash_each_methods.rb +49 -13
  452. data/lib/rubocop/cop/style/hash_except.rb +101 -10
  453. data/lib/rubocop/cop/style/hash_like_case.rb +4 -10
  454. data/lib/rubocop/cop/style/hash_syntax.rb +29 -5
  455. data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -1
  456. data/lib/rubocop/cop/style/hash_transform_values.rb +4 -1
  457. data/lib/rubocop/cop/style/identical_conditional_branches.rb +19 -4
  458. data/lib/rubocop/cop/style/if_inside_else.rb +6 -0
  459. data/lib/rubocop/cop/style/if_unless_modifier.rb +117 -20
  460. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +31 -4
  461. data/lib/rubocop/cop/style/if_with_semicolon.rb +4 -4
  462. data/lib/rubocop/cop/style/implicit_runtime_error.rb +3 -3
  463. data/lib/rubocop/cop/style/in_pattern_then.rb +1 -1
  464. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  465. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  466. data/lib/rubocop/cop/style/inverse_methods.rb +17 -13
  467. data/lib/rubocop/cop/style/invertible_unless_condition.rb +118 -0
  468. data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
  469. data/lib/rubocop/cop/style/keyword_parameters_order.rb +2 -2
  470. data/lib/rubocop/cop/style/lambda.rb +1 -1
  471. data/lib/rubocop/cop/style/lambda_call.rb +1 -1
  472. data/lib/rubocop/cop/style/line_end_concatenation.rb +6 -3
  473. data/lib/rubocop/cop/style/magic_comment_format.rb +307 -0
  474. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +136 -0
  475. data/lib/rubocop/cop/style/map_to_hash.rb +7 -4
  476. data/lib/rubocop/cop/style/map_to_set.rb +64 -0
  477. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +42 -26
  478. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +6 -2
  479. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +52 -45
  480. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +22 -3
  481. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +5 -2
  482. data/lib/rubocop/cop/style/method_def_parentheses.rb +12 -5
  483. data/lib/rubocop/cop/style/min_max.rb +4 -4
  484. data/lib/rubocop/cop/style/min_max_comparison.rb +83 -0
  485. data/lib/rubocop/cop/style/missing_else.rb +37 -25
  486. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
  487. data/lib/rubocop/cop/style/mixin_grouping.rb +6 -6
  488. data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
  489. data/lib/rubocop/cop/style/module_function.rb +30 -8
  490. data/lib/rubocop/cop/style/multiline_block_chain.rb +4 -2
  491. data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -6
  492. data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
  493. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +3 -5
  494. data/lib/rubocop/cop/style/multiline_memoization.rb +3 -3
  495. data/lib/rubocop/cop/style/multiline_method_signature.rb +9 -6
  496. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +52 -11
  497. data/lib/rubocop/cop/style/multiline_when_then.rb +2 -4
  498. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  499. data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
  500. data/lib/rubocop/cop/style/negated_if_else_condition.rb +18 -11
  501. data/lib/rubocop/cop/style/nested_file_dirname.rb +1 -1
  502. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  503. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -2
  504. data/lib/rubocop/cop/style/nested_ternary_operator.rb +20 -8
  505. data/lib/rubocop/cop/style/next.rb +4 -6
  506. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  507. data/lib/rubocop/cop/style/nil_lambda.rb +5 -5
  508. data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
  509. data/lib/rubocop/cop/style/not.rb +2 -2
  510. data/lib/rubocop/cop/style/numbered_parameters.rb +1 -1
  511. data/lib/rubocop/cop/style/numbered_parameters_limit.rb +12 -4
  512. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  513. data/lib/rubocop/cop/style/numeric_literals.rb +16 -1
  514. data/lib/rubocop/cop/style/numeric_predicate.rb +53 -11
  515. data/lib/rubocop/cop/style/object_then.rb +74 -0
  516. data/lib/rubocop/cop/style/one_line_conditional.rb +4 -7
  517. data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
  518. data/lib/rubocop/cop/style/operator_method_call.rb +67 -0
  519. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  520. data/lib/rubocop/cop/style/optional_arguments.rb +2 -2
  521. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +2 -2
  522. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  523. data/lib/rubocop/cop/style/parallel_assignment.rb +29 -19
  524. data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -1
  525. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +3 -4
  526. data/lib/rubocop/cop/style/percent_q_literals.rb +2 -2
  527. data/lib/rubocop/cop/style/perl_backrefs.rb +23 -2
  528. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  529. data/lib/rubocop/cop/style/proc.rb +5 -2
  530. data/lib/rubocop/cop/style/quoted_symbols.rb +2 -2
  531. data/lib/rubocop/cop/style/raise_args.rb +5 -2
  532. data/lib/rubocop/cop/style/random_with_offset.rb +1 -1
  533. data/lib/rubocop/cop/style/redundant_argument.rb +5 -2
  534. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
  535. data/lib/rubocop/cop/style/redundant_begin.rb +20 -6
  536. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -1
  537. data/lib/rubocop/cop/style/redundant_condition.rb +148 -14
  538. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -5
  539. data/lib/rubocop/cop/style/redundant_constant_base.rb +85 -0
  540. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +45 -0
  541. data/lib/rubocop/cop/style/redundant_each.rb +116 -0
  542. data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
  543. data/lib/rubocop/cop/style/redundant_fetch_block.rb +7 -5
  544. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  545. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  546. data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +58 -0
  547. data/lib/rubocop/cop/style/redundant_initialize.rb +41 -4
  548. data/lib/rubocop/cop/style/redundant_interpolation.rb +24 -3
  549. data/lib/rubocop/cop/style/redundant_line_continuation.rb +183 -0
  550. data/lib/rubocop/cop/style/redundant_parentheses.rb +23 -25
  551. data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
  552. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +15 -4
  553. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +23 -6
  554. data/lib/rubocop/cop/style/redundant_return.rb +9 -2
  555. data/lib/rubocop/cop/style/redundant_self.rb +3 -1
  556. data/lib/rubocop/cop/style/redundant_self_assignment.rb +3 -4
  557. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +1 -1
  558. data/lib/rubocop/cop/style/redundant_sort.rb +25 -10
  559. data/lib/rubocop/cop/style/redundant_sort_by.rb +25 -9
  560. data/lib/rubocop/cop/style/redundant_string_escape.rb +183 -0
  561. data/lib/rubocop/cop/style/regexp_literal.rb +11 -2
  562. data/lib/rubocop/cop/style/require_order.rb +138 -0
  563. data/lib/rubocop/cop/style/rescue_modifier.rb +2 -2
  564. data/lib/rubocop/cop/style/rescue_standard_error.rb +15 -15
  565. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  566. data/lib/rubocop/cop/style/safe_navigation.rb +46 -12
  567. data/lib/rubocop/cop/style/sample.rb +1 -1
  568. data/lib/rubocop/cop/style/select_by_regexp.rb +14 -6
  569. data/lib/rubocop/cop/style/self_assignment.rb +3 -3
  570. data/lib/rubocop/cop/style/semicolon.rb +64 -6
  571. data/lib/rubocop/cop/style/send.rb +1 -1
  572. data/lib/rubocop/cop/style/signal_exception.rb +9 -7
  573. data/lib/rubocop/cop/style/single_argument_dig.rb +5 -0
  574. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
  575. data/lib/rubocop/cop/style/single_line_methods.rb +2 -2
  576. data/lib/rubocop/cop/style/slicing_with_range.rb +2 -2
  577. data/lib/rubocop/cop/style/sole_nested_conditional.rb +52 -24
  578. data/lib/rubocop/cop/style/special_global_vars.rb +66 -8
  579. data/lib/rubocop/cop/style/static_class.rb +33 -2
  580. data/lib/rubocop/cop/style/stderr_puts.rb +2 -2
  581. data/lib/rubocop/cop/style/string_chars.rb +1 -1
  582. data/lib/rubocop/cop/style/string_concatenation.rb +6 -7
  583. data/lib/rubocop/cop/style/string_hash_keys.rb +5 -2
  584. data/lib/rubocop/cop/style/string_literals.rb +1 -5
  585. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -1
  586. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  587. data/lib/rubocop/cop/style/strip.rb +1 -1
  588. data/lib/rubocop/cop/style/struct_inheritance.rb +5 -5
  589. data/lib/rubocop/cop/style/swap_values.rb +2 -2
  590. data/lib/rubocop/cop/style/symbol_array.rb +12 -7
  591. data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
  592. data/lib/rubocop/cop/style/symbol_proc.rb +68 -12
  593. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -14
  594. data/lib/rubocop/cop/style/top_level_method_definition.rb +3 -1
  595. data/lib/rubocop/cop/style/trailing_body_on_class.rb +2 -1
  596. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -1
  597. data/lib/rubocop/cop/style/trailing_body_on_module.rb +1 -1
  598. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +5 -5
  599. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +1 -1
  600. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -2
  601. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +1 -1
  602. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
  603. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +2 -2
  604. data/lib/rubocop/cop/style/trivial_accessors.rb +12 -10
  605. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  606. data/lib/rubocop/cop/style/unless_logical_operators.rb +2 -1
  607. data/lib/rubocop/cop/style/unpack_first.rb +8 -5
  608. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  609. data/lib/rubocop/cop/style/when_then.rb +1 -1
  610. data/lib/rubocop/cop/style/word_array.rb +60 -6
  611. data/lib/rubocop/cop/style/yoda_condition.rb +14 -7
  612. data/lib/rubocop/cop/style/yoda_expression.rb +90 -0
  613. data/lib/rubocop/cop/style/zero_length_predicate.rb +41 -20
  614. data/lib/rubocop/cop/team.rb +65 -58
  615. data/lib/rubocop/cop/util.rb +44 -8
  616. data/lib/rubocop/cop/variable_force/assignment.rb +5 -1
  617. data/lib/rubocop/cop/variable_force/branch.rb +1 -1
  618. data/lib/rubocop/cop/variable_force/scope.rb +3 -3
  619. data/lib/rubocop/cop/variable_force/variable.rb +5 -3
  620. data/lib/rubocop/cop/variable_force/variable_table.rb +6 -4
  621. data/lib/rubocop/cop/variable_force.rb +18 -30
  622. data/lib/rubocop/cops_documentation_generator.rb +64 -17
  623. data/lib/rubocop/directive_comment.rb +4 -4
  624. data/lib/rubocop/ext/comment.rb +18 -0
  625. data/lib/rubocop/ext/processed_source.rb +2 -0
  626. data/lib/rubocop/ext/range.rb +15 -0
  627. data/lib/rubocop/ext/regexp_node.rb +1 -1
  628. data/lib/rubocop/ext/regexp_parser.rb +1 -1
  629. data/lib/rubocop/feature_loader.rb +94 -0
  630. data/lib/rubocop/file_patterns.rb +43 -0
  631. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  632. data/lib/rubocop/formatter/disabled_config_formatter.rb +36 -16
  633. data/lib/rubocop/formatter/formatter_set.rb +20 -18
  634. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +15 -2
  635. data/lib/rubocop/formatter/html_formatter.rb +6 -14
  636. data/lib/rubocop/formatter/junit_formatter.rb +4 -1
  637. data/lib/rubocop/formatter/markdown_formatter.rb +78 -0
  638. data/lib/rubocop/formatter/offense_count_formatter.rb +10 -5
  639. data/lib/rubocop/formatter/simple_text_formatter.rb +9 -8
  640. data/lib/rubocop/formatter/tap_formatter.rb +1 -1
  641. data/lib/rubocop/formatter/worst_offenders_formatter.rb +6 -3
  642. data/lib/rubocop/formatter.rb +34 -0
  643. data/lib/rubocop/magic_comment.rb +31 -5
  644. data/lib/rubocop/options.rb +154 -49
  645. data/lib/rubocop/path_util.rb +50 -22
  646. data/lib/rubocop/rake_task.rb +34 -9
  647. data/lib/rubocop/result_cache.rb +28 -25
  648. data/lib/rubocop/rspec/cop_helper.rb +27 -4
  649. data/lib/rubocop/rspec/expect_offense.rb +9 -7
  650. data/lib/rubocop/rspec/parallel_formatter.rb +1 -1
  651. data/lib/rubocop/rspec/shared_contexts.rb +48 -11
  652. data/lib/rubocop/rspec/support.rb +17 -2
  653. data/lib/rubocop/runner.rb +106 -25
  654. data/lib/rubocop/server/cache.rb +155 -0
  655. data/lib/rubocop/server/cli.rb +147 -0
  656. data/lib/rubocop/server/client_command/base.rb +44 -0
  657. data/lib/rubocop/server/client_command/exec.rb +64 -0
  658. data/lib/rubocop/server/client_command/restart.rb +25 -0
  659. data/lib/rubocop/server/client_command/start.rb +48 -0
  660. data/lib/rubocop/server/client_command/status.rb +28 -0
  661. data/lib/rubocop/server/client_command/stop.rb +31 -0
  662. data/lib/rubocop/server/client_command.rb +26 -0
  663. data/lib/rubocop/server/core.rb +111 -0
  664. data/lib/rubocop/server/errors.rb +23 -0
  665. data/lib/rubocop/server/helper.rb +34 -0
  666. data/lib/rubocop/server/server_command/base.rb +50 -0
  667. data/lib/rubocop/server/server_command/exec.rb +34 -0
  668. data/lib/rubocop/server/server_command/stop.rb +24 -0
  669. data/lib/rubocop/server/server_command.rb +21 -0
  670. data/lib/rubocop/server/socket_reader.rb +69 -0
  671. data/lib/rubocop/server.rb +53 -0
  672. data/lib/rubocop/string_interpreter.rb +4 -4
  673. data/lib/rubocop/target_finder.rb +1 -1
  674. data/lib/rubocop/target_ruby.rb +16 -8
  675. data/lib/rubocop/version.rb +24 -11
  676. data/lib/rubocop.rb +59 -35
  677. metadata +114 -37
  678. data/lib/rubocop/cop/gemspec/date_assignment.rb +0 -49
  679. data/lib/rubocop/cop/mixin/ignored_methods.rb +0 -52
  680. data/lib/rubocop/cop/mixin/ignored_pattern.rb +0 -29
data/config/default.yml CHANGED
@@ -140,7 +140,7 @@ AllCops:
140
140
  # or gems.locked file. (Although the Ruby version is specified in the Gemfile
141
141
  # or gems.rb file, RuboCop reads the final value from the lock file.) If the
142
142
  # Ruby version is still unresolved, RuboCop will use the oldest officially
143
- # supported Ruby version (currently Ruby 2.5).
143
+ # supported Ruby version (currently Ruby 2.7).
144
144
  TargetRubyVersion: ~
145
145
  # Determines if a notification for extension libraries should be shown when
146
146
  # rubocop is run. Keys are the name of the extension, and values are an array
@@ -153,13 +153,19 @@ AllCops:
153
153
  rubocop-sequel: [sequel]
154
154
  rubocop-rake: [rake]
155
155
  rubocop-graphql: [graphql]
156
+ rubocop-capybara: [capybara]
157
+ rubocop-factory_bot: [factory_bot, factory_bot_rails]
158
+ # Enable/Disable checking the methods extended by Active Support.
159
+ ActiveSupportExtensionsEnabled: false
156
160
 
157
161
  #################### Bundler ###############################
158
162
 
159
163
  Bundler/DuplicatedGem:
160
164
  Description: 'Checks for duplicate gem entries in Gemfile.'
161
165
  Enabled: true
166
+ Severity: warning
162
167
  VersionAdded: '0.46'
168
+ VersionChanged: '1.40'
163
169
  Include:
164
170
  - '**/*.gemfile'
165
171
  - '**/Gemfile'
@@ -211,7 +217,9 @@ Bundler/InsecureProtocolSource:
211
217
  because HTTP requests are insecure. Please change your source to
212
218
  'https://rubygems.org' if possible, or 'http://rubygems.org' if not.
213
219
  Enabled: true
220
+ Severity: warning
214
221
  VersionAdded: '0.50'
222
+ VersionChanged: '1.40'
215
223
  AllowHttpProtocol: true
216
224
  Include:
217
225
  - '**/*.gemfile'
@@ -235,17 +243,48 @@ Bundler/OrderedGems:
235
243
 
236
244
  #################### Gemspec ###############################
237
245
 
238
- Gemspec/DateAssignment:
239
- Description: 'Checks that `date =` is not used in gemspec file, it is set automatically when the gem is packaged.'
246
+ Gemspec/DependencyVersion:
247
+ Description: 'Requires or forbids specifying gem dependency versions.'
248
+ Enabled: false
249
+ VersionAdded: '1.29'
250
+ EnforcedStyle: 'required'
251
+ SupportedStyles:
252
+ - 'required'
253
+ - 'forbidden'
254
+ Include:
255
+ - '**/*.gemspec'
256
+ AllowedGems: []
257
+
258
+ Gemspec/DeprecatedAttributeAssignment:
259
+ Description: Checks that deprecated attribute assignments are not set in a gemspec file.
240
260
  Enabled: pending
241
- VersionAdded: '1.10'
261
+ Severity: warning
262
+ VersionAdded: '1.30'
263
+ VersionChanged: '1.40'
242
264
  Include:
243
265
  - '**/*.gemspec'
244
266
 
267
+ Gemspec/DevelopmentDependencies:
268
+ Description: Checks that development dependencies are specified in Gemfile rather than gemspec.
269
+ Enabled: pending
270
+ VersionAdded: '1.44'
271
+ EnforcedStyle: Gemfile
272
+ SupportedStyles:
273
+ - Gemfile
274
+ - gems.rb
275
+ - gemspec
276
+ AllowedGems: []
277
+ Include:
278
+ - '**/*.gemspec'
279
+ - '**/Gemfile'
280
+ - '**/gems.rb'
281
+
245
282
  Gemspec/DuplicatedAssignment:
246
283
  Description: 'An attribute assignment method calls should be listed only once in a gemspec.'
247
284
  Enabled: true
285
+ Severity: warning
248
286
  VersionAdded: '0.52'
287
+ VersionChanged: '1.40'
249
288
  Include:
250
289
  - '**/*.gemspec'
251
290
 
@@ -264,7 +303,9 @@ Gemspec/OrderedDependencies:
264
303
  Gemspec/RequireMFA:
265
304
  Description: 'Checks that the gemspec has metadata to require Multi-Factor Authentication from RubyGems.'
266
305
  Enabled: pending
306
+ Severity: warning
267
307
  VersionAdded: '1.23'
308
+ VersionChanged: '1.40'
268
309
  Reference:
269
310
  - https://guides.rubygems.org/mfa-requirement-opt-in/
270
311
  Include:
@@ -273,8 +314,9 @@ Gemspec/RequireMFA:
273
314
  Gemspec/RequiredRubyVersion:
274
315
  Description: 'Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.'
275
316
  Enabled: true
317
+ Severity: warning
276
318
  VersionAdded: '0.52'
277
- VersionChanged: '1.22'
319
+ VersionChanged: '1.40'
278
320
  Include:
279
321
  - '**/*.gemspec'
280
322
 
@@ -282,7 +324,9 @@ Gemspec/RubyVersionGlobalsUsage:
282
324
  Description: Checks usage of RUBY_VERSION in gemspec.
283
325
  StyleGuide: '#no-ruby-version-in-the-gemspec'
284
326
  Enabled: true
327
+ Severity: warning
285
328
  VersionAdded: '0.72'
329
+ VersionChanged: '1.40'
286
330
  Include:
287
331
  - '**/*.gemspec'
288
332
 
@@ -365,7 +409,7 @@ Layout/AssignmentIndentation:
365
409
  right-hand-side of a multi-line assignment.
366
410
  Enabled: true
367
411
  VersionAdded: '0.49'
368
- VersionChanged: '0.77'
412
+ VersionChanged: '1.45'
369
413
  # By default the indentation width from `Layout/IndentationWidth` is used,
370
414
  # but it can be overridden by setting this parameter.
371
415
  IndentationWidth: ~
@@ -734,6 +778,7 @@ Layout/FirstArrayElementLineBreak:
734
778
  multi-line array.
735
779
  Enabled: false
736
780
  VersionAdded: '0.49'
781
+ AllowMultilineFinalElement: false
737
782
 
738
783
  Layout/FirstHashElementIndentation:
739
784
  Description: 'Checks the indentation of the first key in a hash literal.'
@@ -766,6 +811,7 @@ Layout/FirstHashElementLineBreak:
766
811
  multi-line hash.
767
812
  Enabled: false
768
813
  VersionAdded: '0.49'
814
+ AllowMultilineFinalElement: false
769
815
 
770
816
  Layout/FirstMethodArgumentLineBreak:
771
817
  Description: >-
@@ -773,6 +819,7 @@ Layout/FirstMethodArgumentLineBreak:
773
819
  multi-line method call.
774
820
  Enabled: false
775
821
  VersionAdded: '0.49'
822
+ AllowMultilineFinalElement: false
776
823
 
777
824
  Layout/FirstMethodParameterLineBreak:
778
825
  Description: >-
@@ -780,6 +827,7 @@ Layout/FirstMethodParameterLineBreak:
780
827
  multi-line method parameter definition.
781
828
  Enabled: false
782
829
  VersionAdded: '0.49'
830
+ AllowMultilineFinalElement: false
783
831
 
784
832
  Layout/FirstParameterIndentation:
785
833
  Description: >-
@@ -883,7 +931,7 @@ Layout/HeredocArgumentClosingParenthesis:
883
931
  VersionAdded: '0.68'
884
932
 
885
933
  Layout/HeredocIndentation:
886
- Description: 'This cop checks the indentation of the here document bodies.'
934
+ Description: 'Checks the indentation of the here document bodies.'
887
935
  StyleGuide: '#squiggly-heredocs'
888
936
  Enabled: true
889
937
  VersionAdded: '0.49'
@@ -916,7 +964,7 @@ Layout/IndentationStyle:
916
964
  VersionChanged: '0.82'
917
965
  # By default the indentation width from `Layout/IndentationWidth` is used,
918
966
  # but it can be overridden by setting this parameter.
919
- # It is used during auto-correction to determine how many spaces should
967
+ # It is used during autocorrection to determine how many spaces should
920
968
  # replace each tab.
921
969
  IndentationWidth: ~
922
970
  EnforcedStyle: spaces
@@ -931,7 +979,7 @@ Layout/IndentationWidth:
931
979
  VersionAdded: '0.49'
932
980
  # Number of spaces for each indentation level.
933
981
  Width: 2
934
- IgnoredPatterns: []
982
+ AllowedPatterns: []
935
983
 
936
984
  Layout/InitialIndentation:
937
985
  Description: >-
@@ -954,6 +1002,27 @@ Layout/LeadingEmptyLines:
954
1002
  VersionAdded: '0.57'
955
1003
  VersionChanged: '0.77'
956
1004
 
1005
+ Layout/LineContinuationLeadingSpace:
1006
+ Description: >-
1007
+ Use trailing spaces instead of leading spaces in strings
1008
+ broken over multiple lines (by a backslash).
1009
+ Enabled: pending
1010
+ VersionAdded: '1.31'
1011
+ VersionChanged: '1.45'
1012
+ EnforcedStyle: trailing
1013
+ SupportedStyles:
1014
+ - leading
1015
+ - trailing
1016
+
1017
+ Layout/LineContinuationSpacing:
1018
+ Description: 'Checks the spacing in front of backslash in line continuations.'
1019
+ Enabled: pending
1020
+ VersionAdded: '1.31'
1021
+ EnforcedStyle: space
1022
+ SupportedStyles:
1023
+ - space
1024
+ - no_space
1025
+
957
1026
  Layout/LineEndStringConcatenationIndentation:
958
1027
  Description: >-
959
1028
  Checks the indentation of the next line after a line that
@@ -985,10 +1054,10 @@ Layout/LineLength:
985
1054
  # The IgnoreCopDirectives option causes the LineLength rule to ignore cop
986
1055
  # directives like '# rubocop: enable ...' when calculating a line's length.
987
1056
  IgnoreCopDirectives: true
988
- # The IgnoredPatterns option is a list of !ruby/regexp and/or string
1057
+ # The AllowedPatterns option is a list of !ruby/regexp and/or string
989
1058
  # elements. Strings will be converted to Regexp objects. A line that matches
990
1059
  # any regular expression listed in this option will be ignored by LineLength.
991
- IgnoredPatterns: []
1060
+ AllowedPatterns: []
992
1061
 
993
1062
  Layout/MultilineArrayBraceLayout:
994
1063
  Description: >-
@@ -1012,6 +1081,7 @@ Layout/MultilineArrayLineBreaks:
1012
1081
  starts on a separate line.
1013
1082
  Enabled: false
1014
1083
  VersionAdded: '0.67'
1084
+ AllowMultilineFinalElement: false
1015
1085
 
1016
1086
  Layout/MultilineAssignmentLayout:
1017
1087
  Description: 'Check for a newline after the assignment operator in multi-line assignments.'
@@ -1062,6 +1132,7 @@ Layout/MultilineHashKeyLineBreaks:
1062
1132
  starts on a separate line.
1063
1133
  Enabled: false
1064
1134
  VersionAdded: '0.67'
1135
+ AllowMultilineFinalElement: false
1065
1136
 
1066
1137
  Layout/MultilineMethodArgumentLineBreaks:
1067
1138
  Description: >-
@@ -1069,6 +1140,7 @@ Layout/MultilineMethodArgumentLineBreaks:
1069
1140
  starts on a separate line.
1070
1141
  Enabled: false
1071
1142
  VersionAdded: '0.67'
1143
+ AllowMultilineFinalElement: false
1072
1144
 
1073
1145
  Layout/MultilineMethodCallBraceLayout:
1074
1146
  Description: >-
@@ -1117,6 +1189,14 @@ Layout/MultilineMethodDefinitionBraceLayout:
1117
1189
  - new_line
1118
1190
  - same_line
1119
1191
 
1192
+ Layout/MultilineMethodParameterLineBreaks:
1193
+ Description: >-
1194
+ Checks that each parameter in a multi-line method definition
1195
+ starts on a separate line.
1196
+ Enabled: false
1197
+ VersionAdded: '1.32'
1198
+ AllowMultilineFinalElement: false
1199
+
1120
1200
  Layout/MultilineOperationIndentation:
1121
1201
  Description: >-
1122
1202
  Checks indentation of binary operations that span more than
@@ -1454,7 +1534,8 @@ Lint/AmbiguousBlockAssociation:
1454
1534
  Enabled: true
1455
1535
  VersionAdded: '0.48'
1456
1536
  VersionChanged: '1.13'
1457
- IgnoredMethods: []
1537
+ AllowedMethods: []
1538
+ AllowedPatterns: []
1458
1539
 
1459
1540
  Lint/AmbiguousOperator:
1460
1541
  Description: >-
@@ -1491,7 +1572,9 @@ Lint/AssignmentInCondition:
1491
1572
  Description: "Don't use assignment in conditions."
1492
1573
  StyleGuide: '#safe-assignment-in-condition'
1493
1574
  Enabled: true
1575
+ SafeAutoCorrect: false
1494
1576
  VersionAdded: '0.9'
1577
+ VersionChanged: '1.45'
1495
1578
  AllowSafeAssignment: true
1496
1579
 
1497
1580
  Lint/BigDecimalNew:
@@ -1500,7 +1583,7 @@ Lint/BigDecimalNew:
1500
1583
  VersionAdded: '0.53'
1501
1584
 
1502
1585
  Lint/BinaryOperatorWithIdenticalOperands:
1503
- Description: 'This cop checks for places where binary operator has identical operands.'
1586
+ Description: 'Checks for places where binary operator has identical operands.'
1504
1587
  Enabled: true
1505
1588
  Safe: false
1506
1589
  VersionAdded: '0.89'
@@ -1529,6 +1612,11 @@ Lint/ConstantDefinitionInBlock:
1529
1612
  AllowedMethods:
1530
1613
  - enums
1531
1614
 
1615
+ Lint/ConstantOverwrittenInRescue:
1616
+ Description: 'Checks for overwriting an exception with an exception result by use `rescue =>`.'
1617
+ Enabled: pending
1618
+ VersionAdded: '1.31'
1619
+
1532
1620
  Lint/ConstantResolution:
1533
1621
  Description: 'Check that constants are fully qualified with `::`.'
1534
1622
  Enabled: false
@@ -1542,13 +1630,13 @@ Lint/Debugger:
1542
1630
  Description: 'Check for debugger calls.'
1543
1631
  Enabled: true
1544
1632
  VersionAdded: '0.14'
1545
- VersionChanged: '1.10'
1546
- DebuggerReceivers: [] # deprecated
1633
+ VersionChanged: '1.46'
1547
1634
  DebuggerMethods:
1548
1635
  # Groups are available so that a specific group can be disabled in
1549
1636
  # a user's configuration, but are otherwise not significant.
1550
1637
  Kernel:
1551
1638
  - binding.irb
1639
+ - Kernel.binding.irb
1552
1640
  Byebug:
1553
1641
  - byebug
1554
1642
  - remote_byebug
@@ -1566,7 +1654,11 @@ Lint/Debugger:
1566
1654
  - binding.pry
1567
1655
  - binding.remote_pry
1568
1656
  - binding.pry_remote
1657
+ - Kernel.binding.pry
1658
+ - Kernel.binding.remote_pry
1659
+ - Kernel.binding.pry_remote
1569
1660
  - Pry.rescue
1661
+ - pry
1570
1662
  Rails:
1571
1663
  - debugger
1572
1664
  - Kernel.debugger
@@ -1584,7 +1676,7 @@ Lint/DeprecatedConstants:
1584
1676
  Description: 'Checks for deprecated constants.'
1585
1677
  Enabled: pending
1586
1678
  VersionAdded: '1.8'
1587
- VersionChanged: '1.22'
1679
+ VersionChanged: '1.40'
1588
1680
  # You can configure deprecated constants.
1589
1681
  # If there is an alternative method, you can set alternative value as `Alternative`.
1590
1682
  # And you can set the deprecated version as `DeprecatedVersion`.
@@ -1611,6 +1703,12 @@ Lint/DeprecatedConstants:
1611
1703
  'Random::DEFAULT':
1612
1704
  Alternative: 'Random.new'
1613
1705
  DeprecatedVersion: '3.0'
1706
+ 'Struct::Group':
1707
+ Alternative: 'Etc::Group'
1708
+ DeprecatedVersion: '3.0'
1709
+ 'Struct::Passwd':
1710
+ Alternative: 'Etc::Passwd'
1711
+ DeprecatedVersion: '3.0'
1614
1712
 
1615
1713
  Lint/DeprecatedOpenSSLConstant:
1616
1714
  Description: "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`."
@@ -1648,6 +1746,16 @@ Lint/DuplicateHashKey:
1648
1746
  VersionAdded: '0.34'
1649
1747
  VersionChanged: '0.77'
1650
1748
 
1749
+ Lint/DuplicateMagicComment:
1750
+ Description: 'Check for duplicated magic comments.'
1751
+ Enabled: pending
1752
+ VersionAdded: '1.37'
1753
+
1754
+ Lint/DuplicateMatchPattern:
1755
+ Description: 'Do not repeat patterns in `in` keywords.'
1756
+ Enabled: pending
1757
+ VersionAdded: '1.50'
1758
+
1651
1759
  Lint/DuplicateMethods:
1652
1760
  Description: 'Check for duplicate method definitions.'
1653
1761
  Enabled: true
@@ -1661,7 +1769,9 @@ Lint/DuplicateRegexpCharacterClassElement:
1661
1769
  Lint/DuplicateRequire:
1662
1770
  Description: 'Check for duplicate `require`s and `require_relative`s.'
1663
1771
  Enabled: true
1772
+ SafeAutoCorrect: false
1664
1773
  VersionAdded: '0.90'
1774
+ VersionChanged: '1.28'
1665
1775
 
1666
1776
  Lint/DuplicateRescueException:
1667
1777
  Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.'
@@ -1680,7 +1790,7 @@ Lint/ElseLayout:
1680
1790
  VersionChanged: '1.2'
1681
1791
 
1682
1792
  Lint/EmptyBlock:
1683
- Description: 'This cop checks for blocks without a body.'
1793
+ Description: 'Checks for blocks without a body.'
1684
1794
  Enabled: pending
1685
1795
  VersionAdded: '1.1'
1686
1796
  VersionChanged: '1.15'
@@ -1694,10 +1804,12 @@ Lint/EmptyClass:
1694
1804
  AllowComments: false
1695
1805
 
1696
1806
  Lint/EmptyConditionalBody:
1697
- Description: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.'
1807
+ Description: 'Checks for the presence of `if`, `elsif` and `unless` branches without a body.'
1698
1808
  Enabled: true
1809
+ SafeAutoCorrect: false
1699
1810
  AllowComments: true
1700
1811
  VersionAdded: '0.89'
1812
+ VersionChanged: '1.34'
1701
1813
 
1702
1814
  Lint/EmptyEnsure:
1703
1815
  Description: 'Checks for empty ensure block.'
@@ -1826,11 +1938,11 @@ Lint/InheritException:
1826
1938
  - runtime_error
1827
1939
 
1828
1940
  Lint/InterpolationCheck:
1829
- Description: 'Raise warning for interpolation in single q strs.'
1941
+ Description: 'Checks for interpolation in a single quoted string.'
1830
1942
  Enabled: true
1831
- Safe: false
1943
+ SafeAutoCorrect: false
1832
1944
  VersionAdded: '0.50'
1833
- VersionChanged: '0.87'
1945
+ VersionChanged: '1.40'
1834
1946
 
1835
1947
  Lint/LambdaWithoutLiteralBlock:
1836
1948
  Description: 'Checks uses of lambda without a literal block.'
@@ -1873,7 +1985,7 @@ Lint/MissingCopEnableDirective:
1873
1985
 
1874
1986
  Lint/MissingSuper:
1875
1987
  Description: >-
1876
- This cop checks for the presence of constructors and lifecycle callbacks
1988
+ Checks for the presence of constructors and lifecycle callbacks
1877
1989
  without calls to `super`.
1878
1990
  Enabled: true
1879
1991
  VersionAdded: '0.89'
@@ -1894,6 +2006,8 @@ Lint/NestedMethodDefinition:
1894
2006
  Description: 'Do not use nested method definitions.'
1895
2007
  StyleGuide: '#no-nested-methods'
1896
2008
  Enabled: true
2009
+ AllowedMethods: []
2010
+ AllowedPatterns: []
1897
2011
  VersionAdded: '0.32'
1898
2012
 
1899
2013
  Lint/NestedPercentLiteral:
@@ -1913,6 +2027,13 @@ Lint/NoReturnInBeginEndBlocks:
1913
2027
  Enabled: pending
1914
2028
  VersionAdded: '1.2'
1915
2029
 
2030
+ Lint/NonAtomicFileOperation:
2031
+ Description: Checks for non-atomic file operations.
2032
+ StyleGuide: '#atomic-file-operations'
2033
+ Enabled: pending
2034
+ VersionAdded: '1.31'
2035
+ SafeAutoCorrect: false
2036
+
1916
2037
  Lint/NonDeterministicRequireOrder:
1917
2038
  Description: 'Always sort arrays returned by Dir.glob when requiring files.'
1918
2039
  Enabled: true
@@ -1930,7 +2051,8 @@ Lint/NumberConversion:
1930
2051
  VersionAdded: '0.53'
1931
2052
  VersionChanged: '1.1'
1932
2053
  SafeAutoCorrect: false
1933
- IgnoredMethods: []
2054
+ AllowedMethods: []
2055
+ AllowedPatterns: []
1934
2056
  IgnoredClasses:
1935
2057
  - Time
1936
2058
  - DateTime
@@ -1949,7 +2071,9 @@ Lint/OrAssignmentToConstant:
1949
2071
  Lint/OrderedMagicComments:
1950
2072
  Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
1951
2073
  Enabled: true
2074
+ SafeAutoCorrect: false
1952
2075
  VersionAdded: '0.53'
2076
+ VersionChanged: '1.37'
1953
2077
 
1954
2078
  Lint/OutOfRangeRegexpRef:
1955
2079
  Description: 'Checks for out of range reference for Regexp because it always returns nil.'
@@ -2079,6 +2203,11 @@ Lint/RequireParentheses:
2079
2203
  Enabled: true
2080
2204
  VersionAdded: '0.18'
2081
2205
 
2206
+ Lint/RequireRangeParentheses:
2207
+ Description: 'Checks that a range literal is enclosed in parentheses when the end of the range is at a line break.'
2208
+ Enabled: pending
2209
+ VersionAdded: '1.32'
2210
+
2082
2211
  Lint/RequireRelativeSelfPath:
2083
2212
  Description: 'Checks for uses a file requiring itself with `require_relative`.'
2084
2213
  Enabled: pending
@@ -2202,7 +2331,7 @@ Lint/Syntax:
2202
2331
  VersionAdded: '0.9'
2203
2332
 
2204
2333
  Lint/ToEnumArguments:
2205
- Description: 'This cop ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.'
2334
+ Description: 'Ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.'
2206
2335
  Enabled: pending
2207
2336
  VersionAdded: '1.1'
2208
2337
 
@@ -2212,12 +2341,15 @@ Lint/ToJSON:
2212
2341
  VersionAdded: '0.66'
2213
2342
 
2214
2343
  Lint/TopLevelReturnWithArgument:
2215
- Description: 'This cop detects top level return statements with argument.'
2344
+ Description: 'Detects top level return statements with argument.'
2216
2345
  Enabled: true
2217
2346
  VersionAdded: '0.89'
2347
+ # These codes are `eval`-ed in method and their return values may be used.
2348
+ Exclude:
2349
+ - '**/*.jb'
2218
2350
 
2219
2351
  Lint/TrailingCommaInAttributeDeclaration:
2220
- Description: 'This cop checks for trailing commas in attribute declarations.'
2352
+ Description: 'Checks for trailing commas in attribute declarations.'
2221
2353
  Enabled: true
2222
2354
  VersionAdded: '0.90'
2223
2355
 
@@ -2266,11 +2398,11 @@ Lint/UnreachableCode:
2266
2398
  VersionAdded: '0.9'
2267
2399
 
2268
2400
  Lint/UnreachableLoop:
2269
- Description: 'This cop checks for loops that will have at most one iteration.'
2401
+ Description: 'Checks for loops that will have at most one iteration.'
2270
2402
  Enabled: true
2271
2403
  VersionAdded: '0.89'
2272
2404
  VersionChanged: '1.7'
2273
- IgnoredPatterns:
2405
+ AllowedPatterns:
2274
2406
  # RSpec uses `times` in its message expectations
2275
2407
  # eg. `exactly(2).times`
2276
2408
  - !ruby/regexp /(exactly|at_least|at_most)\(\d+\)\.times/
@@ -2323,11 +2455,14 @@ Lint/UselessAssignment:
2323
2455
  StyleGuide: '#underscore-unused-vars'
2324
2456
  Enabled: true
2325
2457
  VersionAdded: '0.11'
2458
+ VersionChanged: '1.51'
2459
+ SafeAutoCorrect: false
2326
2460
 
2327
2461
  Lint/UselessElseWithoutRescue:
2328
2462
  Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
2329
2463
  Enabled: true
2330
2464
  VersionAdded: '0.17'
2465
+ VersionChanged: '1.31'
2331
2466
 
2332
2467
  Lint/UselessMethodDefinition:
2333
2468
  Description: 'Checks for useless method definitions.'
@@ -2336,6 +2471,11 @@ Lint/UselessMethodDefinition:
2336
2471
  VersionChanged: '0.91'
2337
2472
  Safe: false
2338
2473
 
2474
+ Lint/UselessRescue:
2475
+ Description: 'Checks for useless `rescue`s.'
2476
+ Enabled: pending
2477
+ VersionAdded: '1.43'
2478
+
2339
2479
  Lint/UselessRuby2Keywords:
2340
2480
  Description: 'Finds unnecessary uses of `ruby2_keywords`.'
2341
2481
  Enabled: pending
@@ -2375,7 +2515,8 @@ Metrics/AbcSize:
2375
2515
  VersionChanged: '1.5'
2376
2516
  # The ABC size is a calculated magnitude, so this number can be an Integer or
2377
2517
  # a Float.
2378
- IgnoredMethods: []
2518
+ AllowedMethods: []
2519
+ AllowedPatterns: []
2379
2520
  CountRepeatedAttributes: true
2380
2521
  Max: 17
2381
2522
 
@@ -2387,11 +2528,11 @@ Metrics/BlockLength:
2387
2528
  CountComments: false # count full line comments?
2388
2529
  Max: 25
2389
2530
  CountAsOne: []
2390
- ExcludedMethods: [] # deprecated, retained for backwards compatibility
2391
- IgnoredMethods:
2531
+ AllowedMethods:
2392
2532
  # By default, exclude the `#refine` method, as it tends to have larger
2393
2533
  # associated blocks.
2394
2534
  - refine
2535
+ AllowedPatterns: []
2395
2536
  Exclude:
2396
2537
  - '**/*.gemspec'
2397
2538
 
@@ -2413,6 +2554,12 @@ Metrics/ClassLength:
2413
2554
  Max: 100
2414
2555
  CountAsOne: []
2415
2556
 
2557
+ Metrics/CollectionLiteralLength:
2558
+ Description: 'Checks for `Array` or `Hash` literals with many entries.'
2559
+ Enabled: pending
2560
+ VersionAdded: '1.47'
2561
+ LengthThreshold: 250
2562
+
2416
2563
  # Avoid complex methods.
2417
2564
  Metrics/CyclomaticComplexity:
2418
2565
  Description: >-
@@ -2421,7 +2568,8 @@ Metrics/CyclomaticComplexity:
2421
2568
  Enabled: true
2422
2569
  VersionAdded: '0.25'
2423
2570
  VersionChanged: '0.81'
2424
- IgnoredMethods: []
2571
+ AllowedMethods: []
2572
+ AllowedPatterns: []
2425
2573
  Max: 7
2426
2574
 
2427
2575
  Metrics/MethodLength:
@@ -2433,8 +2581,8 @@ Metrics/MethodLength:
2433
2581
  CountComments: false # count full line comments?
2434
2582
  Max: 10
2435
2583
  CountAsOne: []
2436
- ExcludedMethods: [] # deprecated, retained for backwards compatibility
2437
- IgnoredMethods: []
2584
+ AllowedMethods: []
2585
+ AllowedPatterns: []
2438
2586
 
2439
2587
  Metrics/ModuleLength:
2440
2588
  Description: 'Avoid modules longer than 100 lines of code.'
@@ -2462,7 +2610,8 @@ Metrics/PerceivedComplexity:
2462
2610
  Enabled: true
2463
2611
  VersionAdded: '0.25'
2464
2612
  VersionChanged: '0.81'
2465
- IgnoredMethods: []
2613
+ AllowedMethods: []
2614
+ AllowedPatterns: []
2466
2615
  Max: 8
2467
2616
 
2468
2617
  ################## Migration #############################
@@ -2633,13 +2782,13 @@ Naming/HeredocDelimiterNaming:
2633
2782
  Enabled: true
2634
2783
  VersionAdded: '0.50'
2635
2784
  ForbiddenDelimiters:
2636
- - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/'
2785
+ - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/i'
2637
2786
 
2638
2787
  Naming/InclusiveLanguage:
2639
2788
  Description: 'Recommend the use of inclusive language instead of problematic terms.'
2640
2789
  Enabled: false
2641
2790
  VersionAdded: '1.18'
2642
- VersionChanged: '1.21'
2791
+ VersionChanged: '1.49'
2643
2792
  CheckIdentifiers: true
2644
2793
  CheckConstants: true
2645
2794
  CheckVariables: true
@@ -2686,11 +2835,11 @@ Naming/MethodName:
2686
2835
  - camelCase
2687
2836
  # Method names matching patterns are always allowed.
2688
2837
  #
2689
- # IgnoredPatterns:
2838
+ # AllowedPatterns:
2690
2839
  # - '\A\s*onSelectionBulkChange\s*'
2691
2840
  # - '\A\s*onSelectionCleared\s*'
2692
2841
  #
2693
- IgnoredPatterns: []
2842
+ AllowedPatterns: []
2694
2843
 
2695
2844
  Naming/MethodParameterName:
2696
2845
  Description: >-
@@ -2704,10 +2853,13 @@ Naming/MethodParameterName:
2704
2853
  AllowNamesEndingInNumbers: true
2705
2854
  # Allowed names that will not register an offense
2706
2855
  AllowedNames:
2856
+ - as
2707
2857
  - at
2708
2858
  - by
2859
+ - cc
2709
2860
  - db
2710
2861
  - id
2862
+ - if
2711
2863
  - in
2712
2864
  - io
2713
2865
  - ip
@@ -2766,6 +2918,7 @@ Naming/VariableName:
2766
2918
  - snake_case
2767
2919
  - camelCase
2768
2920
  AllowedIdentifiers: []
2921
+ AllowedPatterns: []
2769
2922
 
2770
2923
  Naming/VariableNumber:
2771
2924
  Description: 'Use the configured style when numbering symbols, methods and variables.'
@@ -2787,9 +2940,18 @@ Naming/VariableNumber:
2787
2940
  - rfc822 # Time#rfc822
2788
2941
  - rfc2822 # Time#rfc2822
2789
2942
  - rfc3339 # DateTime.rfc3339
2943
+ - x86_64 # Allowed by default as an underscore separated CPU architecture name
2944
+ AllowedPatterns: []
2790
2945
 
2791
2946
  #################### Security ##############################
2792
2947
 
2948
+ Security/CompoundHash:
2949
+ Description: 'When overwriting Object#hash to combine values, prefer delegating to Array#hash over writing a custom implementation.'
2950
+ Enabled: pending
2951
+ Safe: false
2952
+ VersionAdded: '1.28'
2953
+ VersionChanged: '1.51'
2954
+
2793
2955
  Security/Eval:
2794
2956
  Description: 'The use of eval represents a serious security risk.'
2795
2957
  Enabled: true
@@ -2851,6 +3013,7 @@ Style/AccessModifierDeclarations:
2851
3013
  - inline
2852
3014
  - group
2853
3015
  AllowModifiersOnSymbols: true
3016
+ SafeAutoCorrect: false
2854
3017
 
2855
3018
  Style/AccessorGrouping:
2856
3019
  Description: 'Checks for grouping of accessors in `class` and `module` bodies.'
@@ -2904,6 +3067,12 @@ Style/ArrayCoercion:
2904
3067
  Enabled: false
2905
3068
  VersionAdded: '0.88'
2906
3069
 
3070
+ Style/ArrayIntersect:
3071
+ Description: 'Use `array1.intersect?(array2)` instead of `(array1 & array2).any?`.'
3072
+ Enabled: 'pending'
3073
+ Safe: false
3074
+ VersionAdded: '1.40'
3075
+
2907
3076
  Style/ArrayJoin:
2908
3077
  Description: 'Use Array#join instead of Array#*.'
2909
3078
  StyleGuide: '#array-join'
@@ -2985,7 +3154,7 @@ Style/BlockDelimiters:
2985
3154
  # This looks at the usage of a block's method to determine its type (e.g. is
2986
3155
  # the result of a `map` assigned to a variable or passed to another
2987
3156
  # method) but exceptions are permitted in the `ProceduralMethods`,
2988
- # `FunctionalMethods` and `IgnoredMethods` sections below.
3157
+ # `FunctionalMethods` and `AllowedMethods` sections below.
2989
3158
  - semantic
2990
3159
  # The `braces_for_chaining` style enforces braces around single line blocks
2991
3160
  # and do..end around multi-line blocks, except for multi-line blocks whose
@@ -3026,7 +3195,7 @@ Style/BlockDelimiters:
3026
3195
  - let!
3027
3196
  - subject
3028
3197
  - watch
3029
- IgnoredMethods:
3198
+ AllowedMethods:
3030
3199
  # Methods that can be either procedural or functional and cannot be
3031
3200
  # categorised from their usage alone, e.g.
3032
3201
  #
@@ -3043,6 +3212,7 @@ Style/BlockDelimiters:
3043
3212
  - lambda
3044
3213
  - proc
3045
3214
  - it
3215
+ AllowedPatterns: []
3046
3216
  # The AllowBracesOnProceduralOneLiners option is ignored unless the
3047
3217
  # EnforcedStyle is set to `semantic`. If so:
3048
3218
  #
@@ -3066,7 +3236,7 @@ Style/BlockDelimiters:
3066
3236
  # collection.each do |element| puts element end
3067
3237
  AllowBracesOnProceduralOneLiners: false
3068
3238
  # The BracesRequiredMethods overrides all other configurations except
3069
- # IgnoredMethods. It can be used to enforce that all blocks for specific
3239
+ # AllowedMethods. It can be used to enforce that all blocks for specific
3070
3240
  # methods use braces. For example, you can use this to enforce Sorbet
3071
3241
  # signatures use braces even when the rest of your codebase enforces
3072
3242
  # the `line_count_based` style.
@@ -3087,13 +3257,25 @@ Style/CaseEquality:
3087
3257
  # # good
3088
3258
  # String === "string"
3089
3259
  AllowOnConstant: false
3260
+ # If `AllowOnSelfClass` option is enabled, the cop will ignore violations when the receiver of
3261
+ # the case equality operator is `self.class`.
3262
+ #
3263
+ # # bad
3264
+ # some_class === object
3265
+ #
3266
+ # # good
3267
+ # self.class === object
3268
+ AllowOnSelfClass: false
3090
3269
 
3091
3270
  Style/CaseLikeIf:
3092
- Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.'
3271
+ Description: 'Identifies places where `if-elsif` constructions can be replaced with `case-when`.'
3093
3272
  StyleGuide: '#case-vs-if-else'
3094
3273
  Enabled: true
3095
3274
  Safe: false
3096
3275
  VersionAdded: '0.88'
3276
+ VersionChanged: '1.48'
3277
+ # `MinBranchesCount` defines the number of branches `if` needs to have to trigger this cop.
3278
+ MinBranchesCount: 3
3097
3279
 
3098
3280
  Style/CharacterLiteral:
3099
3281
  Description: 'Checks for uses of character literals.'
@@ -3106,7 +3288,7 @@ Style/ClassAndModuleChildren:
3106
3288
  StyleGuide: '#namespace-definition'
3107
3289
  # Moving from compact to nested children requires knowledge of whether the
3108
3290
  # outer parent is a module or a class. Moving from nested to compact requires
3109
- # verification that the outer parent is defined elsewhere. Rubocop does not
3291
+ # verification that the outer parent is defined elsewhere. RuboCop does not
3110
3292
  # have the knowledge to perform either operation safely and thus requires
3111
3293
  # manual oversight.
3112
3294
  SafeAutoCorrect: false
@@ -3146,10 +3328,11 @@ Style/ClassEqualityComparison:
3146
3328
  StyleGuide: '#instance-of-vs-class-comparison'
3147
3329
  Enabled: true
3148
3330
  VersionAdded: '0.93'
3149
- IgnoredMethods:
3331
+ AllowedMethods:
3150
3332
  - ==
3151
3333
  - equal?
3152
3334
  - eql?
3335
+ AllowedPatterns: []
3153
3336
 
3154
3337
  Style/ClassMethods:
3155
3338
  Description: 'Use self when defining module/class methods.'
@@ -3270,6 +3453,17 @@ Style/CommentedKeyword:
3270
3453
  VersionAdded: '0.51'
3271
3454
  VersionChanged: '1.19'
3272
3455
 
3456
+ Style/ComparableClamp:
3457
+ Description: 'Enforces the use of `Comparable#clamp` instead of comparison by minimum and maximum.'
3458
+ Enabled: pending
3459
+ VersionAdded: '1.44'
3460
+
3461
+ Style/ConcatArrayLiterals:
3462
+ Description: 'Enforces the use of `Array#push(item)` instead of `Array#concat([item])` to avoid redundant array literals.'
3463
+ Enabled: pending
3464
+ Safe: false
3465
+ VersionAdded: '1.41'
3466
+
3273
3467
  Style/ConditionalAssignment:
3274
3468
  Description: >-
3275
3469
  Use the return value of `if` and `case` statements for
@@ -3325,9 +3519,17 @@ Style/Copyright:
3325
3519
  Notice: '^Copyright (\(c\) )?2[0-9]{3} .+'
3326
3520
  AutocorrectNotice: ''
3327
3521
 
3522
+ Style/DataInheritance:
3523
+ Description: 'Checks for inheritance from Data.define.'
3524
+ StyleGuide: '#no-extend-data-define'
3525
+ Enabled: pending
3526
+ SafeAutoCorrect: false
3527
+ VersionAdded: '1.49'
3528
+ VersionChanged: '1.51'
3529
+
3328
3530
  Style/DateTime:
3329
3531
  Description: 'Use Time over DateTime.'
3330
- StyleGuide: '#date--time'
3532
+ StyleGuide: '#date-time'
3331
3533
  Enabled: false
3332
3534
  VersionAdded: '0.51'
3333
3535
  VersionChanged: '0.92'
@@ -3348,6 +3550,12 @@ Style/Dir:
3348
3550
  Enabled: true
3349
3551
  VersionAdded: '0.50'
3350
3552
 
3553
+ Style/DirEmpty:
3554
+ Description: >-
3555
+ Prefer to use `Dir.empty?('path/to/dir')` when checking if a directory is empty.
3556
+ Enabled: pending
3557
+ VersionAdded: '1.48'
3558
+
3351
3559
  Style/DisableCopsWithinSourceCodeDirective:
3352
3560
  Description: >-
3353
3561
  Forbids disabling/enabling cops within source code.
@@ -3436,6 +3644,12 @@ Style/EmptyElse:
3436
3644
  - empty
3437
3645
  - nil
3438
3646
  - both
3647
+ AllowComments: false
3648
+
3649
+ Style/EmptyHeredoc:
3650
+ Description: 'Checks for using empty heredoc to reduce redundancy.'
3651
+ Enabled: pending
3652
+ VersionAdded: '1.32'
3439
3653
 
3440
3654
  Style/EmptyLambdaParameter:
3441
3655
  Description: 'Omit parens for empty lambda parameters.'
@@ -3484,6 +3698,12 @@ Style/EndlessMethod:
3484
3698
  - allow_always
3485
3699
  - disallow
3486
3700
 
3701
+ Style/EnvHome:
3702
+ Description: "Checks for consistent usage of `ENV['HOME']`."
3703
+ Enabled: pending
3704
+ Safe: false
3705
+ VersionAdded: '1.29'
3706
+
3487
3707
  Style/EvalWithLocation:
3488
3708
  Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.'
3489
3709
  Enabled: true
@@ -3496,6 +3716,11 @@ Style/EvenOdd:
3496
3716
  VersionAdded: '0.12'
3497
3717
  VersionChanged: '0.29'
3498
3718
 
3719
+ Style/ExactRegexpMatch:
3720
+ Description: 'Checks for exact regexp match inside Regexp literals.'
3721
+ Enabled: pending
3722
+ VersionAdded: '1.51'
3723
+
3499
3724
  Style/ExpandPathArguments:
3500
3725
  Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`."
3501
3726
  Enabled: true
@@ -3521,6 +3746,23 @@ Style/ExponentialNotation:
3521
3746
  - engineering
3522
3747
  - integral
3523
3748
 
3749
+ Style/FetchEnvVar:
3750
+ Description: >-
3751
+ Suggests `ENV.fetch` for the replacement of `ENV[]`.
3752
+ Reference:
3753
+ - https://rubystyle.guide/#hash-fetch-defaults
3754
+ Enabled: pending
3755
+ VersionAdded: '1.28'
3756
+ # Environment variables to be excluded from the inspection.
3757
+ AllowedVars: []
3758
+
3759
+ Style/FileEmpty:
3760
+ Description: >-
3761
+ Prefer to use `File.empty?('path/to/file')` when checking if a file is empty.
3762
+ Enabled: pending
3763
+ Safe: false
3764
+ VersionAdded: '1.48'
3765
+
3524
3766
  Style/FileRead:
3525
3767
  Description: 'Favor `File.(bin)read` convenience methods.'
3526
3768
  StyleGuide: '#file-read'
@@ -3589,7 +3831,8 @@ Style/FormatStringToken:
3589
3831
  MaxUnannotatedPlaceholdersAllowed: 1
3590
3832
  VersionAdded: '0.49'
3591
3833
  VersionChanged: '1.0'
3592
- IgnoredMethods: []
3834
+ AllowedMethods: []
3835
+ AllowedPatterns: []
3593
3836
 
3594
3837
  Style/FrozenStringLiteralComment:
3595
3838
  Description: >-
@@ -3634,10 +3877,11 @@ Style/GuardClause:
3634
3877
  StyleGuide: '#no-nested-conditionals'
3635
3878
  Enabled: true
3636
3879
  VersionAdded: '0.20'
3637
- VersionChanged: '0.22'
3880
+ VersionChanged: '1.31'
3638
3881
  # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
3639
3882
  # needs to have to trigger this cop
3640
3883
  MinBodyLength: 1
3884
+ AllowConsecutiveConditionals: false
3641
3885
 
3642
3886
  Style/HashAsLastArrayItem:
3643
3887
  Description: >-
@@ -3666,14 +3910,17 @@ Style/HashEachMethods:
3666
3910
  Safe: false
3667
3911
  VersionAdded: '0.80'
3668
3912
  VersionChanged: '1.16'
3669
- AllowedReceivers: []
3913
+ AllowedReceivers:
3914
+ - Thread.current
3670
3915
 
3671
3916
  Style/HashExcept:
3672
3917
  Description: >-
3673
3918
  Checks for usages of `Hash#reject`, `Hash#select`, and `Hash#filter` methods
3674
3919
  that can be replaced with `Hash#except` method.
3675
3920
  Enabled: pending
3921
+ Safe: false
3676
3922
  VersionAdded: '1.7'
3923
+ VersionChanged: '1.39'
3677
3924
 
3678
3925
  Style/HashLikeCase:
3679
3926
  Description: >-
@@ -3712,6 +3959,8 @@ Style/HashSyntax:
3712
3959
  - never
3713
3960
  # accepts both shorthand and explicit use of hash literal value.
3714
3961
  - either
3962
+ # forces use of the 3.1 syntax only if all values can be omitted in the hash.
3963
+ - consistent
3715
3964
  # Force hashes that have a symbol value to use hash rockets
3716
3965
  UseHashRocketsWithSymbolValues: false
3717
3966
  # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
@@ -3824,16 +4073,41 @@ Style/InverseMethods:
3824
4073
  :=~: :!~
3825
4074
  :<: :>=
3826
4075
  :>: :<=
3827
- # `ActiveSupport` defines some common inverse methods. They are listed below,
3828
- # and not enabled by default.
3829
- # :present?: :blank?,
3830
- # :include?: :exclude?
3831
4076
  # `InverseBlocks` are methods that are inverted by inverting the return
3832
4077
  # of the block that is passed to the method
3833
4078
  InverseBlocks:
3834
4079
  :select: :reject
3835
4080
  :select!: :reject!
3836
4081
 
4082
+ Style/InvertibleUnlessCondition:
4083
+ Description: 'Favor `if` with inverted condition over `unless`.'
4084
+ Enabled: false
4085
+ Safe: false
4086
+ VersionAdded: '1.44'
4087
+ VersionChanged: '1.50'
4088
+ # `InverseMethods` are methods that can be inverted in a `unless` condition.
4089
+ # The relationship of inverse methods needs to be defined in both directions.
4090
+ # Keys and values both need to be defined as symbols.
4091
+ InverseMethods:
4092
+ :!=: :==
4093
+ :>: :<=
4094
+ :<=: :>
4095
+ :<: :>=
4096
+ :>=: :<
4097
+ :!~: :=~
4098
+ :zero?: :nonzero?
4099
+ :nonzero?: :zero?
4100
+ :any?: :none?
4101
+ :none?: :any?
4102
+ :even?: :odd?
4103
+ :odd?: :even?
4104
+ # `ActiveSupport` defines some common inverse methods. They are listed below,
4105
+ # and not enabled by default.
4106
+ # :present?: :blank?
4107
+ # :blank?: :present?
4108
+ # :include?: :exclude?
4109
+ # :exclude?: :include?
4110
+
3837
4111
  Style/IpAddresses:
3838
4112
  Description: "Don't include literal IP addresses in code."
3839
4113
  Enabled: false
@@ -3888,12 +4162,43 @@ Style/LineEndConcatenation:
3888
4162
  VersionAdded: '0.18'
3889
4163
  VersionChanged: '0.64'
3890
4164
 
4165
+ Style/MagicCommentFormat:
4166
+ Description: 'Use a consistent style for magic comments.'
4167
+ Enabled: pending
4168
+ VersionAdded: '1.35'
4169
+ EnforcedStyle: snake_case
4170
+ SupportedStyles:
4171
+ # `snake` will enforce the magic comment is written
4172
+ # in snake case (words separated by underscores).
4173
+ # Eg: froze_string_literal: true
4174
+ - snake_case
4175
+ # `kebab` will enforce the magic comment is written
4176
+ # in kebab case (words separated by hyphens).
4177
+ # Eg: froze-string-literal: true
4178
+ - kebab_case
4179
+ DirectiveCapitalization: lowercase
4180
+ ValueCapitalization: ~
4181
+ SupportedCapitalizations:
4182
+ - lowercase
4183
+ - uppercase
4184
+
4185
+ Style/MapCompactWithConditionalBlock:
4186
+ Description: 'Prefer `select` or `reject` over `map { ... }.compact`.'
4187
+ Enabled: pending
4188
+ VersionAdded: '1.30'
4189
+
3891
4190
  Style/MapToHash:
3892
4191
  Description: 'Prefer `to_h` with a block over `map.to_h`.'
3893
4192
  Enabled: pending
3894
4193
  VersionAdded: '1.24'
3895
4194
  Safe: false
3896
4195
 
4196
+ Style/MapToSet:
4197
+ Description: 'Prefer `to_set` with a block over `map.to_set`.'
4198
+ Enabled: pending
4199
+ Safe: false
4200
+ VersionAdded: '1.42'
4201
+
3897
4202
  Style/MethodCallWithArgsParentheses:
3898
4203
  Description: 'Use parentheses for method calls with arguments.'
3899
4204
  StyleGuide: '#method-invocation-parens'
@@ -3901,8 +4206,8 @@ Style/MethodCallWithArgsParentheses:
3901
4206
  VersionAdded: '0.47'
3902
4207
  VersionChanged: '1.7'
3903
4208
  IgnoreMacros: true
3904
- IgnoredMethods: []
3905
- IgnoredPatterns: []
4209
+ AllowedMethods: []
4210
+ AllowedPatterns: []
3906
4211
  IncludedMacros: []
3907
4212
  AllowParenthesesInMultilineCall: false
3908
4213
  AllowParenthesesInChaining: false
@@ -3917,7 +4222,8 @@ Style/MethodCallWithoutArgsParentheses:
3917
4222
  Description: 'Do not use parentheses for method calls with no arguments.'
3918
4223
  StyleGuide: '#method-invocation-parens'
3919
4224
  Enabled: true
3920
- IgnoredMethods: []
4225
+ AllowedMethods: []
4226
+ AllowedPatterns: []
3921
4227
  VersionAdded: '0.47'
3922
4228
  VersionChanged: '0.55'
3923
4229
 
@@ -3948,6 +4254,12 @@ Style/MinMax:
3948
4254
  Enabled: true
3949
4255
  VersionAdded: '0.50'
3950
4256
 
4257
+ Style/MinMaxComparison:
4258
+ Description: 'Enforces the use of `max` or `min` instead of comparison for greater or less.'
4259
+ Enabled: pending
4260
+ Safe: false
4261
+ VersionAdded: '1.42'
4262
+
3951
4263
  Style/MissingElse:
3952
4264
  Description: >-
3953
4265
  Require if/case expressions to have an else branches.
@@ -4108,7 +4420,7 @@ Style/NegatedIf:
4108
4420
 
4109
4421
  Style/NegatedIfElseCondition:
4110
4422
  Description: >-
4111
- This cop checks for uses of `if-else` and ternary operators with a negated condition
4423
+ Checks for uses of `if-else` and ternary operators with a negated condition
4112
4424
  which can be simplified by inverting condition and swapping branches.
4113
4425
  Enabled: pending
4114
4426
  VersionAdded: '1.2'
@@ -4269,17 +4581,17 @@ Style/NumericLiterals:
4269
4581
  Strict: false
4270
4582
  # You can specify allowed numbers. (e.g. port number 3000, 8080, and etc)
4271
4583
  AllowedNumbers: []
4584
+ AllowedPatterns: []
4272
4585
 
4273
4586
  Style/NumericPredicate:
4274
4587
  Description: >-
4275
4588
  Checks for the use of predicate- or comparison methods for
4276
4589
  numeric comparisons.
4277
4590
  StyleGuide: '#predicate-methods'
4278
- Safe: false
4279
4591
  # This will change to a new method call which isn't guaranteed to be on the
4280
4592
  # object. Switching these methods has to be done with knowledge of the types
4281
4593
  # of the variables which rubocop doesn't have.
4282
- SafeAutoCorrect: false
4594
+ Safe: false
4283
4595
  Enabled: true
4284
4596
  VersionAdded: '0.42'
4285
4597
  VersionChanged: '0.59'
@@ -4287,12 +4599,26 @@ Style/NumericPredicate:
4287
4599
  SupportedStyles:
4288
4600
  - predicate
4289
4601
  - comparison
4290
- IgnoredMethods: []
4602
+ AllowedMethods: []
4603
+ AllowedPatterns: []
4291
4604
  # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
4292
4605
  # false positives.
4293
4606
  Exclude:
4294
4607
  - 'spec/**/*'
4295
4608
 
4609
+ Style/ObjectThen:
4610
+ Description: 'Enforces the use of consistent method names `Object#yield_self` or `Object#then`.'
4611
+ StyleGuide: '#object-yield-self-vs-object-then'
4612
+ Enabled: pending
4613
+ VersionAdded: '1.28'
4614
+ # Use `Object#yield_self` or `Object#then`?
4615
+ # Prefer `Object#yield_self` to `Object#then` (yield_self)
4616
+ # Prefer `Object#then` to `Object#yield_self` (then)
4617
+ EnforcedStyle: 'then'
4618
+ SupportedStyles:
4619
+ - then
4620
+ - yield_self
4621
+
4296
4622
  Style/OneLineConditional:
4297
4623
  Description: >-
4298
4624
  Favor the ternary operator (?:) or multi-line constructs over
@@ -4311,7 +4637,15 @@ Style/OpenStructUse:
4311
4637
  - https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats
4312
4638
 
4313
4639
  Enabled: pending
4640
+ Safe: false
4314
4641
  VersionAdded: '1.23'
4642
+ VersionChanged: '1.51'
4643
+
4644
+ Style/OperatorMethodCall:
4645
+ Description: 'Checks for redundant dot before operator method call.'
4646
+ StyleGuide: '#operator-method-call'
4647
+ Enabled: pending
4648
+ VersionAdded: '1.37'
4315
4649
 
4316
4650
  Style/OptionHash:
4317
4651
  Description: "Don't use option hashes when you can use keyword arguments."
@@ -4458,10 +4792,12 @@ Style/RedundantArgument:
4458
4792
  Enabled: pending
4459
4793
  Safe: false
4460
4794
  VersionAdded: '1.4'
4461
- VersionChanged: '1.7'
4795
+ VersionChanged: '1.40'
4462
4796
  Methods:
4463
4797
  # Array#join
4464
4798
  join: ''
4799
+ # Array#sum
4800
+ sum: 0
4465
4801
  # String#split
4466
4802
  split: ' '
4467
4803
  # String#chomp
@@ -4496,6 +4832,22 @@ Style/RedundantConditional:
4496
4832
  Enabled: true
4497
4833
  VersionAdded: '0.50'
4498
4834
 
4835
+ Style/RedundantConstantBase:
4836
+ Description: Avoid redundant `::` prefix on constant.
4837
+ Enabled: pending
4838
+ VersionAdded: '1.40'
4839
+
4840
+ Style/RedundantDoubleSplatHashBraces:
4841
+ Description: 'Checks for redundant uses of double splat hash braces.'
4842
+ Enabled: pending
4843
+ VersionAdded: '1.41'
4844
+
4845
+ Style/RedundantEach:
4846
+ Description: 'Checks for redundant `each`.'
4847
+ Enabled: pending
4848
+ Safe: false
4849
+ VersionAdded: '1.38'
4850
+
4499
4851
  Style/RedundantException:
4500
4852
  Description: "Checks for an obsolete RuntimeException argument in raise/fail."
4501
4853
  StyleGuide: '#no-explicit-runtimeerror'
@@ -4530,15 +4882,30 @@ Style/RedundantFreeze:
4530
4882
  VersionAdded: '0.34'
4531
4883
  VersionChanged: '0.66'
4532
4884
 
4885
+ Style/RedundantHeredocDelimiterQuotes:
4886
+ Description: 'Checks for redundant heredoc delimiter quotes.'
4887
+ Enabled: pending
4888
+ VersionAdded: '1.45'
4889
+
4533
4890
  Style/RedundantInitialize:
4534
4891
  Description: 'Checks for redundant `initialize` methods.'
4535
4892
  Enabled: pending
4893
+ Safe: false
4894
+ AllowComments: true
4536
4895
  VersionAdded: '1.27'
4896
+ VersionChanged: '1.28'
4537
4897
 
4538
4898
  Style/RedundantInterpolation:
4539
4899
  Description: 'Checks for strings that are just an interpolated expression.'
4540
4900
  Enabled: true
4901
+ SafeAutoCorrect: false
4541
4902
  VersionAdded: '0.76'
4903
+ VersionChanged: '1.30'
4904
+
4905
+ Style/RedundantLineContinuation:
4906
+ Description: 'Check for redundant line continuation.'
4907
+ Enabled: pending
4908
+ VersionAdded: '1.49'
4542
4909
 
4543
4910
  Style/RedundantParentheses:
4544
4911
  Description: "Checks for parentheses that seem not to serve any purpose."
@@ -4602,6 +4969,11 @@ Style/RedundantSortBy:
4602
4969
  Enabled: true
4603
4970
  VersionAdded: '0.36'
4604
4971
 
4972
+ Style/RedundantStringEscape:
4973
+ Description: 'Checks for redundant escapes in string literals.'
4974
+ Enabled: pending
4975
+ VersionAdded: '1.37'
4976
+
4605
4977
  Style/RegexpLiteral:
4606
4978
  Description: 'Use / or %r around regular expressions.'
4607
4979
  StyleGuide: '#percent-r'
@@ -4620,6 +4992,12 @@ Style/RegexpLiteral:
4620
4992
  # are found in the regexp string.
4621
4993
  AllowInnerSlashes: false
4622
4994
 
4995
+ Style/RequireOrder:
4996
+ Description: Sort `require` and `require_relative` in alphabetical order.
4997
+ Enabled: false
4998
+ SafeAutoCorrect: false
4999
+ VersionAdded: '1.40'
5000
+
4623
5001
  Style/RescueModifier:
4624
5002
  Description: 'Avoid using rescue in its modifier form.'
4625
5003
  StyleGuide: '#no-rescue-modifiers'
@@ -4649,10 +5027,10 @@ Style/ReturnNil:
4649
5027
 
4650
5028
  Style/SafeNavigation:
4651
5029
  Description: >-
4652
- This cop transforms usages of a method call safeguarded by
5030
+ Transforms usages of a method call safeguarded by
4653
5031
  a check for the existence of the object to
4654
5032
  safe navigation (`&.`).
4655
- Auto-correction is unsafe as it assumes the object will
5033
+ Autocorrection is unsafe as it assumes the object will
4656
5034
  be `nil` or truthy, but never `false`.
4657
5035
  Enabled: true
4658
5036
  VersionAdded: '0.43'
@@ -4774,6 +5152,7 @@ Style/SpecialGlobalVars:
4774
5152
  SupportedStyles:
4775
5153
  - use_perl_names
4776
5154
  - use_english_names
5155
+ - use_builtin_english_names
4777
5156
 
4778
5157
  Style/StabbyLambdaParentheses:
4779
5158
  Description: 'Check for the usage of parentheses around stabby lambda arguments.'
@@ -4875,7 +5254,7 @@ Style/StructInheritance:
4875
5254
  VersionChanged: '1.20'
4876
5255
 
4877
5256
  Style/SwapValues:
4878
- Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.'
5257
+ Description: 'Enforces the use of shorthand-style swapping of 2 variables.'
4879
5258
  StyleGuide: '#values-swapping'
4880
5259
  Enabled: pending
4881
5260
  VersionAdded: '1.1'
@@ -4903,13 +5282,14 @@ Style/SymbolProc:
4903
5282
  Enabled: true
4904
5283
  Safe: false
4905
5284
  VersionAdded: '0.26'
4906
- VersionChanged: '1.5'
5285
+ VersionChanged: '1.40'
4907
5286
  AllowMethodsWithArguments: false
4908
- # A list of method names to be ignored by the check.
5287
+ # A list of method names to be always allowed by the check.
4909
5288
  # The names should be fairly unique, otherwise you'll end up ignoring lots of code.
4910
- IgnoredMethods:
4911
- - respond_to
5289
+ AllowedMethods:
4912
5290
  - define_method
5291
+ AllowedPatterns: []
5292
+ AllowComments: false
4913
5293
 
4914
5294
  Style/TernaryParentheses:
4915
5295
  Description: 'Checks for use of parentheses around ternary conditions.'
@@ -4924,7 +5304,7 @@ Style/TernaryParentheses:
4924
5304
  AllowSafeAssignment: true
4925
5305
 
4926
5306
  Style/TopLevelMethodDefinition:
4927
- Description: 'This cop looks for top-level method definitions.'
5307
+ Description: 'Looks for top-level method definitions.'
4928
5308
  StyleGuide: '#top-level-methods'
4929
5309
  Enabled: false
4930
5310
  VersionAdded: '1.15'
@@ -5147,6 +5527,19 @@ Style/YodaCondition:
5147
5527
  VersionAdded: '0.49'
5148
5528
  VersionChanged: '0.75'
5149
5529
 
5530
+ Style/YodaExpression:
5531
+ Description: 'Forbid the use of yoda expressions.'
5532
+ Enabled: false
5533
+ Safe: false
5534
+ VersionAdded: '1.42'
5535
+ VersionChanged: '1.43'
5536
+ SupportedOperators:
5537
+ - '*'
5538
+ - '+'
5539
+ - '&'
5540
+ - '|'
5541
+ - '^'
5542
+
5150
5543
  Style/ZeroLengthPredicate:
5151
5544
  Description: 'Use #empty? when testing for objects of length 0.'
5152
5545
  Enabled: true