rubocop 1.57.1 → 1.81.6

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 (638) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +92 -89
  4. data/assets/output.css.erb +159 -0
  5. data/assets/output.html.erb +1 -160
  6. data/config/default.yml +540 -86
  7. data/config/internal_affairs.yml +31 -0
  8. data/config/obsoletion.yml +8 -3
  9. data/exe/rubocop +1 -7
  10. data/lib/rubocop/cached_data.rb +21 -5
  11. data/lib/rubocop/cli/command/auto_generate_config.rb +30 -17
  12. data/lib/rubocop/cli/command/execute_runner.rb +4 -4
  13. data/lib/rubocop/cli/command/lsp.rb +4 -4
  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 +28 -4
  19. data/lib/rubocop/comment_config.rb +3 -3
  20. data/lib/rubocop/config.rb +92 -22
  21. data/lib/rubocop/config_finder.rb +12 -2
  22. data/lib/rubocop/config_loader.rb +71 -58
  23. data/lib/rubocop/config_loader_resolver.rb +48 -17
  24. data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
  25. data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
  26. data/lib/rubocop/config_obsoletion.rb +56 -9
  27. data/lib/rubocop/config_store.rb +5 -0
  28. data/lib/rubocop/config_validator.rb +39 -20
  29. data/lib/rubocop/cop/autocorrect_logic.rb +57 -27
  30. data/lib/rubocop/cop/base.rb +79 -18
  31. data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
  32. data/lib/rubocop/cop/bundler/gem_comment.rb +2 -2
  33. data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
  34. data/lib/rubocop/cop/bundler/gem_version.rb +4 -5
  35. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
  36. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
  37. data/lib/rubocop/cop/cop.rb +30 -4
  38. data/lib/rubocop/cop/correctors/alignment_corrector.rb +8 -16
  39. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
  40. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +13 -16
  41. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
  42. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +6 -3
  43. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
  44. data/lib/rubocop/cop/documentation.rb +32 -5
  45. data/lib/rubocop/cop/exclude_limit.rb +1 -1
  46. data/lib/rubocop/cop/force.rb +12 -0
  47. data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
  48. data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
  49. data/lib/rubocop/cop/gemspec/dependency_version.rb +3 -5
  50. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +3 -4
  51. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +39 -17
  52. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
  53. data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
  54. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -3
  55. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
  56. data/lib/rubocop/cop/generator.rb +6 -0
  57. data/lib/rubocop/cop/internal_affairs/cop_description.rb +0 -4
  58. data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
  59. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
  60. data/lib/rubocop/cop/internal_affairs/example_description.rb +13 -8
  61. data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
  62. data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
  63. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
  64. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
  65. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
  66. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
  67. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +124 -30
  68. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
  69. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
  70. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +233 -0
  71. data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
  72. data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
  73. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
  74. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
  75. data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
  76. data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
  77. data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
  78. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
  79. data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
  80. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
  81. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +11 -2
  82. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
  83. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
  84. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +23 -2
  85. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +0 -5
  86. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
  87. data/lib/rubocop/cop/internal_affairs.rb +9 -0
  88. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -2
  89. data/lib/rubocop/cop/layout/argument_alignment.rb +3 -10
  90. data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
  91. data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
  92. data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
  93. data/lib/rubocop/cop/layout/block_alignment.rb +32 -13
  94. data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
  95. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  96. data/lib/rubocop/cop/layout/class_structure.rb +45 -10
  97. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
  98. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  99. data/lib/rubocop/cop/layout/condition_position.rb +0 -4
  100. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -2
  101. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  102. data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
  103. data/lib/rubocop/cop/layout/empty_comment.rb +3 -1
  104. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +4 -4
  105. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
  106. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
  107. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +36 -21
  108. data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
  109. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +37 -7
  110. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
  111. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
  112. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
  113. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
  114. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +12 -8
  115. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
  116. data/lib/rubocop/cop/layout/end_alignment.rb +16 -4
  117. data/lib/rubocop/cop/layout/extra_spacing.rb +5 -11
  118. data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -11
  119. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +19 -10
  120. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
  121. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
  122. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
  123. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +3 -3
  124. data/lib/rubocop/cop/layout/hash_alignment.rb +8 -11
  125. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -3
  126. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
  127. data/lib/rubocop/cop/layout/indentation_width.rb +13 -13
  128. data/lib/rubocop/cop/layout/leading_comment_space.rb +83 -1
  129. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +12 -3
  130. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
  131. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
  132. data/lib/rubocop/cop/layout/line_length.rb +177 -29
  133. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
  134. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
  135. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
  136. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
  137. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -4
  138. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  139. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
  140. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +11 -8
  141. data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
  142. data/lib/rubocop/cop/layout/redundant_line_break.rb +32 -46
  143. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +16 -9
  144. data/lib/rubocop/cop/layout/single_line_block_chain.rb +6 -1
  145. data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
  146. data/lib/rubocop/cop/layout/space_after_comma.rb +1 -1
  147. data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
  148. data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
  149. data/lib/rubocop/cop/layout/space_around_keyword.rb +8 -2
  150. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
  151. data/lib/rubocop/cop/layout/space_around_operators.rb +80 -37
  152. data/lib/rubocop/cop/layout/space_before_block_braces.rb +20 -10
  153. data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
  154. data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
  155. data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
  156. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
  157. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
  158. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +8 -1
  159. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -5
  160. data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
  161. data/lib/rubocop/cop/legacy/corrector.rb +12 -2
  162. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -3
  163. data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
  164. data/lib/rubocop/cop/lint/ambiguous_range.rb +9 -1
  165. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
  166. data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
  167. data/lib/rubocop/cop/lint/assignment_in_condition.rb +7 -9
  168. data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
  169. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +11 -13
  170. data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -4
  171. data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -14
  172. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
  173. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +4 -3
  174. data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
  175. data/lib/rubocop/cop/lint/cop_directive_syntax.rb +90 -0
  176. data/lib/rubocop/cop/lint/debugger.rb +30 -8
  177. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -2
  178. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +7 -13
  179. data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
  180. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
  181. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +0 -4
  182. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
  183. data/lib/rubocop/cop/lint/duplicate_methods.rb +110 -32
  184. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +6 -43
  185. data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
  186. data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
  187. data/lib/rubocop/cop/lint/else_layout.rb +0 -2
  188. data/lib/rubocop/cop/lint/empty_conditional_body.rb +29 -58
  189. data/lib/rubocop/cop/lint/empty_ensure.rb +2 -12
  190. data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
  191. data/lib/rubocop/cop/lint/empty_file.rb +0 -2
  192. data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -5
  193. data/lib/rubocop/cop/lint/empty_when.rb +1 -3
  194. data/lib/rubocop/cop/lint/ensure_return.rb +2 -10
  195. data/lib/rubocop/cop/lint/erb_new_arguments.rb +24 -23
  196. data/lib/rubocop/cop/lint/float_comparison.rb +58 -15
  197. data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -8
  198. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -12
  199. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
  200. data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
  201. data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
  202. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +23 -12
  203. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +0 -7
  204. data/lib/rubocop/cop/lint/interpolation_check.rb +9 -4
  205. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
  206. data/lib/rubocop/cop/lint/literal_as_condition.rb +126 -11
  207. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
  208. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +49 -12
  209. data/lib/rubocop/cop/lint/loop.rb +6 -12
  210. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -2
  211. data/lib/rubocop/cop/lint/missing_super.rb +2 -2
  212. data/lib/rubocop/cop/lint/mixed_case_range.rb +14 -12
  213. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  214. data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -12
  215. data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -25
  216. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -7
  217. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +12 -3
  218. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +6 -8
  219. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
  220. data/lib/rubocop/cop/lint/number_conversion.rb +9 -5
  221. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
  222. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
  223. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
  224. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
  225. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +6 -11
  226. data/lib/rubocop/cop/lint/percent_string_array.rb +0 -4
  227. data/lib/rubocop/cop/lint/percent_symbol_array.rb +0 -4
  228. data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
  229. data/lib/rubocop/cop/lint/rand_one.rb +0 -4
  230. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +4 -2
  231. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +2 -2
  232. data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
  233. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +164 -12
  234. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +9 -8
  235. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -6
  236. data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
  237. data/lib/rubocop/cop/lint/redundant_with_index.rb +9 -2
  238. data/lib/rubocop/cop/lint/redundant_with_object.rb +5 -2
  239. data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
  240. data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
  241. data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
  242. data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
  243. data/lib/rubocop/cop/lint/rescue_exception.rb +2 -9
  244. data/lib/rubocop/cop/lint/rescue_type.rb +5 -11
  245. data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -13
  246. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +20 -9
  247. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +109 -41
  248. data/lib/rubocop/cop/lint/script_permission.rb +3 -3
  249. data/lib/rubocop/cop/lint/self_assignment.rb +72 -10
  250. data/lib/rubocop/cop/lint/shadowed_argument.rb +8 -7
  251. data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
  252. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +19 -11
  253. data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
  254. data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
  255. data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
  256. data/lib/rubocop/cop/lint/symbol_conversion.rb +8 -3
  257. data/lib/rubocop/cop/lint/syntax.rb +10 -4
  258. data/lib/rubocop/cop/lint/to_enum_arguments.rb +2 -4
  259. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  260. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
  261. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
  262. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
  263. data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
  264. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +4 -3
  265. data/lib/rubocop/cop/lint/unreachable_code.rb +56 -9
  266. data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -8
  267. data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
  268. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
  269. data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
  270. data/lib/rubocop/cop/lint/useless_access_modifier.rb +36 -10
  271. data/lib/rubocop/cop/lint/useless_assignment.rb +21 -16
  272. data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
  273. data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
  274. data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
  275. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -4
  276. data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
  277. data/lib/rubocop/cop/lint/useless_numeric_operation.rb +79 -0
  278. data/lib/rubocop/cop/lint/useless_or.rb +98 -0
  279. data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
  280. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
  281. data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -29
  282. data/lib/rubocop/cop/lint/useless_times.rb +2 -2
  283. data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
  284. data/lib/rubocop/cop/lint/void.rb +92 -18
  285. data/lib/rubocop/cop/message_annotator.rb +7 -3
  286. data/lib/rubocop/cop/metrics/abc_size.rb +4 -4
  287. data/lib/rubocop/cop/metrics/block_length.rb +7 -5
  288. data/lib/rubocop/cop/metrics/block_nesting.rb +20 -8
  289. data/lib/rubocop/cop/metrics/class_length.rb +21 -15
  290. data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
  291. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
  292. data/lib/rubocop/cop/metrics/method_length.rb +15 -6
  293. data/lib/rubocop/cop/metrics/module_length.rb +7 -6
  294. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  295. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
  296. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +8 -9
  297. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
  298. data/lib/rubocop/cop/mixin/alignment.rb +8 -4
  299. data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
  300. data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
  301. data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
  302. data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
  303. data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
  304. data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
  305. data/lib/rubocop/cop/mixin/code_length.rb +12 -1
  306. data/lib/rubocop/cop/mixin/comments_help.rb +23 -14
  307. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
  308. data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
  309. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  310. data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
  311. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
  312. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
  313. data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
  314. data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
  315. data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
  316. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +23 -12
  317. data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
  318. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
  319. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +45 -35
  320. data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
  321. data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
  322. data/lib/rubocop/cop/mixin/line_length_help.rb +34 -12
  323. data/lib/rubocop/cop/mixin/method_complexity.rb +17 -7
  324. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -9
  325. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
  326. data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
  327. data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
  328. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +68 -30
  329. data/lib/rubocop/cop/mixin/range_help.rb +15 -4
  330. data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
  331. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
  332. data/lib/rubocop/cop/mixin/statement_modifier.rb +11 -5
  333. data/lib/rubocop/cop/mixin/string_help.rb +2 -2
  334. data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
  335. data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
  336. data/lib/rubocop/cop/mixin/trailing_comma.rb +21 -5
  337. data/lib/rubocop/cop/naming/accessor_method_name.rb +11 -6
  338. data/lib/rubocop/cop/naming/block_forwarding.rb +39 -8
  339. data/lib/rubocop/cop/naming/constant_name.rb +7 -9
  340. data/lib/rubocop/cop/naming/file_name.rb +4 -6
  341. data/lib/rubocop/cop/naming/inclusive_language.rb +13 -5
  342. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +13 -14
  343. data/lib/rubocop/cop/naming/method_name.rb +185 -15
  344. data/lib/rubocop/cop/naming/predicate_method.rb +319 -0
  345. data/lib/rubocop/cop/naming/predicate_prefix.rb +204 -0
  346. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +14 -13
  347. data/lib/rubocop/cop/naming/variable_name.rb +50 -6
  348. data/lib/rubocop/cop/naming/variable_number.rb +2 -3
  349. data/lib/rubocop/cop/offense.rb +4 -5
  350. data/lib/rubocop/cop/registry.rb +9 -6
  351. data/lib/rubocop/cop/security/compound_hash.rb +4 -2
  352. data/lib/rubocop/cop/security/eval.rb +2 -1
  353. data/lib/rubocop/cop/security/json_load.rb +33 -11
  354. data/lib/rubocop/cop/security/open.rb +3 -2
  355. data/lib/rubocop/cop/security/yaml_load.rb +3 -2
  356. data/lib/rubocop/cop/style/access_modifier_declarations.rb +172 -32
  357. data/lib/rubocop/cop/style/accessor_grouping.rb +43 -9
  358. data/lib/rubocop/cop/style/alias.rb +2 -1
  359. data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
  360. data/lib/rubocop/cop/style/and_or.rb +1 -1
  361. data/lib/rubocop/cop/style/arguments_forwarding.rb +228 -36
  362. data/lib/rubocop/cop/style/array_first_last.rb +80 -0
  363. data/lib/rubocop/cop/style/array_intersect.rb +115 -39
  364. data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
  365. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
  366. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
  367. data/lib/rubocop/cop/style/bitwise_predicate.rb +107 -0
  368. data/lib/rubocop/cop/style/block_delimiters.rb +52 -21
  369. data/lib/rubocop/cop/style/case_like_if.rb +14 -17
  370. data/lib/rubocop/cop/style/class_and_module_children.rb +52 -11
  371. data/lib/rubocop/cop/style/class_check.rb +1 -0
  372. data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
  373. data/lib/rubocop/cop/style/class_vars.rb +3 -3
  374. data/lib/rubocop/cop/style/collection_compact.rb +25 -15
  375. data/lib/rubocop/cop/style/collection_methods.rb +2 -1
  376. data/lib/rubocop/cop/style/collection_querying.rb +167 -0
  377. data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
  378. data/lib/rubocop/cop/style/combinable_loops.rb +22 -8
  379. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  380. data/lib/rubocop/cop/style/commented_keyword.rb +30 -4
  381. data/lib/rubocop/cop/style/comparable_between.rb +78 -0
  382. data/lib/rubocop/cop/style/concat_array_literals.rb +2 -1
  383. data/lib/rubocop/cop/style/conditional_assignment.rb +57 -40
  384. data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
  385. data/lib/rubocop/cop/style/copyright.rb +31 -21
  386. data/lib/rubocop/cop/style/data_inheritance.rb +8 -1
  387. data/lib/rubocop/cop/style/date_time.rb +5 -4
  388. data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -7
  389. data/lib/rubocop/cop/style/dig_chain.rb +89 -0
  390. data/lib/rubocop/cop/style/documentation.rb +25 -25
  391. data/lib/rubocop/cop/style/documentation_method.rb +20 -0
  392. data/lib/rubocop/cop/style/double_negation.rb +5 -5
  393. data/lib/rubocop/cop/style/each_for_simple_loop.rb +11 -15
  394. data/lib/rubocop/cop/style/each_with_object.rb +3 -4
  395. data/lib/rubocop/cop/style/empty_else.rb +10 -7
  396. data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
  397. data/lib/rubocop/cop/style/empty_literal.rb +36 -23
  398. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  399. data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
  400. data/lib/rubocop/cop/style/endless_method.rb +163 -18
  401. data/lib/rubocop/cop/style/eval_with_location.rb +23 -31
  402. data/lib/rubocop/cop/style/exact_regexp_match.rb +6 -5
  403. data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
  404. data/lib/rubocop/cop/style/explicit_block_argument.rb +19 -6
  405. data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
  406. data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
  407. data/lib/rubocop/cop/style/file_null.rb +89 -0
  408. data/lib/rubocop/cop/style/file_read.rb +2 -5
  409. data/lib/rubocop/cop/style/file_touch.rb +75 -0
  410. data/lib/rubocop/cop/style/file_write.rb +2 -5
  411. data/lib/rubocop/cop/style/float_division.rb +8 -4
  412. data/lib/rubocop/cop/style/for.rb +3 -1
  413. data/lib/rubocop/cop/style/format_string.rb +9 -9
  414. data/lib/rubocop/cop/style/format_string_token.rb +38 -11
  415. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -2
  416. data/lib/rubocop/cop/style/global_std_stream.rb +10 -1
  417. data/lib/rubocop/cop/style/global_vars.rb +1 -3
  418. data/lib/rubocop/cop/style/guard_clause.rb +20 -4
  419. data/lib/rubocop/cop/style/hash_conversion.rb +16 -9
  420. data/lib/rubocop/cop/style/hash_each_methods.rb +110 -12
  421. data/lib/rubocop/cop/style/hash_except.rb +38 -146
  422. data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
  423. data/lib/rubocop/cop/style/hash_slice.rb +80 -0
  424. data/lib/rubocop/cop/style/hash_syntax.rb +35 -7
  425. data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
  426. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
  427. data/lib/rubocop/cop/style/identical_conditional_branches.rb +37 -7
  428. data/lib/rubocop/cop/style/if_inside_else.rb +11 -15
  429. data/lib/rubocop/cop/style/if_unless_modifier.rb +36 -9
  430. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
  431. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +8 -8
  432. data/lib/rubocop/cop/style/if_with_semicolon.rb +60 -6
  433. data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
  434. data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
  435. data/lib/rubocop/cop/style/inverse_methods.rb +22 -18
  436. data/lib/rubocop/cop/style/invertible_unless_condition.rb +48 -6
  437. data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
  438. data/lib/rubocop/cop/style/it_assignment.rb +93 -0
  439. data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
  440. data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
  441. data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
  442. data/lib/rubocop/cop/style/lambda.rb +2 -1
  443. data/lib/rubocop/cop/style/lambda_call.rb +10 -4
  444. data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
  445. data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
  446. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +82 -50
  447. data/lib/rubocop/cop/style/map_into_array.rb +236 -0
  448. data/lib/rubocop/cop/style/map_to_hash.rb +29 -10
  449. data/lib/rubocop/cop/style/map_to_set.rb +4 -5
  450. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +52 -25
  451. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +21 -5
  452. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +30 -13
  453. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
  454. data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -2
  455. data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
  456. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  457. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +35 -5
  458. data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
  459. data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
  460. data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
  461. data/lib/rubocop/cop/style/multiline_method_signature.rb +10 -9
  462. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +5 -3
  463. data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
  464. data/lib/rubocop/cop/style/multiple_comparison.rb +53 -60
  465. data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
  466. data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
  467. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  468. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
  469. data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
  470. data/lib/rubocop/cop/style/next.rb +45 -1
  471. data/lib/rubocop/cop/style/nil_comparison.rb +11 -7
  472. data/lib/rubocop/cop/style/not.rb +1 -1
  473. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  474. data/lib/rubocop/cop/style/numeric_predicate.rb +12 -4
  475. data/lib/rubocop/cop/style/object_then.rb +16 -14
  476. data/lib/rubocop/cop/style/one_line_conditional.rb +48 -15
  477. data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
  478. data/lib/rubocop/cop/style/operator_method_call.rb +27 -9
  479. data/lib/rubocop/cop/style/or_assignment.rb +3 -6
  480. data/lib/rubocop/cop/style/parallel_assignment.rb +47 -45
  481. data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
  482. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  483. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  484. data/lib/rubocop/cop/style/proc.rb +2 -2
  485. data/lib/rubocop/cop/style/quoted_symbols.rb +2 -4
  486. data/lib/rubocop/cop/style/raise_args.rb +19 -14
  487. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  488. data/lib/rubocop/cop/style/redundant_argument.rb +29 -3
  489. data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
  490. data/lib/rubocop/cop/style/redundant_assignment.rb +11 -3
  491. data/lib/rubocop/cop/style/redundant_begin.rb +41 -2
  492. data/lib/rubocop/cop/style/redundant_condition.rb +97 -25
  493. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +19 -7
  494. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +17 -14
  495. data/lib/rubocop/cop/style/redundant_each.rb +7 -4
  496. data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
  497. data/lib/rubocop/cop/style/redundant_fetch_block.rb +4 -12
  498. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  499. data/lib/rubocop/cop/style/redundant_filter_chain.rb +5 -4
  500. data/lib/rubocop/cop/style/redundant_format.rb +283 -0
  501. data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
  502. data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
  503. data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
  504. data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
  505. data/lib/rubocop/cop/style/redundant_line_continuation.rb +72 -19
  506. data/lib/rubocop/cop/style/redundant_parentheses.rb +149 -49
  507. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
  508. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +12 -1
  509. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
  510. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +16 -24
  511. data/lib/rubocop/cop/style/redundant_return.rb +9 -3
  512. data/lib/rubocop/cop/style/redundant_self.rb +32 -20
  513. data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
  514. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
  515. data/lib/rubocop/cop/style/redundant_sort.rb +10 -9
  516. data/lib/rubocop/cop/style/redundant_sort_by.rb +19 -3
  517. data/lib/rubocop/cop/style/redundant_string_escape.rb +3 -3
  518. data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
  519. data/lib/rubocop/cop/style/require_order.rb +2 -2
  520. data/lib/rubocop/cop/style/rescue_modifier.rb +18 -4
  521. data/lib/rubocop/cop/style/return_nil.rb +2 -2
  522. data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +54 -12
  523. data/lib/rubocop/cop/style/safe_navigation.rb +163 -62
  524. data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
  525. data/lib/rubocop/cop/style/sample.rb +3 -4
  526. data/lib/rubocop/cop/style/select_by_regexp.rb +20 -13
  527. data/lib/rubocop/cop/style/self_assignment.rb +12 -18
  528. data/lib/rubocop/cop/style/semicolon.rb +30 -7
  529. data/lib/rubocop/cop/style/send.rb +4 -4
  530. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
  531. data/lib/rubocop/cop/style/signal_exception.rb +2 -3
  532. data/lib/rubocop/cop/style/single_argument_dig.rb +16 -8
  533. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  534. data/lib/rubocop/cop/style/single_line_do_end_block.rb +18 -5
  535. data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
  536. data/lib/rubocop/cop/style/slicing_with_range.rb +105 -10
  537. data/lib/rubocop/cop/style/sole_nested_conditional.rb +72 -87
  538. data/lib/rubocop/cop/style/special_global_vars.rb +2 -3
  539. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
  540. data/lib/rubocop/cop/style/string_chars.rb +1 -0
  541. data/lib/rubocop/cop/style/string_concatenation.rb +21 -17
  542. data/lib/rubocop/cop/style/string_literals.rb +1 -1
  543. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  544. data/lib/rubocop/cop/style/strip.rb +7 -4
  545. data/lib/rubocop/cop/style/struct_inheritance.rb +9 -2
  546. data/lib/rubocop/cop/style/super_arguments.rb +221 -0
  547. data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
  548. data/lib/rubocop/cop/style/swap_values.rb +4 -15
  549. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  550. data/lib/rubocop/cop/style/symbol_proc.rb +78 -6
  551. data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
  552. data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
  553. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +56 -2
  554. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
  555. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  556. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
  557. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
  558. data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
  559. data/lib/rubocop/cop/style/unless_else.rb +10 -9
  560. data/lib/rubocop/cop/style/unpack_first.rb +11 -14
  561. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
  562. data/lib/rubocop/cop/style/while_until_do.rb +0 -2
  563. data/lib/rubocop/cop/style/while_until_modifier.rb +0 -2
  564. data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
  565. data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
  566. data/lib/rubocop/cop/style/zero_length_predicate.rb +32 -24
  567. data/lib/rubocop/cop/team.rb +28 -4
  568. data/lib/rubocop/cop/util.rb +19 -6
  569. data/lib/rubocop/cop/utils/format_string.rb +20 -5
  570. data/lib/rubocop/cop/variable_force/assignment.rb +24 -5
  571. data/lib/rubocop/cop/variable_force/branch.rb +1 -1
  572. data/lib/rubocop/cop/variable_force/scope.rb +1 -1
  573. data/lib/rubocop/cop/variable_force/variable.rb +14 -3
  574. data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
  575. data/lib/rubocop/cop/variable_force.rb +43 -20
  576. data/lib/rubocop/cops_documentation_generator.rb +135 -58
  577. data/lib/rubocop/core_ext/string.rb +2 -6
  578. data/lib/rubocop/directive_comment.rb +54 -18
  579. data/lib/rubocop/ext/regexp_node.rb +17 -35
  580. data/lib/rubocop/ext/regexp_parser.rb +4 -21
  581. data/lib/rubocop/file_finder.rb +9 -4
  582. data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
  583. data/lib/rubocop/formatter/disabled_config_formatter.rb +43 -14
  584. data/lib/rubocop/formatter/formatter_set.rb +8 -2
  585. data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
  586. data/lib/rubocop/formatter/html_formatter.rb +38 -15
  587. data/lib/rubocop/formatter/json_formatter.rb +0 -1
  588. data/lib/rubocop/formatter/junit_formatter.rb +70 -23
  589. data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
  590. data/lib/rubocop/formatter/offense_count_formatter.rb +13 -3
  591. data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
  592. data/lib/rubocop/formatter/tap_formatter.rb +3 -7
  593. data/lib/rubocop/formatter.rb +1 -1
  594. data/lib/rubocop/lockfile.rb +58 -7
  595. data/lib/rubocop/lsp/diagnostic.rb +190 -0
  596. data/lib/rubocop/lsp/logger.rb +3 -3
  597. data/lib/rubocop/lsp/routes.rb +77 -40
  598. data/lib/rubocop/lsp/runtime.rb +20 -50
  599. data/lib/rubocop/lsp/server.rb +6 -4
  600. data/lib/rubocop/lsp/severity.rb +1 -1
  601. data/lib/rubocop/lsp/stdin_runner.rb +69 -0
  602. data/lib/rubocop/lsp.rb +36 -0
  603. data/lib/rubocop/magic_comment.rb +12 -4
  604. data/lib/rubocop/options.rb +43 -22
  605. data/lib/rubocop/path_util.rb +21 -10
  606. data/lib/rubocop/pending_cops_reporter.rb +56 -0
  607. data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
  608. data/lib/rubocop/plugin/load_error.rb +26 -0
  609. data/lib/rubocop/plugin/loader.rb +100 -0
  610. data/lib/rubocop/plugin/not_supported_error.rb +29 -0
  611. data/lib/rubocop/plugin.rb +46 -0
  612. data/lib/rubocop/rake_task.rb +5 -2
  613. data/lib/rubocop/remote_config.rb +5 -1
  614. data/lib/rubocop/result_cache.rb +29 -34
  615. data/lib/rubocop/rspec/cop_helper.rb +20 -2
  616. data/lib/rubocop/rspec/expect_offense.rb +31 -12
  617. data/lib/rubocop/rspec/shared_contexts.rb +112 -18
  618. data/lib/rubocop/rspec/support.rb +7 -2
  619. data/lib/rubocop/runner.rb +40 -13
  620. data/lib/rubocop/server/cache.rb +63 -11
  621. data/lib/rubocop/server/cli.rb +2 -2
  622. data/lib/rubocop/server/client_command/base.rb +10 -0
  623. data/lib/rubocop/server/client_command/exec.rb +3 -3
  624. data/lib/rubocop/server/client_command/start.rb +11 -1
  625. data/lib/rubocop/server/core.rb +5 -0
  626. data/lib/rubocop/server/server_command/exec.rb +0 -1
  627. data/lib/rubocop/target_finder.rb +93 -82
  628. data/lib/rubocop/target_ruby.rb +111 -81
  629. data/lib/rubocop/version.rb +67 -9
  630. data/lib/rubocop/yaml_duplication_checker.rb +20 -26
  631. data/lib/rubocop.rb +61 -3
  632. data/lib/ruby_lsp/rubocop/addon.rb +90 -0
  633. data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
  634. metadata +103 -51
  635. data/lib/rubocop/cop/naming/predicate_name.rb +0 -134
  636. data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
  637. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
  638. /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
