rubocop 1.52.1 → 1.79.2

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 (658) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +93 -88
  4. data/assets/output.css.erb +159 -0
  5. data/assets/output.html.erb +1 -160
  6. data/config/default.yml +596 -91
  7. data/config/internal_affairs.yml +31 -0
  8. data/config/obsoletion.yml +13 -3
  9. data/exe/rubocop +4 -3
  10. data/lib/rubocop/cached_data.rb +21 -5
  11. data/lib/rubocop/cli/command/auto_generate_config.rb +28 -15
  12. data/lib/rubocop/cli/command/execute_runner.rb +4 -4
  13. data/lib/rubocop/cli/command/lsp.rb +19 -0
  14. data/lib/rubocop/cli/command/show_cops.rb +24 -2
  15. data/lib/rubocop/cli/command/show_docs_url.rb +2 -2
  16. data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
  17. data/lib/rubocop/cli/command/version.rb +2 -2
  18. data/lib/rubocop/cli.rb +26 -3
  19. data/lib/rubocop/comment_config.rb +3 -3
  20. data/lib/rubocop/config.rb +92 -22
  21. data/lib/rubocop/config_finder.rb +14 -4
  22. data/lib/rubocop/config_loader.rb +68 -57
  23. data/lib/rubocop/config_loader_resolver.rb +52 -20
  24. data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
  25. data/lib/rubocop/config_obsoletion/parameter_rule.rb +9 -1
  26. data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
  27. data/lib/rubocop/config_obsoletion.rb +56 -9
  28. data/lib/rubocop/config_validator.rb +39 -20
  29. data/lib/rubocop/cop/autocorrect_logic.rb +57 -25
  30. data/lib/rubocop/cop/base.rb +80 -19
  31. data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -2
  32. data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
  33. data/lib/rubocop/cop/bundler/gem_comment.rb +3 -3
  34. data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
  35. data/lib/rubocop/cop/bundler/gem_version.rb +6 -7
  36. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
  37. data/lib/rubocop/cop/bundler/ordered_gems.rb +10 -2
  38. data/lib/rubocop/cop/cop.rb +30 -4
  39. data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -12
  40. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
  41. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +6 -14
  42. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -4
  43. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
  44. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +6 -3
  45. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
  46. data/lib/rubocop/cop/documentation.rb +32 -5
  47. data/lib/rubocop/cop/exclude_limit.rb +1 -1
  48. data/lib/rubocop/cop/force.rb +12 -0
  49. data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
  50. data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
  51. data/lib/rubocop/cop/gemspec/dependency_version.rb +5 -7
  52. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +3 -4
  53. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +39 -17
  54. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +10 -2
  55. data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
  56. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -3
  57. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
  58. data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
  59. data/lib/rubocop/cop/generator.rb +6 -0
  60. data/lib/rubocop/cop/internal_affairs/cop_description.rb +0 -4
  61. data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
  62. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
  63. data/lib/rubocop/cop/internal_affairs/example_description.rb +51 -25
  64. data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
  65. data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
  66. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +6 -5
  67. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
  68. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
  69. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
  70. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +127 -33
  71. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
  72. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
  73. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +231 -0
  74. data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
  75. data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
  76. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
  77. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
  78. data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
  79. data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
  80. data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
  81. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
  82. data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
  83. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
  84. data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
  85. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +11 -2
  86. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
  87. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
  88. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +23 -2
  89. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -5
  90. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
  91. data/lib/rubocop/cop/internal_affairs.rb +9 -0
  92. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -2
  93. data/lib/rubocop/cop/layout/argument_alignment.rb +3 -10
  94. data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
  95. data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
  96. data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
  97. data/lib/rubocop/cop/layout/block_alignment.rb +32 -13
  98. data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
  99. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  100. data/lib/rubocop/cop/layout/class_structure.rb +51 -9
  101. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +1 -1
  102. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
  103. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  104. data/lib/rubocop/cop/layout/condition_position.rb +0 -4
  105. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -2
  106. data/lib/rubocop/cop/layout/dot_position.rb +2 -6
  107. data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
  108. data/lib/rubocop/cop/layout/empty_comment.rb +3 -1
  109. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +46 -13
  110. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
  111. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
  112. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +33 -13
  113. data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
  114. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +37 -7
  115. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
  116. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
  117. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
  118. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
  119. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +14 -8
  120. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
  121. data/lib/rubocop/cop/layout/end_alignment.rb +16 -4
  122. data/lib/rubocop/cop/layout/extra_spacing.rb +5 -11
  123. data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -11
  124. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +19 -10
  125. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
  126. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
  127. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
  128. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +3 -3
  129. data/lib/rubocop/cop/layout/hash_alignment.rb +8 -6
  130. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -3
  131. data/lib/rubocop/cop/layout/heredoc_indentation.rb +5 -2
  132. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  133. data/lib/rubocop/cop/layout/indentation_width.rb +16 -16
  134. data/lib/rubocop/cop/layout/leading_comment_space.rb +84 -2
  135. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +28 -11
  136. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +8 -2
  137. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +4 -2
  138. data/lib/rubocop/cop/layout/line_length.rb +168 -28
  139. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
  140. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
  141. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
  142. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
  143. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +21 -6
  144. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  145. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
  146. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +3 -4
  147. data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
  148. data/lib/rubocop/cop/layout/redundant_line_break.rb +40 -44
  149. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +8 -9
  150. data/lib/rubocop/cop/layout/single_line_block_chain.rb +6 -1
  151. data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
  152. data/lib/rubocop/cop/layout/space_after_comma.rb +10 -2
  153. data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
  154. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  155. data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
  156. data/lib/rubocop/cop/layout/space_around_keyword.rb +8 -2
  157. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +3 -3
  158. data/lib/rubocop/cop/layout/space_around_operators.rb +83 -38
  159. data/lib/rubocop/cop/layout/space_before_block_braces.rb +20 -10
  160. data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
  161. data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
  162. data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
  163. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
  164. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
  165. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +8 -1
  166. data/lib/rubocop/cop/layout/space_inside_parens.rb +1 -1
  167. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
  168. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -5
  169. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +5 -0
  170. data/lib/rubocop/cop/layout/trailing_whitespace.rb +5 -3
  171. data/lib/rubocop/cop/legacy/corrector.rb +12 -2
  172. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -3
  173. data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
  174. data/lib/rubocop/cop/lint/ambiguous_range.rb +9 -1
  175. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
  176. data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
  177. data/lib/rubocop/cop/lint/assignment_in_condition.rb +7 -9
  178. data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
  179. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +11 -13
  180. data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -4
  181. data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -14
  182. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
  183. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +1 -1
  184. data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
  185. data/lib/rubocop/cop/lint/cop_directive_syntax.rb +84 -0
  186. data/lib/rubocop/cop/lint/debugger.rb +45 -10
  187. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -2
  188. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +3 -12
  189. data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
  190. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
  191. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -5
  192. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
  193. data/lib/rubocop/cop/lint/duplicate_methods.rb +110 -32
  194. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +47 -20
  195. data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
  196. data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
  197. data/lib/rubocop/cop/lint/else_layout.rb +0 -2
  198. data/lib/rubocop/cop/lint/empty_block.rb +1 -1
  199. data/lib/rubocop/cop/lint/empty_conditional_body.rb +29 -58
  200. data/lib/rubocop/cop/lint/empty_ensure.rb +2 -12
  201. data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
  202. data/lib/rubocop/cop/lint/empty_file.rb +0 -2
  203. data/lib/rubocop/cop/lint/empty_interpolation.rb +3 -5
  204. data/lib/rubocop/cop/lint/empty_when.rb +1 -3
  205. data/lib/rubocop/cop/lint/ensure_return.rb +2 -10
  206. data/lib/rubocop/cop/lint/erb_new_arguments.rb +24 -23
  207. data/lib/rubocop/cop/lint/float_comparison.rb +58 -15
  208. data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -8
  209. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -12
  210. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
  211. data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
  212. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
  213. data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
  214. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +23 -12
  215. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +0 -7
  216. data/lib/rubocop/cop/lint/interpolation_check.rb +9 -4
  217. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
  218. data/lib/rubocop/cop/lint/literal_as_condition.rb +126 -11
  219. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
  220. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +50 -13
  221. data/lib/rubocop/cop/lint/loop.rb +6 -12
  222. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
  223. data/lib/rubocop/cop/lint/missing_super.rb +33 -7
  224. data/lib/rubocop/cop/lint/mixed_case_range.rb +113 -0
  225. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  226. data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -12
  227. data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -25
  228. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -7
  229. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +22 -10
  230. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +6 -8
  231. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
  232. data/lib/rubocop/cop/lint/number_conversion.rb +13 -4
  233. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
  234. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
  235. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
  236. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
  237. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +6 -11
  238. data/lib/rubocop/cop/lint/percent_string_array.rb +0 -4
  239. data/lib/rubocop/cop/lint/percent_symbol_array.rb +0 -4
  240. data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
  241. data/lib/rubocop/cop/lint/rand_one.rb +0 -4
  242. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +4 -2
  243. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
  244. data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -12
  245. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +178 -10
  246. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +9 -8
  247. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -6
  248. data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
  249. data/lib/rubocop/cop/lint/redundant_with_index.rb +9 -2
  250. data/lib/rubocop/cop/lint/redundant_with_object.rb +5 -2
  251. data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
  252. data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
  253. data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
  254. data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
  255. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -5
  256. data/lib/rubocop/cop/lint/rescue_type.rb +5 -11
  257. data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -13
  258. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +31 -13
  259. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +109 -41
  260. data/lib/rubocop/cop/lint/script_permission.rb +3 -3
  261. data/lib/rubocop/cop/lint/self_assignment.rb +71 -10
  262. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
  263. data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
  264. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +26 -12
  265. data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
  266. data/lib/rubocop/cop/lint/struct_new_override.rb +12 -12
  267. data/lib/rubocop/cop/lint/suppressed_exception.rb +3 -3
  268. data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
  269. data/lib/rubocop/cop/lint/symbol_conversion.rb +9 -4
  270. data/lib/rubocop/cop/lint/syntax.rb +10 -4
  271. data/lib/rubocop/cop/lint/to_enum_arguments.rb +7 -7
  272. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  273. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
  274. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
  275. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
  276. data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
  277. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +4 -3
  278. data/lib/rubocop/cop/lint/unreachable_code.rb +56 -9
  279. data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -8
  280. data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
  281. data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
  282. data/lib/rubocop/cop/lint/useless_access_modifier.rb +36 -10
  283. data/lib/rubocop/cop/lint/useless_assignment.rb +51 -20
  284. data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
  285. data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
  286. data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
  287. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -4
  288. data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
  289. data/lib/rubocop/cop/lint/useless_numeric_operation.rb +79 -0
  290. data/lib/rubocop/cop/lint/useless_or.rb +98 -0
  291. data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
  292. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
  293. data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -29
  294. data/lib/rubocop/cop/lint/useless_times.rb +2 -2
  295. data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
  296. data/lib/rubocop/cop/lint/void.rb +88 -27
  297. data/lib/rubocop/cop/message_annotator.rb +7 -3
  298. data/lib/rubocop/cop/metrics/abc_size.rb +4 -4
  299. data/lib/rubocop/cop/metrics/block_length.rb +8 -6
  300. data/lib/rubocop/cop/metrics/block_nesting.rb +20 -8
  301. data/lib/rubocop/cop/metrics/class_length.rb +23 -17
  302. data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
  303. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
  304. data/lib/rubocop/cop/metrics/method_length.rb +16 -7
  305. data/lib/rubocop/cop/metrics/module_length.rb +7 -6
  306. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  307. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
  308. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +39 -12
  309. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
  310. data/lib/rubocop/cop/migration/department_name.rb +2 -2
  311. data/lib/rubocop/cop/mixin/alignment.rb +8 -4
  312. data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
  313. data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
  314. data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
  315. data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
  316. data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
  317. data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
  318. data/lib/rubocop/cop/mixin/code_length.rb +12 -1
  319. data/lib/rubocop/cop/mixin/comments_help.rb +24 -15
  320. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
  321. data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
  322. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  323. data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
  324. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
  325. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  326. data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
  327. data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
  328. data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
  329. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +23 -12
  330. data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
  331. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
  332. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +45 -35
  333. data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
  334. data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
  335. data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
  336. data/lib/rubocop/cop/mixin/line_length_help.rb +34 -12
  337. data/lib/rubocop/cop/mixin/method_complexity.rb +17 -7
  338. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +10 -11
  339. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
  340. data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
  341. data/lib/rubocop/cop/mixin/percent_literal.rb +2 -2
  342. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +71 -35
  343. data/lib/rubocop/cop/mixin/range_help.rb +15 -4
  344. data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
  345. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
  346. data/lib/rubocop/cop/mixin/statement_modifier.rb +11 -5
  347. data/lib/rubocop/cop/mixin/string_help.rb +5 -3
  348. data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
  349. data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
  350. data/lib/rubocop/cop/mixin/trailing_comma.rb +22 -6
  351. data/lib/rubocop/cop/naming/accessor_method_name.rb +11 -6
  352. data/lib/rubocop/cop/naming/block_forwarding.rb +40 -9
  353. data/lib/rubocop/cop/naming/constant_name.rb +7 -9
  354. data/lib/rubocop/cop/naming/file_name.rb +5 -7
  355. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
  356. data/lib/rubocop/cop/naming/inclusive_language.rb +13 -5
  357. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +16 -17
  358. data/lib/rubocop/cop/naming/method_name.rb +185 -15
  359. data/lib/rubocop/cop/naming/predicate_method.rb +306 -0
  360. data/lib/rubocop/cop/naming/predicate_prefix.rb +204 -0
  361. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +14 -13
  362. data/lib/rubocop/cop/naming/variable_name.rb +50 -6
  363. data/lib/rubocop/cop/naming/variable_number.rb +2 -3
  364. data/lib/rubocop/cop/offense.rb +4 -5
  365. data/lib/rubocop/cop/registry.rb +9 -6
  366. data/lib/rubocop/cop/security/compound_hash.rb +4 -2
  367. data/lib/rubocop/cop/security/eval.rb +2 -1
  368. data/lib/rubocop/cop/security/open.rb +3 -2
  369. data/lib/rubocop/cop/security/yaml_load.rb +3 -2
  370. data/lib/rubocop/cop/style/access_modifier_declarations.rb +172 -32
  371. data/lib/rubocop/cop/style/accessor_grouping.rb +43 -9
  372. data/lib/rubocop/cop/style/alias.rb +11 -9
  373. data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
  374. data/lib/rubocop/cop/style/and_or.rb +1 -1
  375. data/lib/rubocop/cop/style/arguments_forwarding.rb +472 -63
  376. data/lib/rubocop/cop/style/array_first_last.rb +80 -0
  377. data/lib/rubocop/cop/style/array_intersect.rb +94 -44
  378. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
  379. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
  380. data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
  381. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  382. data/lib/rubocop/cop/style/block_delimiters.rb +56 -24
  383. data/lib/rubocop/cop/style/case_like_if.rb +14 -17
  384. data/lib/rubocop/cop/style/class_and_module_children.rb +52 -11
  385. data/lib/rubocop/cop/style/class_check.rb +1 -0
  386. data/lib/rubocop/cop/style/class_equality_comparison.rb +8 -1
  387. data/lib/rubocop/cop/style/class_vars.rb +3 -3
  388. data/lib/rubocop/cop/style/collection_compact.rb +25 -15
  389. data/lib/rubocop/cop/style/collection_methods.rb +4 -1
  390. data/lib/rubocop/cop/style/collection_querying.rb +167 -0
  391. data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
  392. data/lib/rubocop/cop/style/combinable_loops.rb +25 -9
  393. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  394. data/lib/rubocop/cop/style/commented_keyword.rb +30 -4
  395. data/lib/rubocop/cop/style/comparable_between.rb +78 -0
  396. data/lib/rubocop/cop/style/concat_array_literals.rb +3 -2
  397. data/lib/rubocop/cop/style/conditional_assignment.rb +53 -38
  398. data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
  399. data/lib/rubocop/cop/style/copyright.rb +31 -21
  400. data/lib/rubocop/cop/style/data_inheritance.rb +8 -1
  401. data/lib/rubocop/cop/style/date_time.rb +5 -4
  402. data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -7
  403. data/lib/rubocop/cop/style/dig_chain.rb +89 -0
  404. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +1 -1
  405. data/lib/rubocop/cop/style/documentation.rb +25 -25
  406. data/lib/rubocop/cop/style/documentation_method.rb +20 -0
  407. data/lib/rubocop/cop/style/double_negation.rb +4 -4
  408. data/lib/rubocop/cop/style/each_for_simple_loop.rb +11 -15
  409. data/lib/rubocop/cop/style/each_with_object.rb +3 -4
  410. data/lib/rubocop/cop/style/empty_case_condition.rb +6 -1
  411. data/lib/rubocop/cop/style/empty_else.rb +10 -7
  412. data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
  413. data/lib/rubocop/cop/style/empty_literal.rb +36 -23
  414. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  415. data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
  416. data/lib/rubocop/cop/style/endless_method.rb +150 -18
  417. data/lib/rubocop/cop/style/eval_with_location.rb +23 -31
  418. data/lib/rubocop/cop/style/exact_regexp_match.rb +6 -5
  419. data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
  420. data/lib/rubocop/cop/style/explicit_block_argument.rb +18 -5
  421. data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
  422. data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
  423. data/lib/rubocop/cop/style/file_null.rb +89 -0
  424. data/lib/rubocop/cop/style/file_read.rb +2 -5
  425. data/lib/rubocop/cop/style/file_touch.rb +75 -0
  426. data/lib/rubocop/cop/style/file_write.rb +2 -5
  427. data/lib/rubocop/cop/style/float_division.rb +8 -4
  428. data/lib/rubocop/cop/style/for.rb +4 -2
  429. data/lib/rubocop/cop/style/format_string.rb +33 -12
  430. data/lib/rubocop/cop/style/format_string_token.rb +38 -11
  431. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +6 -3
  432. data/lib/rubocop/cop/style/global_std_stream.rb +10 -1
  433. data/lib/rubocop/cop/style/global_vars.rb +1 -3
  434. data/lib/rubocop/cop/style/guard_clause.rb +46 -4
  435. data/lib/rubocop/cop/style/hash_conversion.rb +26 -9
  436. data/lib/rubocop/cop/style/hash_each_methods.rb +110 -12
  437. data/lib/rubocop/cop/style/hash_except.rb +38 -146
  438. data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
  439. data/lib/rubocop/cop/style/hash_slice.rb +80 -0
  440. data/lib/rubocop/cop/style/hash_syntax.rb +35 -7
  441. data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
  442. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
  443. data/lib/rubocop/cop/style/identical_conditional_branches.rb +57 -9
  444. data/lib/rubocop/cop/style/if_inside_else.rb +11 -15
  445. data/lib/rubocop/cop/style/if_unless_modifier.rb +36 -9
  446. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
  447. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +8 -8
  448. data/lib/rubocop/cop/style/if_with_semicolon.rb +62 -8
  449. data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
  450. data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
  451. data/lib/rubocop/cop/style/inverse_methods.rb +22 -18
  452. data/lib/rubocop/cop/style/invertible_unless_condition.rb +49 -7
  453. data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
  454. data/lib/rubocop/cop/style/it_assignment.rb +93 -0
  455. data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
  456. data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
  457. data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
  458. data/lib/rubocop/cop/style/lambda.rb +5 -4
  459. data/lib/rubocop/cop/style/lambda_call.rb +14 -3
  460. data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
  461. data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
  462. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +82 -50
  463. data/lib/rubocop/cop/style/map_into_array.rb +236 -0
  464. data/lib/rubocop/cop/style/map_to_hash.rb +29 -10
  465. data/lib/rubocop/cop/style/map_to_set.rb +4 -5
  466. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +59 -25
  467. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +21 -5
  468. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +30 -13
  469. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
  470. data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -2
  471. data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
  472. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  473. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +35 -5
  474. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  475. data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
  476. data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
  477. data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
  478. data/lib/rubocop/cop/style/multiline_method_signature.rb +10 -9
  479. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +6 -4
  480. data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
  481. data/lib/rubocop/cop/style/multiple_comparison.rb +53 -60
  482. data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
  483. data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
  484. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  485. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
  486. data/lib/rubocop/cop/style/nested_ternary_operator.rb +8 -15
  487. data/lib/rubocop/cop/style/next.rb +45 -1
  488. data/lib/rubocop/cop/style/nil_comparison.rb +2 -0
  489. data/lib/rubocop/cop/style/not.rb +1 -1
  490. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  491. data/lib/rubocop/cop/style/numeric_predicate.rb +12 -4
  492. data/lib/rubocop/cop/style/object_then.rb +16 -14
  493. data/lib/rubocop/cop/style/one_line_conditional.rb +31 -6
  494. data/lib/rubocop/cop/style/open_struct_use.rb +6 -6
  495. data/lib/rubocop/cop/style/operator_method_call.rb +32 -8
  496. data/lib/rubocop/cop/style/or_assignment.rb +3 -6
  497. data/lib/rubocop/cop/style/parallel_assignment.rb +47 -45
  498. data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
  499. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  500. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  501. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  502. data/lib/rubocop/cop/style/proc.rb +2 -2
  503. data/lib/rubocop/cop/style/quoted_symbols.rb +2 -4
  504. data/lib/rubocop/cop/style/raise_args.rb +19 -14
  505. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  506. data/lib/rubocop/cop/style/redundant_argument.rb +35 -4
  507. data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
  508. data/lib/rubocop/cop/style/redundant_assignment.rb +11 -3
  509. data/lib/rubocop/cop/style/redundant_begin.rb +17 -4
  510. data/lib/rubocop/cop/style/redundant_condition.rb +97 -25
  511. data/lib/rubocop/cop/style/redundant_conditional.rb +2 -10
  512. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +50 -0
  513. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +89 -5
  514. data/lib/rubocop/cop/style/redundant_each.rb +7 -4
  515. data/lib/rubocop/cop/style/redundant_exception.rb +33 -13
  516. data/lib/rubocop/cop/style/redundant_fetch_block.rb +4 -12
  517. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  518. data/lib/rubocop/cop/style/redundant_filter_chain.rb +23 -6
  519. data/lib/rubocop/cop/style/redundant_format.rb +262 -0
  520. data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
  521. data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
  522. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -1
  523. data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
  524. data/lib/rubocop/cop/style/redundant_line_continuation.rb +73 -20
  525. data/lib/rubocop/cop/style/redundant_parentheses.rb +155 -40
  526. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
  527. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +107 -0
  528. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
  529. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +10 -25
  530. data/lib/rubocop/cop/style/redundant_return.rb +16 -5
  531. data/lib/rubocop/cop/style/redundant_self.rb +32 -20
  532. data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
  533. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +12 -5
  534. data/lib/rubocop/cop/style/redundant_sort.rb +11 -10
  535. data/lib/rubocop/cop/style/redundant_sort_by.rb +19 -3
  536. data/lib/rubocop/cop/style/redundant_string_escape.rb +5 -3
  537. data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
  538. data/lib/rubocop/cop/style/require_order.rb +2 -2
  539. data/lib/rubocop/cop/style/rescue_modifier.rb +18 -4
  540. data/lib/rubocop/cop/style/return_nil.rb +8 -4
  541. data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +137 -0
  542. data/lib/rubocop/cop/style/safe_navigation.rb +145 -61
  543. data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
  544. data/lib/rubocop/cop/style/sample.rb +3 -4
  545. data/lib/rubocop/cop/style/select_by_regexp.rb +20 -13
  546. data/lib/rubocop/cop/style/self_assignment.rb +12 -18
  547. data/lib/rubocop/cop/style/semicolon.rb +10 -5
  548. data/lib/rubocop/cop/style/send.rb +4 -4
  549. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
  550. data/lib/rubocop/cop/style/signal_exception.rb +3 -4
  551. data/lib/rubocop/cop/style/single_argument_dig.rb +16 -8
  552. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  553. data/lib/rubocop/cop/style/single_line_do_end_block.rb +78 -0
  554. data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
  555. data/lib/rubocop/cop/style/slicing_with_range.rb +105 -10
  556. data/lib/rubocop/cop/style/sole_nested_conditional.rb +75 -88
  557. data/lib/rubocop/cop/style/special_global_vars.rb +2 -3
  558. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
  559. data/lib/rubocop/cop/style/string_chars.rb +1 -0
  560. data/lib/rubocop/cop/style/string_concatenation.rb +15 -15
  561. data/lib/rubocop/cop/style/string_literals.rb +1 -1
  562. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
  563. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  564. data/lib/rubocop/cop/style/strip.rb +7 -4
  565. data/lib/rubocop/cop/style/struct_inheritance.rb +9 -2
  566. data/lib/rubocop/cop/style/super_arguments.rb +221 -0
  567. data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
  568. data/lib/rubocop/cop/style/swap_values.rb +4 -15
  569. data/lib/rubocop/cop/style/symbol_array.rb +35 -15
  570. data/lib/rubocop/cop/style/symbol_proc.rb +78 -6
  571. data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
  572. data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
  573. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +11 -2
  574. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
  575. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  576. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
  577. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
  578. data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
  579. data/lib/rubocop/cop/style/unpack_first.rb +11 -14
  580. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
  581. data/lib/rubocop/cop/style/while_until_do.rb +0 -2
  582. data/lib/rubocop/cop/style/while_until_modifier.rb +0 -2
  583. data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
  584. data/lib/rubocop/cop/style/yoda_condition.rb +12 -6
  585. data/lib/rubocop/cop/style/yoda_expression.rb +10 -8
  586. data/lib/rubocop/cop/style/zero_length_predicate.rb +32 -24
  587. data/lib/rubocop/cop/team.rb +28 -4
  588. data/lib/rubocop/cop/util.rb +20 -7
  589. data/lib/rubocop/cop/utils/format_string.rb +10 -5
  590. data/lib/rubocop/cop/variable_force/assignment.rb +35 -7
  591. data/lib/rubocop/cop/variable_force/branch.rb +1 -1
  592. data/lib/rubocop/cop/variable_force/scope.rb +1 -1
  593. data/lib/rubocop/cop/variable_force/variable.rb +14 -3
  594. data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
  595. data/lib/rubocop/cop/variable_force.rb +40 -19
  596. data/lib/rubocop/cops_documentation_generator.rb +133 -56
  597. data/lib/rubocop/core_ext/string.rb +2 -6
  598. data/lib/rubocop/directive_comment.rb +54 -18
  599. data/lib/rubocop/ext/regexp_node.rb +17 -35
  600. data/lib/rubocop/ext/regexp_parser.rb +7 -21
  601. data/lib/rubocop/file_finder.rb +11 -9
  602. data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
  603. data/lib/rubocop/formatter/disabled_config_formatter.rb +26 -10
  604. data/lib/rubocop/formatter/formatter_set.rb +8 -2
  605. data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
  606. data/lib/rubocop/formatter/html_formatter.rb +38 -15
  607. data/lib/rubocop/formatter/json_formatter.rb +0 -1
  608. data/lib/rubocop/formatter/junit_formatter.rb +71 -24
  609. data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
  610. data/lib/rubocop/formatter/offense_count_formatter.rb +13 -3
  611. data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
  612. data/lib/rubocop/formatter/tap_formatter.rb +3 -7
  613. data/lib/rubocop/formatter.rb +1 -1
  614. data/lib/rubocop/lockfile.rb +58 -7
  615. data/lib/rubocop/lsp/diagnostic.rb +189 -0
  616. data/lib/rubocop/lsp/logger.rb +22 -0
  617. data/lib/rubocop/lsp/routes.rb +227 -0
  618. data/lib/rubocop/lsp/runtime.rb +69 -0
  619. data/lib/rubocop/lsp/server.rb +70 -0
  620. data/lib/rubocop/lsp/severity.rb +27 -0
  621. data/lib/rubocop/lsp/stdin_runner.rb +85 -0
  622. data/lib/rubocop/lsp.rb +36 -0
  623. data/lib/rubocop/magic_comment.rb +24 -14
  624. data/lib/rubocop/options.rb +54 -23
  625. data/lib/rubocop/path_util.rb +21 -10
  626. data/lib/rubocop/pending_cops_reporter.rb +56 -0
  627. data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
  628. data/lib/rubocop/plugin/load_error.rb +26 -0
  629. data/lib/rubocop/plugin/loader.rb +100 -0
  630. data/lib/rubocop/plugin/not_supported_error.rb +29 -0
  631. data/lib/rubocop/plugin.rb +46 -0
  632. data/lib/rubocop/rake_task.rb +5 -2
  633. data/lib/rubocop/remote_config.rb +5 -1
  634. data/lib/rubocop/result_cache.rb +29 -30
  635. data/lib/rubocop/rspec/cop_helper.rb +20 -2
  636. data/lib/rubocop/rspec/expect_offense.rb +31 -12
  637. data/lib/rubocop/rspec/shared_contexts.rb +114 -21
  638. data/lib/rubocop/rspec/support.rb +7 -2
  639. data/lib/rubocop/runner.rb +40 -13
  640. data/lib/rubocop/server/cache.rb +63 -10
  641. data/lib/rubocop/server/cli.rb +2 -2
  642. data/lib/rubocop/server/client_command/base.rb +10 -0
  643. data/lib/rubocop/server/client_command/exec.rb +4 -4
  644. data/lib/rubocop/server/client_command/start.rb +11 -1
  645. data/lib/rubocop/server/core.rb +5 -0
  646. data/lib/rubocop/server/server_command/exec.rb +0 -1
  647. data/lib/rubocop/string_interpreter.rb +3 -3
  648. data/lib/rubocop/target_finder.rb +97 -82
  649. data/lib/rubocop/target_ruby.rb +102 -77
  650. data/lib/rubocop/version.rb +67 -9
  651. data/lib/rubocop/yaml_duplication_checker.rb +20 -26
  652. data/lib/rubocop.rb +69 -2
  653. data/lib/ruby_lsp/rubocop/addon.rb +75 -0
  654. data/lib/ruby_lsp/rubocop/runtime_adapter.rb +65 -0
  655. metadata +136 -42
  656. data/lib/rubocop/cop/naming/predicate_name.rb +0 -134
  657. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
  658. /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
@@ -20,6 +20,10 @@ module RuboCop
20
20
 
21
21
  # @deprecated Use `ProcessedSource#line_with_comment?`, `contains_comment?` or similar
22
22
  def comment_lines?(node)
23
+ warn Rainbow(<<~WARNING).yellow, uplevel: 1
24
+ `comment_lines?` is deprecated. Use `ProcessedSource#line_with_comment?`, `contains_comment?` or similar instead.
25
+ WARNING
26
+
23
27
  processed_source[line_range(node)].any? { |line| comment_line?(line) }
24
28
  end
25
29
 
@@ -28,7 +32,7 @@ module RuboCop
28
32
  end
29
33
 
30
34
  def parentheses?(node)
31
- node.loc.respond_to?(:end) && node.loc.end && node.loc.end.is?(')')
35
+ node.loc_is?(:end, ')')
32
36
  end
33
37
 
34
38
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
@@ -70,9 +74,9 @@ module RuboCop
70
74
 
71
75
  def args_begin(node)
72
76
  loc = node.loc
73
- selector = if node.super_type? || node.yield_type?
77
+ selector = if node.type?(:super, :yield)
74
78
  loc.keyword
75
- elsif node.def_type? || node.defs_type?
79
+ elsif node.any_def_type?
76
80
  loc.name