data/lib/rubocop.rb CHANGED
@@ -1,12 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'English'
4
+
5
+ # fileutils is autoloaded by pathname,
6
+ # but must be explicitly loaded here for inclusion in `$LOADED_FEATURES`.
7
+ require 'fileutils'
8
+
4
9
  before_us = $LOADED_FEATURES.dup
5
10
  require 'rainbow'
6
11
 
7
- require 'forwardable'
8
12
  require 'regexp_parser'
9
13
  require 'set'
14
+ require 'stringio'
10
15
  require 'unicode/display_width'
11
16
 
12
17
  # we have to require RuboCop's version, before rubocop-ast's
@@ -70,15 +75,19 @@ require_relative 'rubocop/cop/mixin/allowed_identifiers'
70
75
  require_relative 'rubocop/cop/mixin/allowed_methods'
71
76
  require_relative 'rubocop/cop/mixin/allowed_pattern'
72
77
  require_relative 'rubocop/cop/mixin/allowed_receivers'
78
+ require_relative 'rubocop/cop/mixin/forbidden_identifiers'
79
+ require_relative 'rubocop/cop/mixin/forbidden_pattern'
73
80
  require_relative 'rubocop/cop/mixin/auto_corrector' # rubocop:todo Naming/InclusiveLanguage