77
81
  else
78
82
  loc.selector
@@ -142,7 +146,7 @@ module RuboCop
142
146
  end
143
147
 
144
148
  def escape_string(string)
145
- string.inspect[1..-2].tap { |s| s.gsub!(/\\"/, '"') }
149
+ string.inspect[1..-2].tap { |s| s.gsub!('\\"', '"') }
146
150
  end
147
151
 
148
152
  def to_string_literal(string)
@@ -173,7 +177,9 @@ module RuboCop
173
177
  def same_line?(node1, node2)
174
178
  line1 = line(node1)
175
179
  line2 = line(node2)
176
- line1 && line2 && line1 == line2
180
+ return false unless line1 && line2
181
+
182
+ line1 == line2
177
183
  end
178
184
 
179
185
  def indent(node, offset: 0)
@@ -187,11 +193,18 @@ module RuboCop
187
193
  enforced_style.sub(/^Enforced/, 'Supported').sub('Style', 'Styles')
188
194
  end
189
195
 
196
+ def parse_regexp(text)
197
+ Regexp::Parser.parse(text)
198
+ rescue Regexp::Parser::Error
199
+ # Upon encountering an invalid regular expression,
200
+ # we aim to proceed and identify any remaining potential offenses.
201
+ nil
202
+ end
203
+
190
204
  private
191
205
 
192
206
  def compatible_external_encoding_for?(src)
193
- src = src.dup if RUBY_ENGINE == 'jruby'
194
- src.force_encoding(Encoding.default_external).valid_encoding?
207
+ src.dup.force_encoding(Encoding.default_external).valid_encoding?
195
208
  end
196
209
 
197
210
  def include_or_equal?(source, target)
@@ -5,15 +5,19 @@ module RuboCop
5
5
  module Utils
6
6
  # Parses {Kernel#sprintf} format strings.
7
7
  class FormatString
8
- DIGIT_DOLLAR = /(\d+)\$/.freeze
8
+ # Escaping the `#` in `INTERPOLATION` and `TEMPLATE_NAME` is necessary to
9
+ # avoid a bug in Ruby 3.2.0
10
+ # See: https://bugs.ruby-lang.org/issues/19379
11
+ DIGIT_DOLLAR = /(?<arg_number>\d+)\$/.freeze
12
+ INTERPOLATION = /\#\{.*?\}/.freeze
9
13
  FLAG = /[ #0+-]|#{DIGIT_DOLLAR}/.freeze
10
14
  NUMBER_ARG = /\*#{DIGIT_DOLLAR}?/.freeze
11
- NUMBER = /\d+|#{NUMBER_ARG}/.freeze
15
+ NUMBER = /\d+|#{NUMBER_ARG}|#{INTERPOLATION}/.freeze
12
16
  WIDTH = /(?<width>#{NUMBER})/.freeze
13
- PRECISION = /\.(?<precision>#{NUMBER})/.freeze
17
+ PRECISION = /\.(?<precision>#{NUMBER}?)/.freeze
14
18
  TYPE = /(?<type>[bBdiouxXeEfgGaAcps])/.freeze
15
19
  NAME = /<(?<name>\w+)>/.freeze
16
- TEMPLATE_NAME = /\{(?<name>\w+)\}/.freeze
20
+ TEMPLATE_NAME = /(?<!\#)\{(?<name>\w+)\}/.freeze
17
21
 
18
22
  SEQUENCE = /
19
23
  % (?<type>%)
@@ -41,7 +45,7 @@ module RuboCop
41
45
  #
42
46
  # @see https://ruby-doc.org/core-2.6.3/Kernel.html#method-i-format
43
47
  class FormatSequence
44
- attr_reader :begin_pos, :end_pos, :flags, :width, :precision, :name, :type
48
+ attr_reader :begin_pos, :end_pos, :flags, :width, :precision, :name, :type, :arg_number
45
49
 
46
50
  def initialize(match)
47
51
  @source = match[0]
@@ -52,6 +56,7 @@ module RuboCop
52
56
  @precision = match[:precision]
53
57
  @name = match[:name]
54
58
  @type = match[:type]
59
+ @arg_number = match[:arg_number]
55
60
  end
56
61
 
57
62
  def percent?
@@ -9,9 +9,10 @@ module RuboCop
9
9
 
10
10
  MULTIPLE_LEFT_HAND_SIDE_TYPE = :mlhs
11
11
 
12
- attr_reader :node, :variable, :referenced, :references
12
+ attr_reader :node, :variable, :referenced, :references, :reassigned
13
13
 
14
14
  alias referenced? referenced
15
+ alias reassigned? reassigned
15
16
 
16
17
  def initialize(node, variable)
17
18
  unless VARIABLE_ASSIGNMENT_TYPES.include?(node.type)
@@ -24,6 +25,7 @@ module RuboCop
24
25
  @variable = variable
25
26
  @referenced = false
26
27
  @references = []
28
+ @reassigned = false
27
29
  end
28
30
 
29
31
  def name
@@ -39,8 +41,14 @@ module RuboCop
39
41
  @referenced = true
40
42
  end
41
43
 
44
+ def reassigned!
45
+ return if referenced?
46
+
47
+ @reassigned = true
48
+ end
49
+
42
50
  def used?
43
- @variable.captured_by_block? || @referenced
51
+ (!reassigned? && @variable.captured_by_block?) || @referenced
44
52
  end
45
53
 
46
54
  def regexp_named_capture?
@@ -102,10 +110,17 @@ module RuboCop
102
110
  end
103
111
 
104
112
  def multiple_assignment_node
105
- grandparent_node = node.parent&.parent
106
- return nil unless grandparent_node
113
+ return nil unless (candidate_mlhs_node = node.parent)
114
+
115
+ # In `(foo, bar), *baz`, the splat node must be traversed as well.
116
+ candidate_mlhs_node = candidate_mlhs_node.parent if candidate_mlhs_node.splat_type?
117
+
118
+ return nil unless candidate_mlhs_node.mlhs_type?
119
+ return nil unless (grandparent_node = node.parent.parent)
120
+ if (node = find_multiple_assignment_node(grandparent_node))
121
+ return node
122
+ end
107
123
  return nil unless grandparent_node.type == MULTIPLE_ASSIGNMENT_TYPE
108
- return nil unless node.parent.type == MULTIPLE_LEFT_HAND_SIDE_TYPE
109
124
 
110
125
  grandparent_node
111
126
  end
@@ -118,9 +133,22 @@ module RuboCop
118
133
  end
119
134
 
120
135
  def for_assignment_node
121
- return nil unless node.parent&.for_type?
136
+ return unless (parent_node = node.parent)
137
+ return parent_node if parent_node.for_type?
122
138
 
123
- node.parent
139
+ grandparent_node = parent_node.parent
140
+ return grandparent_node if parent_node.mlhs_type? && grandparent_node&.for_type?
141
+
142
+ nil
143
+ end
144
+
145
+ def find_multiple_assignment_node(grandparent_node)
146
+ return unless grandparent_node.type == MULTIPLE_LEFT_HAND_SIDE_TYPE
147
+
148
+ parent = grandparent_node.parent
149
+ return parent if parent.type == MULTIPLE_ASSIGNMENT_TYPE
150
+
151
+ find_multiple_assignment_node(parent)
124
152
  end
125
153
  end
126
154
  end
@@ -74,7 +74,7 @@ module RuboCop
74
74
  def parent
75
75
  return @parent if instance_variable_defined?(:@parent)
76
76
 
77
- @branch = Branch.of(control_node, scope: scope)
77
+ @parent = Branch.of(control_node, scope: scope)
78
78
  end
79
79
 
80
80
  def each_ancestor(include_self: false, &block)
@@ -46,7 +46,7 @@ module RuboCop
46
46
  else
47
47
  child_index = case node.type
48
48
  when :module, :sclass then 1
49
- when :def, :class, :block, :numblock then 2
49
+ when :def, :class, :block, :numblock, :itblock then 2
50
50
  when :defs then 3
51
51
  end
52
52
 
@@ -29,7 +29,18 @@ module RuboCop
29
29
  end
30
30
 
31
31
  def assign(node)
32
- @assignments << Assignment.new(node, self)
32
+ assignment = Assignment.new(node, self)
33
+
34
+ mark_last_as_reassigned!(assignment)
35
+
36
+ @assignments << assignment
37
+ end
38
+
39
+ def mark_last_as_reassigned!(assignment)
40
+ return if captured_by_block?
41
+ return unless assignment.branch == @assignments.last&.branch
42
+
43
+ @assignments.last&.reassigned!
33
44
  end
34
45
 
35
46
  def referenced?
@@ -68,7 +79,7 @@ module RuboCop
68
79
  parent = parent.parent if parent&.begin_type?
69
80
  return false if parent.nil?
70
81
 
71
- (parent.if_type? || parent.while_type? || parent.until_type?) && parent.modifier_form?
82
+ parent.type?(:if, :while, :until) && parent.modifier_form?
72
83
  end
73
84
 
74
85
  def capture_with_block!
@@ -96,7 +107,7 @@ module RuboCop
96
107
  end
97
108
 
98
109
  def method_argument?
99
- argument? && %i[def defs].include?(@scope.node.type)
110
+ argument? && @scope.node.any_def_type?
100
111
  end
101
112
 
102
113
  def block_argument?
@@ -61,8 +61,8 @@ module RuboCop
61
61
  "at #{node.source_range}, #{node.inspect}"
62
62
  end
63
63
 
64
- variable.assign(node)
65
64
  mark_variable_as_captured_by_block_if_so(variable)
65
+ variable.assign(node)
66
66
  end
67
67
 
68
68
  def reference_variable(name, node)
@@ -87,8 +87,8 @@ module RuboCop
87
87
  # So just skip.
88
88
  return unless variable
89
89
 
90
- variable.reference!(node)
91
90
  mark_variable_as_captured_by_block_if_so(variable)
91
+ variable.reference!(node)
92
92
  end
93
93
 
94
94
  def find_variable(name)
@@ -100,7 +100,7 @@ module RuboCop
100
100
 
101
101
  # Only block scope allows referencing outer scope variables.
102
102
  node = scope.node
103
- return nil unless node.block_type? || node.numblock_type?
103
+ return nil unless node.any_block_type?
104
104
  end
105
105
 
106
106
  nil
@@ -113,14 +113,14 @@ module RuboCop
113
113
  def accessible_variables
114
114
  scope_stack.reverse_each.with_object([]) do |scope, variables|
115
115
  variables.concat(scope.variables.values)
116
- break variables unless scope.node.block_type? || scope.node.numblock_type?
116
+ break variables unless scope.node.any_block_type?
117
117
  end
118
118
  end
119
119
 
120
120
  private
121
121
 
122
122
  def mark_variable_as_captured_by_block_if_so(variable)
123
- return unless current_scope.node.block_type? || current_scope.node.numblock_type?
123
+ return unless current_scope.node.any_block_type?
124
124
  return if variable.scope == current_scope
125
125
 
126
126
  variable.capture_with_block!
@@ -27,7 +27,10 @@ module RuboCop
27
27
  class VariableForce < Force # rubocop:disable Metrics/ClassLength
28
28
  VARIABLE_ASSIGNMENT_TYPE = :lvasgn
29
29
  REGEXP_NAMED_CAPTURE_TYPE = :match_with_lvasgn
30
- VARIABLE_ASSIGNMENT_TYPES = [VARIABLE_ASSIGNMENT_TYPE, REGEXP_NAMED_CAPTURE_TYPE].freeze
30
+ PATTERN_MATCH_VARIABLE_TYPE = :match_var
31
+ VARIABLE_ASSIGNMENT_TYPES = [
32
+ VARIABLE_ASSIGNMENT_TYPE, REGEXP_NAMED_CAPTURE_TYPE, PATTERN_MATCH_VARIABLE_TYPE
33
+ ].freeze
31
34
 
32
35
  ARGUMENT_DECLARATION_TYPES = [
33
36
  :arg, :optarg, :restarg,
@@ -51,7 +54,7 @@ module RuboCop
51
54
 
52
55
  ZERO_ARITY_SUPER_TYPE = :zsuper
53
56
 
54
- TWISTED_SCOPE_TYPES = %i[block numblock class sclass defs module].freeze
57
+ TWISTED_SCOPE_TYPES = %i[block numblock itblock class sclass defs module].freeze
55
58
  SCOPE_TYPES = (TWISTED_SCOPE_TYPES + [:def]).freeze
56
59
 
57
60
  SEND_TYPE = :send
@@ -68,6 +71,8 @@ module RuboCop
68
71
  end
69
72
  end
70
73
 
74
+ BRANCH_NODES = %i[if case case_match rescue].freeze
75
+
71
76
  def variable_table
72
77
  @variable_table ||= VariableTable.new(self)
73
78
  end
@@ -112,6 +117,7 @@ module RuboCop
112
117
  NODE_HANDLER_METHOD_NAMES = [
113
118
  [VARIABLE_ASSIGNMENT_TYPE, :process_variable_assignment],
114
119
  [REGEXP_NAMED_CAPTURE_TYPE, :process_regexp_named_captures],
120
+ [PATTERN_MATCH_VARIABLE_TYPE, :process_pattern_match_variable],
115
121
  [MULTIPLE_ASSIGNMENT_TYPE, :process_variable_multiple_assignment],
116
122
  [VARIABLE_REFERENCE_TYPE, :process_variable_referencing],
117
123
  [RESCUE_TYPE, :process_rescue],
@@ -175,6 +181,14 @@ module RuboCop
175
181
  skip_children!
176
182
  end
177
183
 
184
+ def process_pattern_match_variable(node)
185
+ name = node.children.first
186
+
187
+ variable_table.declare_variable(name, node) unless variable_table.variable_exist?(name)
188
+
189
+ skip_children!
190
+ end
191
+
178
192
  def regexp_captured_names(node)
179
193
  regexp = node.to_regexp
180
194
 
@@ -182,15 +196,10 @@ module RuboCop
182
196
  end
183
197
 
184
198
  def process_variable_operator_assignment(node)
185
- if LOGICAL_OPERATOR_ASSIGNMENT_TYPES.include?(node.type)
186
- asgn_node, rhs_node = *node
187
- else
188
- asgn_node, _operator, rhs_node = *node
189
- end
190
-
199
+ asgn_node = node.lhs
191
200
  return unless asgn_node.lvasgn_type?
192
201
 
193
- name = asgn_node.children.first
202
+ name = asgn_node.name
194
203
 
195
204
  variable_table.declare_variable(name, asgn_node) unless variable_table.variable_exist?(name)
196
205
 
@@ -210,7 +219,7 @@ module RuboCop
210
219
  # before processing rhs nodes.
211
220
 
212
221
  variable_table.reference_variable(name, node)
213
- process_node(rhs_node)
222
+ process_node(node.rhs)
214
223
  variable_table.assign_to_variable(name, asgn_node)
215
224
 
216
225
  skip_children!
@@ -289,7 +298,7 @@ module RuboCop
289
298
  variable_table.accessible_variables.each { |variable| variable.reference!(node) }
290
299
  end
291
300
 
292
- # Mark all assignments which are referenced in the same loop
301
+ # Mark last assignments which are referenced in the same loop
293
302
  # as referenced by ignoring AST order since they would be referenced
294
303
  # in next iteration.
295
304
  def mark_assignments_as_referenced_in_loop(node)
@@ -301,13 +310,12 @@ module RuboCop
301
310
  # would be skipped here.
302
311
  next unless variable
303
312
 
304
- variable.assignments.each do |assignment|
305
- next if assignment_nodes_in_loop.none? do |assignment_node|
306
- assignment_node.equal?(assignment.node)
307
- end
308
-
309
- assignment.reference!(node)
313
+ loop_assignments = variable.assignments.select do |assignment|
314
+ assignment_nodes_in_loop.include?(assignment.node)
310
315
  end
316
+ next unless loop_assignments.any?
317
+
318
+ reference_assignments(loop_assignments, node)
311
319
  end
312
320
  end
313
321
 
@@ -343,8 +351,21 @@ module RuboCop
343
351
  when :lvasgn
344
352
  AssignmentReference.new(node)
345
353
  when *OPERATOR_ASSIGNMENT_TYPES
346
- asgn_node = node.children.first
347
- VariableReference.new(asgn_node.children.first) if asgn_node.lvasgn_type?
354
+ VariableReference.new(node.lhs.name) if node.lhs.lvasgn_type?
355
+ end
356
+ end
357
+
358
+ def reference_assignments(loop_assignments, loop_node)
359
+ node = loop_assignments.first.node
360
+
361
+ # If inside a branching statement, mark all as referenced.
362
+ # Otherwise, mark only the last assignment as referenced.
363
+ # Note that `rescue` must be considered as branching because of
364
+ # the `retry` keyword.
365
+ if node.each_ancestor(*BRANCH_NODES).any? || node.parent.each_descendant(*BRANCH_NODES).any?
366
+ loop_assignments.each { |assignment| assignment.reference!(loop_node) }
367
+ else
368
+ loop_assignments.last&.reference!(loop_node)
348
369
  end
349
370
  end
350
371