74
81
  require_relative 'rubocop/cop/mixin/check_assignment'
75
82
  require_relative 'rubocop/cop/mixin/check_line_breakable'
83
+ require_relative 'rubocop/cop/mixin/check_single_line_suitability'
76
84
  require_relative 'rubocop/cop/mixin/configurable_max'
77
85
  require_relative 'rubocop/cop/mixin/code_length' # relies on configurable_max
78
86
  require_relative 'rubocop/cop/mixin/configurable_enforced_style'
79
87
  require_relative 'rubocop/cop/mixin/configurable_formatting'
80
88
  require_relative 'rubocop/cop/mixin/configurable_naming'
81
89
  require_relative 'rubocop/cop/mixin/configurable_numbering'
90
+ require_relative 'rubocop/cop/mixin/dig_help'
82
91
  require_relative 'rubocop/cop/mixin/documentation_comment'
83
92
  require_relative 'rubocop/cop/mixin/duplication'
84
93
  require_relative 'rubocop/cop/mixin/range_help'
@@ -86,12 +95,14 @@ require_relative 'rubocop/cop/mixin/annotation_comment' # relies on range
86
95
  require_relative 'rubocop/cop/mixin/empty_lines_around_body' # relies on range
87
96
  require_relative 'rubocop/cop/mixin/empty_parameter'
88
97
  require_relative 'rubocop/cop/mixin/end_keyword_alignment'
98
+ require_relative 'rubocop/cop/mixin/endless_method_rewriter'
89
99
  require_relative 'rubocop/cop/mixin/enforce_superclass'
90
100
  require_relative 'rubocop/cop/mixin/first_element_line_break'
91
101
  require_relative 'rubocop/cop/mixin/frozen_string_literal'
92
102
  require_relative 'rubocop/cop/mixin/gem_declaration'
93
103
  require_relative 'rubocop/cop/mixin/gemspec_help'
94
104
  require_relative 'rubocop/cop/mixin/hash_alignment_styles'
105
+ require_relative 'rubocop/cop/mixin/hash_subset'
95
106
  require_relative 'rubocop/cop/mixin/hash_transform_method'
96
107
  require_relative 'rubocop/cop/mixin/integer_node'
97
108
  require_relative 'rubocop/cop/mixin/interpolation'
@@ -139,7 +150,6 @@ require_relative 'rubocop/cop/mixin/comments_help' # relies on visibility_help
139
150
  require_relative 'rubocop/cop/mixin/def_node' # relies on visibility_help
140
151
 
141
152
  require_relative 'rubocop/cop/utils/format_string'
142
- require_relative 'rubocop/cop/utils/regexp_ranges'
143
153
 
144
154
  require_relative 'rubocop/cop/migration/department_name'
145
155
 
@@ -169,6 +179,8 @@ require_relative 'rubocop/cop/bundler/gem_version'
169
179
  require_relative 'rubocop/cop/bundler/insecure_protocol_source'
170
180
  require_relative 'rubocop/cop/bundler/ordered_gems'
171
181
 
182
+ require_relative 'rubocop/cop/gemspec/add_runtime_dependency'
183
+ require_relative 'rubocop/cop/gemspec/attribute_assignment'
172
184
  require_relative 'rubocop/cop/gemspec/dependency_version'
173
185
  require_relative 'rubocop/cop/gemspec/deprecated_attribute_assignment'
174
186
  require_relative 'rubocop/cop/gemspec/development_dependencies'
@@ -199,6 +211,7 @@ require_relative 'rubocop/cop/layout/empty_line_after_guard_clause'
199
211
  require_relative 'rubocop/cop/layout/empty_line_after_magic_comment'
200
212
  require_relative 'rubocop/cop/layout/empty_line_after_multiline_condition'
201
213
  require_relative 'rubocop/cop/layout/empty_line_between_defs'
214
+ require_relative 'rubocop/cop/layout/empty_lines_after_module_inclusion'
202
215
  require_relative 'rubocop/cop/layout/empty_lines_around_access_modifier'
203
216
  require_relative 'rubocop/cop/layout/empty_lines_around_arguments'
204
217
  require_relative 'rubocop/cop/layout/empty_lines_around_attribute_accessor'
@@ -278,12 +291,14 @@ require_relative 'rubocop/cop/layout/space_inside_string_interpolation'
278
291
  require_relative 'rubocop/cop/layout/trailing_empty_lines'
279
292
  require_relative 'rubocop/cop/layout/trailing_whitespace'
280
293
 
294
+ require_relative 'rubocop/cop/lint/utils/nil_receiver_checker'
281
295
  require_relative 'rubocop/cop/lint/ambiguous_assignment'
282
296
  require_relative 'rubocop/cop/lint/ambiguous_block_association'
283
297
  require_relative 'rubocop/cop/lint/ambiguous_operator'
284
298
  require_relative 'rubocop/cop/lint/ambiguous_operator_precedence'
285
299
  require_relative 'rubocop/cop/lint/ambiguous_range'
286
300
  require_relative 'rubocop/cop/lint/ambiguous_regexp_literal'
301
+ require_relative 'rubocop/cop/lint/array_literal_in_regexp'
287
302
  require_relative 'rubocop/cop/lint/assignment_in_condition'
288
303
  require_relative 'rubocop/cop/lint/big_decimal_new'
289
304
  require_relative 'rubocop/cop/lint/binary_operator_with_identical_operands'
@@ -291,7 +306,9 @@ require_relative 'rubocop/cop/lint/boolean_symbol'
291
306
  require_relative 'rubocop/cop/lint/circular_argument_reference'
292
307
  require_relative 'rubocop/cop/lint/constant_definition_in_block'
293
308
  require_relative 'rubocop/cop/lint/constant_overwritten_in_rescue'
309
+ require_relative 'rubocop/cop/lint/constant_reassignment'
294
310
  require_relative 'rubocop/cop/lint/constant_resolution'
311
+ require_relative 'rubocop/cop/lint/cop_directive_syntax'
295
312
  require_relative 'rubocop/cop/lint/debugger'
296
313
  require_relative 'rubocop/cop/lint/deprecated_class_methods'
297
314
  require_relative 'rubocop/cop/lint/deprecated_constants'
@@ -307,6 +324,7 @@ require_relative 'rubocop/cop/lint/duplicate_methods'
307
324
  require_relative 'rubocop/cop/lint/duplicate_regexp_character_class_element'
308
325
  require_relative 'rubocop/cop/lint/duplicate_require'
309
326
  require_relative 'rubocop/cop/lint/duplicate_rescue_exception'
327
+ require_relative 'rubocop/cop/lint/duplicate_set_element'
310
328
  require_relative 'rubocop/cop/lint/each_with_object_argument'
311
329
  require_relative 'rubocop/cop/lint/else_layout'
312
330
  require_relative 'rubocop/cop/lint/empty_block'
@@ -319,12 +337,14 @@ require_relative 'rubocop/cop/lint/empty_in_pattern'
319
337
  require_relative 'rubocop/cop/lint/empty_interpolation'
320
338
  require_relative 'rubocop/cop/lint/empty_when'
321
339
  require_relative 'rubocop/cop/lint/ensure_return'
340
+ require_relative 'rubocop/cop/lint/shared_mutable_default'
322
341
  require_relative 'rubocop/cop/lint/erb_new_arguments'
323
342
  require_relative 'rubocop/cop/lint/flip_flop'
324
343
  require_relative 'rubocop/cop/lint/float_comparison'
325
344
  require_relative 'rubocop/cop/lint/float_out_of_range'
326
345
  require_relative 'rubocop/cop/lint/format_parameter_mismatch'
327
346
  require_relative 'rubocop/cop/lint/hash_compare_by_identity'
347
+ require_relative 'rubocop/cop/lint/hash_new_with_keyword_arguments_as_default'
328
348
  require_relative 'rubocop/cop/lint/heredoc_method_call_position'
329
349
  require_relative 'rubocop/cop/lint/identity_comparison'
330
350
  require_relative 'rubocop/cop/lint/implicit_string_concatenation'
@@ -332,8 +352,10 @@ require_relative 'rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler'
332
352
  require_relative 'rubocop/cop/lint/ineffective_access_modifier'
333
353
  require_relative 'rubocop/cop/lint/inherit_exception'
334
354
  require_relative 'rubocop/cop/lint/interpolation_check'
355
+ require_relative 'rubocop/cop/lint/it_without_arguments_in_block'
335
356
  require_relative 'rubocop/cop/lint/lambda_without_literal_block'
336
357
  require_relative 'rubocop/cop/lint/literal_as_condition'
358
+ require_relative 'rubocop/cop/lint/literal_assignment_in_condition'
337
359
  require_relative 'rubocop/cop/lint/literal_in_interpolation'
338
360
  require_relative 'rubocop/cop/lint/loop'
339
361
  require_relative 'rubocop/cop/lint/missing_cop_enable_directive'
@@ -350,6 +372,7 @@ require_relative 'rubocop/cop/lint/non_deterministic_require_order'
350
372
  require_relative 'rubocop/cop/lint/non_local_exit_from_iterator'
351
373
  require_relative 'rubocop/cop/lint/number_conversion'
352
374
  require_relative 'rubocop/cop/lint/numbered_parameter_assignment'
375
+ require_relative 'rubocop/cop/lint/numeric_operation_with_constant_result'
353
376
  require_relative 'rubocop/cop/lint/or_assignment_to_constant'
354
377
  require_relative 'rubocop/cop/lint/ordered_magic_comments'
355
378
  require_relative 'rubocop/cop/lint/out_of_range_regexp_ref'
@@ -366,6 +389,7 @@ require_relative 'rubocop/cop/lint/redundant_require_statement'
366
389
  require_relative 'rubocop/cop/lint/redundant_safe_navigation'
367
390
  require_relative 'rubocop/cop/lint/redundant_splat_expansion'
368
391
  require_relative 'rubocop/cop/lint/redundant_string_coercion'
392
+ require_relative 'rubocop/cop/lint/redundant_type_conversion'
369
393
  require_relative 'rubocop/cop/lint/redundant_with_index'
370
394
  require_relative 'rubocop/cop/lint/redundant_with_object'
371
395
  require_relative 'rubocop/cop/lint/refinement_import_methods'
@@ -387,6 +411,7 @@ require_relative 'rubocop/cop/lint/shadowed_exception'
387
411
  require_relative 'rubocop/cop/lint/shadowing_outer_local_variable'
388
412
  require_relative 'rubocop/cop/lint/struct_new_override'
389
413
  require_relative 'rubocop/cop/lint/suppressed_exception'
414
+ require_relative 'rubocop/cop/lint/suppressed_exception_in_number_conversion'
390
415
  require_relative 'rubocop/cop/lint/symbol_conversion'
391
416
  require_relative 'rubocop/cop/lint/syntax'
392
417
  require_relative 'rubocop/cop/lint/to_enum_arguments'
@@ -395,6 +420,7 @@ require_relative 'rubocop/cop/lint/top_level_return_with_argument'
395
420
  require_relative 'rubocop/cop/lint/trailing_comma_in_attribute_declaration'
396
421
  require_relative 'rubocop/cop/lint/triple_quotes'
397
422
  require_relative 'rubocop/cop/lint/underscore_prefixed_variable_name'
423
+ require_relative 'rubocop/cop/lint/unescaped_bracket_in_regexp'
398
424
  require_relative 'rubocop/cop/lint/unexpected_block_arity'
399
425
  require_relative 'rubocop/cop/lint/unified_integer'
400
426
  require_relative 'rubocop/cop/lint/unmodified_reduce_accumulator'
@@ -406,8 +432,13 @@ require_relative 'rubocop/cop/lint/uri_escape_unescape'
406
432
  require_relative 'rubocop/cop/lint/uri_regexp'
407
433
  require_relative 'rubocop/cop/lint/useless_access_modifier'
408
434
  require_relative 'rubocop/cop/lint/useless_assignment'
435
+ require_relative 'rubocop/cop/lint/useless_constant_scoping'
436
+ require_relative 'rubocop/cop/lint/useless_default_value_argument'
437
+ require_relative 'rubocop/cop/lint/useless_defined'
409
438
  require_relative 'rubocop/cop/lint/useless_else_without_rescue'
410
439
  require_relative 'rubocop/cop/lint/useless_method_definition'
440
+ require_relative 'rubocop/cop/lint/useless_numeric_operation'
441
+ require_relative 'rubocop/cop/lint/useless_or'
411
442
  require_relative 'rubocop/cop/lint/useless_rescue'
412
443
  require_relative 'rubocop/cop/lint/useless_ruby2_keywords'
413
444
  require_relative 'rubocop/cop/lint/useless_setter_call'
@@ -443,7 +474,8 @@ require_relative 'rubocop/cop/naming/memoized_instance_variable_name'
443
474
  require_relative 'rubocop/cop/naming/method_name'
444
475
  require_relative 'rubocop/cop/naming/method_parameter_name'
445
476
  require_relative 'rubocop/cop/naming/binary_operator_parameter_name'
446
- require_relative 'rubocop/cop/naming/predicate_name'
477
+ require_relative 'rubocop/cop/naming/predicate_method'
478
+ require_relative 'rubocop/cop/naming/predicate_prefix'
447
479
  require_relative 'rubocop/cop/naming/rescued_exceptions_variable_name'
448
480
  require_relative 'rubocop/cop/naming/variable_name'
449
481
  require_relative 'rubocop/cop/naming/variable_number'
@@ -451,10 +483,13 @@ require_relative 'rubocop/cop/naming/variable_number'
451
483
  require_relative 'rubocop/cop/style/access_modifier_declarations'
452
484
  require_relative 'rubocop/cop/style/accessor_grouping'
453
485
  require_relative 'rubocop/cop/style/alias'
486
+ require_relative 'rubocop/cop/style/ambiguous_endless_method_definition'
454
487
  require_relative 'rubocop/cop/style/and_or'
455
488
  require_relative 'rubocop/cop/style/arguments_forwarding'
456
489
  require_relative 'rubocop/cop/style/array_coercion'
490
+ require_relative 'rubocop/cop/style/array_first_last'
457
491
  require_relative 'rubocop/cop/style/array_intersect'
492
+ require_relative 'rubocop/cop/style/array_intersect_with_single_element'
458
493
  require_relative 'rubocop/cop/style/array_join'
459
494
  require_relative 'rubocop/cop/style/ascii_comments'
460
495
  require_relative 'rubocop/cop/style/attr'
@@ -462,6 +497,7 @@ require_relative 'rubocop/cop/style/auto_resource_cleanup'
462
497
  require_relative 'rubocop/cop/style/bare_percent_literals'
463
498
  require_relative 'rubocop/cop/style/begin_block'
464
499
  require_relative 'rubocop/cop/style/bisected_attr_accessor'
500
+ require_relative 'rubocop/cop/style/bitwise_predicate'
465
501
  require_relative 'rubocop/cop/style/block_comments'
466
502
  require_relative 'rubocop/cop/style/block_delimiters'
467
503
  require_relative 'rubocop/cop/style/case_equality'
@@ -475,12 +511,15 @@ require_relative 'rubocop/cop/style/class_methods_definitions'
475
511
  require_relative 'rubocop/cop/style/class_vars'
476
512
  require_relative 'rubocop/cop/style/collection_compact'
477
513
  require_relative 'rubocop/cop/style/collection_methods'
514
+ require_relative 'rubocop/cop/style/collection_querying'
478
515
  require_relative 'rubocop/cop/style/colon_method_call'
479
516
  require_relative 'rubocop/cop/style/colon_method_definition'
517
+ require_relative 'rubocop/cop/style/combinable_defined'
480
518
  require_relative 'rubocop/cop/style/combinable_loops'
481
519
  require_relative 'rubocop/cop/style/command_literal'
482
520
  require_relative 'rubocop/cop/style/comment_annotation'
483
521
  require_relative 'rubocop/cop/style/commented_keyword'
522
+ require_relative 'rubocop/cop/style/comparable_between'
484
523
  require_relative 'rubocop/cop/style/comparable_clamp'
485
524
  require_relative 'rubocop/cop/style/concat_array_literals'
486
525
  require_relative 'rubocop/cop/style/conditional_assignment'
@@ -489,6 +528,7 @@ require_relative 'rubocop/cop/style/copyright'
489
528
  require_relative 'rubocop/cop/style/data_inheritance'
490
529
  require_relative 'rubocop/cop/style/date_time'
491
530
  require_relative 'rubocop/cop/style/def_with_parentheses'
531
+ require_relative 'rubocop/cop/style/dig_chain'
492
532
  require_relative 'rubocop/cop/style/dir'
493
533
  require_relative 'rubocop/cop/style/dir_empty'
494
534
  require_relative 'rubocop/cop/style/disable_cops_within_source_code_directive'
@@ -506,6 +546,7 @@ require_relative 'rubocop/cop/style/empty_heredoc'
506
546
  require_relative 'rubocop/cop/style/empty_lambda_parameter'
507
547
  require_relative 'rubocop/cop/style/empty_literal'
508
548
  require_relative 'rubocop/cop/style/empty_method'
549
+ require_relative 'rubocop/cop/style/empty_string_inside_interpolation'
509
550
  require_relative 'rubocop/cop/style/endless_method'
510
551
  require_relative 'rubocop/cop/style/encoding'
511
552
  require_relative 'rubocop/cop/style/end_block'
@@ -518,7 +559,9 @@ require_relative 'rubocop/cop/style/explicit_block_argument'
518
559
  require_relative 'rubocop/cop/style/exponential_notation'
519
560
  require_relative 'rubocop/cop/style/fetch_env_var'
520
561
  require_relative 'rubocop/cop/style/file_empty'
562
+ require_relative 'rubocop/cop/style/file_null'
521
563
  require_relative 'rubocop/cop/style/file_read'
564
+ require_relative 'rubocop/cop/style/file_touch'
522
565
  require_relative 'rubocop/cop/style/file_write'
523
566
  require_relative 'rubocop/cop/style/float_division'
524
567
  require_relative 'rubocop/cop/style/for'
@@ -532,7 +575,9 @@ require_relative 'rubocop/cop/style/hash_as_last_array_item'
532
575
  require_relative 'rubocop/cop/style/hash_conversion'
533
576
  require_relative 'rubocop/cop/style/hash_each_methods'
534
577
  require_relative 'rubocop/cop/style/hash_except'
578
+ require_relative 'rubocop/cop/style/hash_fetch_chain'
535
579
  require_relative 'rubocop/cop/style/hash_like_case'
580
+ require_relative 'rubocop/cop/style/hash_slice'
536
581
  require_relative 'rubocop/cop/style/hash_syntax'
537
582
  require_relative 'rubocop/cop/style/hash_transform_keys'
538
583
  require_relative 'rubocop/cop/style/hash_transform_values'
@@ -549,11 +594,15 @@ require_relative 'rubocop/cop/style/inverse_methods'
549
594
  require_relative 'rubocop/cop/style/inline_comment'
550
595
  require_relative 'rubocop/cop/style/invertible_unless_condition'
551
596
  require_relative 'rubocop/cop/style/ip_addresses'
597
+ require_relative 'rubocop/cop/style/it_assignment'
598
+ require_relative 'rubocop/cop/style/it_block_parameter'
599
+ require_relative 'rubocop/cop/style/keyword_arguments_merging'
552
600
  require_relative 'rubocop/cop/style/keyword_parameters_order'
553
601
  require_relative 'rubocop/cop/style/lambda'
554
602
  require_relative 'rubocop/cop/style/lambda_call'
555
603
  require_relative 'rubocop/cop/style/line_end_concatenation'
556
604
  require_relative 'rubocop/cop/style/magic_comment_format'
605
+ require_relative 'rubocop/cop/style/map_into_array'
557
606
  require_relative 'rubocop/cop/style/map_to_hash'
558
607
  require_relative 'rubocop/cop/style/map_to_set'
559
608
  require_relative 'rubocop/cop/style/method_call_without_args_parentheses'
@@ -564,6 +613,7 @@ require_relative 'rubocop/cop/style/numbered_parameters'
564
613
  require_relative 'rubocop/cop/style/open_struct_use'
565
614
  require_relative 'rubocop/cop/style/operator_method_call'
566
615
  require_relative 'rubocop/cop/style/redundant_array_constructor'
616
+ require_relative 'rubocop/cop/style/redundant_array_flatten'
567
617
  require_relative 'rubocop/cop/style/redundant_assignment'
568
618
  require_relative 'rubocop/cop/style/redundant_constant_base'
569
619
  require_relative 'rubocop/cop/style/redundant_current_directory_in_path'
@@ -572,14 +622,17 @@ require_relative 'rubocop/cop/style/redundant_each'
572
622
  require_relative 'rubocop/cop/style/redundant_fetch_block'
573
623
  require_relative 'rubocop/cop/style/redundant_file_extension_in_require'
574
624
  require_relative 'rubocop/cop/style/redundant_filter_chain'
625
+ require_relative 'rubocop/cop/style/redundant_format'
575
626
  require_relative 'rubocop/cop/style/redundant_heredoc_delimiter_quotes'
576
627
  require_relative 'rubocop/cop/style/redundant_initialize'
628
+ require_relative 'rubocop/cop/style/redundant_interpolation_unfreeze'
577
629
  require_relative 'rubocop/cop/style/redundant_line_continuation'
578
630
  require_relative 'rubocop/cop/style/redundant_regexp_argument'
579
631
  require_relative 'rubocop/cop/style/redundant_regexp_constructor'
580
632
  require_relative 'rubocop/cop/style/redundant_self_assignment'
581
633
  require_relative 'rubocop/cop/style/redundant_self_assignment_branch'
582
634
  require_relative 'rubocop/cop/style/require_order'
635
+ require_relative 'rubocop/cop/style/safe_navigation_chain_length'
583
636
  require_relative 'rubocop/cop/style/single_line_do_end_block'
584
637
  require_relative 'rubocop/cop/style/sole_nested_conditional'
585
638
  require_relative 'rubocop/cop/style/static_class'
@@ -662,6 +715,7 @@ require_relative 'rubocop/cop/style/select_by_regexp'
662
715
  require_relative 'rubocop/cop/style/self_assignment'
663
716
  require_relative 'rubocop/cop/style/semicolon'
664
717
  require_relative 'rubocop/cop/style/send'
718
+ require_relative 'rubocop/cop/style/send_with_literal_method_name'
665
719
  require_relative 'rubocop/cop/style/signal_exception'
666
720
  require_relative 'rubocop/cop/style/single_argument_dig'
667
721
  require_relative 'rubocop/cop/style/single_line_block_params'
@@ -678,6 +732,8 @@ require_relative 'rubocop/cop/style/string_literals_in_interpolation'
678
732
  require_relative 'rubocop/cop/style/string_methods'
679
733
  require_relative 'rubocop/cop/style/strip'
680
734
  require_relative 'rubocop/cop/style/struct_inheritance'
735
+ require_relative 'rubocop/cop/style/super_arguments'
736
+ require_relative 'rubocop/cop/style/super_with_args_parentheses'
681
737
  require_relative 'rubocop/cop/style/swap_values'
682
738
  require_relative 'rubocop/cop/style/symbol_array'
683
739
  require_relative 'rubocop/cop/style/symbol_literal'
@@ -736,6 +792,7 @@ require_relative 'rubocop/config_store'
736
792
  require_relative 'rubocop/config_validator'
737
793
  require_relative 'rubocop/feature_loader'
738
794
  require_relative 'rubocop/lockfile'
795
+ require_relative 'rubocop/lsp'
739
796
  require_relative 'rubocop/target_finder'
740
797
  require_relative 'rubocop/directive_comment'
741
798
  require_relative 'rubocop/comment_config'
@@ -758,6 +815,7 @@ require_relative 'rubocop/options'
758
815
  require_relative 'rubocop/remote_config'
759
816
  require_relative 'rubocop/target_ruby'
760
817
  require_relative 'rubocop/yaml_duplication_checker'
818
+ require_relative 'rubocop/pending_cops_reporter'
761
819
 
762
820
  # rubocop:enable Style/RequireOrder
763
821
 
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../rubocop'
4
+ require_relative '../../rubocop/lsp/logger'
5
+ require_relative 'runtime_adapter'
6
+
7
+ module RubyLsp
8
+ module RuboCop
9
+ # A Ruby LSP add-on for RuboCop.
10
+ class Addon < RubyLsp::Addon
11
+ RESTART_WATCHERS = %w[.rubocop.yml .rubocop_todo.yml .rubocop].freeze
12
+
13
+ def initialize
14
+ super
15
+ @runtime_adapter = nil
16
+ end
17
+
18
+ def name
19
+ 'RuboCop'
20
+ end
21
+
22
+ def version
23
+ ::RuboCop::Version::STRING
24
+ end
25
+
26
+ def activate(global_state, message_queue)
27
+ ::RuboCop::LSP::Logger.log(
28
+ "Activating RuboCop LSP addon #{::RuboCop::Version::STRING}.", prefix: '[RuboCop]'
29
+ )
30
+
31
+ @runtime_adapter = RuntimeAdapter.new(message_queue)
32
+ global_state.register_formatter('rubocop', @runtime_adapter)
33
+ register_additional_file_watchers(global_state, message_queue)
34
+
35
+ ::RuboCop::LSP::Logger.log(
36
+ "Initialized RuboCop LSP addon #{::RuboCop::Version::STRING}.", prefix: '[RuboCop]'
37
+ )
38
+ end
39
+
40
+ def deactivate
41
+ @runtime_adapter = nil
42
+ end
43
+
44
+ # rubocop:disable Metrics/MethodLength
45
+ def register_additional_file_watchers(global_state, message_queue)
46
+ return unless global_state.supports_watching_files
47
+
48
+ message_queue << Request.new(
49
+ id: 'rubocop-file-watcher',
50
+ method: 'client/registerCapability',
51
+ params: Interface::RegistrationParams.new(
52
+ registrations: [
53
+ Interface::Registration.new(
54
+ id: 'workspace/didChangeWatchedFilesRuboCop',
55
+ method: 'workspace/didChangeWatchedFiles',
56
+ register_options: Interface::DidChangeWatchedFilesRegistrationOptions.new(
57
+ watchers: [
58
+ Interface::FileSystemWatcher.new(
59
+ glob_pattern: "**/{#{RESTART_WATCHERS.join(',')}}",
60
+ kind: Constant::WatchKind::CREATE | Constant::WatchKind::CHANGE | Constant::WatchKind::DELETE
61
+ )
62
+ ]
63
+ )
64
+ )
65
+ ]
66
+ )
67
+ )
68
+ end
69
+ # rubocop:enable Metrics/MethodLength
70
+
71
+ def workspace_did_change_watched_files(changes)
72
+ if (changed_config_file = changed_config_file(changes))
73
+ @runtime_adapter.reload_config
74
+
75
+ ::RuboCop::LSP::Logger.log(<<~MESSAGE, prefix: '[RuboCop]')
76
+ Re-initialized RuboCop LSP addon #{::RuboCop::Version::STRING} due to #{changed_config_file} change.
77
+ MESSAGE
78
+ end
79
+ end
80
+
81
+ private
82
+
83
+ def changed_config_file(changes)
84
+ RESTART_WATCHERS.find do |file_name|
85
+ changes.any? { |change| change[:uri].end_with?(file_name) }
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../rubocop/lsp/runtime'
4
+
5
+ module RubyLsp
6
+ module RuboCop
7
+ # Provides an adapter to bridge RuboCop's built-in LSP runtime with Ruby LSP's add-on.
8
+ # @api private
9
+ class RuntimeAdapter
10
+ def initialize(message_queue)
11
+ @message_queue = message_queue
12
+ reload_config
13
+ end
14
+
15
+ def reload_config
16
+ @runtime = nil
17
+ options, _paths = ::RuboCop::Options.new.parse([])
18
+
19
+ config_store = ::RuboCop::ConfigStore.new
20
+ config_store.apply_options!(options)
21
+ @runtime = ::RuboCop::LSP::Runtime.new(config_store)
22
+ rescue ::RuboCop::Error => e
23
+ @message_queue << Notification.window_show_message(
24
+ "RuboCop configuration error: #{e.message}. Formatting will not be available.",
25
+ type: Constant::MessageType::ERROR
26
+ )
27
+ end
28
+
29
+ def run_diagnostic(uri, document)
30
+ with_error_handling do
31
+ @runtime.offenses(
32
+ uri_to_path(uri),
33
+ document.source,
34
+ document.encoding,
35
+ prism_result: prism_result(document)
36
+ )
37
+ end
38
+ end
39
+
40
+ def run_formatting(uri, document)
41
+ with_error_handling do
42
+ @runtime.format(
43
+ uri_to_path(uri),
44
+ document.source,
45
+ command: 'rubocop.formatAutocorrects',
46
+ prism_result: prism_result(document)
47
+ )
48
+ end
49
+ end
50
+
51
+ def run_range_formatting(_uri, _partial_source, _base_indentation)
52
+ # Not yet supported. Should return the formatted version of `partial_source` which is
53
+ # a partial selection of the entire document. For example, it should not try to add
54
+ # a frozen_string_literal magic comment and all style corrections should start from
55
+ # the `base_indentation`.
56
+ nil
57
+ end
58
+
59
+ private
60
+
61
+ def with_error_handling
62
+ return unless @runtime
63
+
64
+ yield
65
+ rescue StandardError => e
66
+ ::RuboCop::LSP::Logger.log(e.full_message, prefix: '[RuboCop]')
67
+
68
+ message = if e.is_a?(::RuboCop::ErrorWithAnalyzedFileLocation)
69
+ "for the #{e.cop.name} cop"
70
+ else
71
+ "- #{e.message}"
72
+ end
73
+ raise Requests::Formatting::Error, <<~MSG
74
+ An internal error occurred #{message}.
75
+ Updating to a newer version of RuboCop may solve this.
76
+ For more details, run RuboCop on the command line.
77
+ MSG
78
+ end
79
+
80
+ # duplicated from: lib/standard/lsp/routes.rb
81
+ # modified to incorporate Ruby LSP's to_standardized_path method
82
+ def uri_to_path(uri)
83
+ if uri.respond_to?(:to_standardized_path) && (standardized_path = uri.to_standardized_path)
84
+ standardized_path
85
+ else
86
+ uri.to_s.delete_prefix('file://')
87
+ end
88
+ end
89
+
90
+ def prism_result(document)
91
+ prism_result = document.parse_result
92
+
93
+ # NOTE: `prism_result` must be `Prism::ParseLexResult` compatible object.
94
+ # This is for compatibility parsed result unsupported.
95
+ prism_result.is_a?(Prism::ParseLexResult) ? prism_result : nil
96
+ end
97
+ end
98
+ end
99
+ end