rubocop 1.79.2 → 1.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +2 -2
  4. data/config/default.yml +185 -20
  5. data/config/obsoletion.yml +9 -0
  6. data/exe/rubocop +1 -8
  7. data/lib/rubocop/cache_config.rb +29 -0
  8. data/lib/rubocop/cli/command/auto_generate_config.rb +30 -4
  9. data/lib/rubocop/cli/command/list_enabled_cops_for.rb +40 -0
  10. data/lib/rubocop/cli/command/lsp.rb +1 -1
  11. data/lib/rubocop/cli/command/mcp.rb +19 -0
  12. data/lib/rubocop/cli/command/show_cops.rb +2 -2
  13. data/lib/rubocop/cli/command/show_docs_url.rb +4 -8
  14. data/lib/rubocop/cli/command/suggest_extensions.rb +1 -1
  15. data/lib/rubocop/cli.rb +35 -9
  16. data/lib/rubocop/comment_config.rb +59 -17
  17. data/lib/rubocop/config.rb +14 -10
  18. data/lib/rubocop/config_finder.rb +1 -1
  19. data/lib/rubocop/config_loader.rb +37 -23
  20. data/lib/rubocop/config_loader_resolver.rb +20 -10
  21. data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -2
  22. data/lib/rubocop/config_store.rb +7 -2
  23. data/lib/rubocop/config_validator.rb +1 -1
  24. data/lib/rubocop/cop/autocorrect_logic.rb +10 -5
  25. data/lib/rubocop/cop/base.rb +8 -2
  26. data/lib/rubocop/cop/bundler/gem_version.rb +28 -28
  27. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -2
  28. data/lib/rubocop/cop/correctors/alignment_corrector.rb +26 -7
  29. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
  30. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +7 -2
  31. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -5
  32. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +33 -2
  33. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
  34. data/lib/rubocop/cop/correctors.rb +28 -0
  35. data/lib/rubocop/cop/documentation.rb +2 -3
  36. data/lib/rubocop/cop/exclude_limit.rb +31 -5
  37. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
  38. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -2
  39. data/lib/rubocop/cop/gemspec/require_mfa.rb +5 -5
  40. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +12 -7
  41. data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +8 -8
  42. data/lib/rubocop/cop/internal_affairs/itblock_handler.rb +69 -0
  43. data/lib/rubocop/cop/internal_affairs/location_exists.rb +28 -2
  44. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -0
  45. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +9 -9
  46. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +1 -1
  47. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +3 -1
  48. data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +1 -1
  49. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +4 -4
  50. data/lib/rubocop/cop/internal_affairs.rb +1 -0
  51. data/lib/rubocop/cop/layout/argument_alignment.rb +2 -2
  52. data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
  53. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
  54. data/lib/rubocop/cop/layout/case_indentation.rb +3 -1
  55. data/lib/rubocop/cop/layout/class_structure.rb +14 -7
  56. data/lib/rubocop/cop/layout/dot_position.rb +2 -2
  57. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +26 -7
  58. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +31 -13
  59. data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +2 -2
  60. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -0
  61. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +12 -2
  62. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +16 -2
  63. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +16 -2
  64. data/lib/rubocop/cop/layout/end_alignment.rb +10 -3
  65. data/lib/rubocop/cop/layout/first_argument_indentation.rb +34 -1
  66. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +26 -0
  67. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +7 -1
  68. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +25 -25
  69. data/lib/rubocop/cop/layout/hash_alignment.rb +3 -6
  70. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -2
  71. data/lib/rubocop/cop/layout/heredoc_indentation.rb +33 -3
  72. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  73. data/lib/rubocop/cop/layout/indentation_width.rb +123 -7
  74. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +1 -1
  75. data/lib/rubocop/cop/layout/line_length.rb +26 -9
  76. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +57 -57
  77. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +9 -2
  78. data/lib/rubocop/cop/layout/multiline_block_layout.rb +2 -0
  79. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +56 -56
  80. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
  81. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +229 -39
  82. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +8 -4
  83. data/lib/rubocop/cop/layout/parameter_alignment.rb +1 -1
  84. data/lib/rubocop/cop/layout/redundant_line_break.rb +3 -1
  85. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +13 -3
  86. data/lib/rubocop/cop/layout/space_after_comma.rb +2 -10
  87. data/lib/rubocop/cop/layout/space_after_semicolon.rb +1 -1
  88. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +1 -1
  89. data/lib/rubocop/cop/layout/space_around_keyword.rb +4 -2
  90. data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -1
  91. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -8
  92. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
  93. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
  94. data/lib/rubocop/cop/lint/circular_argument_reference.rb +47 -3
  95. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +4 -3
  96. data/lib/rubocop/cop/lint/constant_reassignment.rb +93 -11
  97. data/lib/rubocop/cop/lint/constant_resolution.rb +6 -6
  98. data/lib/rubocop/cop/lint/cop_directive_syntax.rb +14 -8
  99. data/lib/rubocop/cop/lint/data_define_override.rb +63 -0
  100. data/lib/rubocop/cop/lint/debugger.rb +0 -2
  101. data/lib/rubocop/cop/lint/deprecated_constants.rb +1 -1
  102. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +4 -1
  103. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +4 -4
  104. data/lib/rubocop/cop/lint/duplicate_methods.rb +111 -12
  105. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +5 -42
  106. data/lib/rubocop/cop/lint/else_layout.rb +19 -0
  107. data/lib/rubocop/cop/lint/empty_block.rb +1 -1
  108. data/lib/rubocop/cop/lint/empty_conditional_body.rb +6 -1
  109. data/lib/rubocop/cop/lint/empty_in_pattern.rb +8 -1
  110. data/lib/rubocop/cop/lint/empty_interpolation.rb +11 -0
  111. data/lib/rubocop/cop/lint/empty_when.rb +8 -1
  112. data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -1
  113. data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
  114. data/lib/rubocop/cop/lint/interpolation_check.rb +7 -2
  115. data/lib/rubocop/cop/lint/literal_as_condition.rb +5 -1
  116. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  117. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +18 -9
  118. data/lib/rubocop/cop/lint/multiple_comparison.rb +2 -2
  119. data/lib/rubocop/cop/lint/next_without_accumulator.rb +2 -0
  120. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +4 -0
  121. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +4 -2
  122. data/lib/rubocop/cop/lint/number_conversion.rb +6 -6
  123. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
  124. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +3 -13
  125. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +23 -9
  126. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +2 -11
  127. data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -2
  128. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +23 -6
  129. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -2
  130. data/lib/rubocop/cop/lint/redundant_type_conversion.rb +3 -3
  131. data/lib/rubocop/cop/lint/require_relative_self_path.rb +3 -1
  132. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -4
  133. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +17 -0
  134. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +7 -1
  135. data/lib/rubocop/cop/lint/self_assignment.rb +15 -6
  136. data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
  137. data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
  138. data/lib/rubocop/cop/lint/struct_new_override.rb +17 -1
  139. data/lib/rubocop/cop/lint/syntax.rb +25 -1
  140. data/lib/rubocop/cop/lint/to_json.rb +12 -16
  141. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -0
  142. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +1 -1
  143. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -0
  144. data/lib/rubocop/cop/lint/unreachable_code.rb +7 -5
  145. data/lib/rubocop/cop/lint/unreachable_pattern_branch.rb +113 -0
  146. data/lib/rubocop/cop/lint/unused_method_argument.rb +10 -0
  147. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
  148. data/lib/rubocop/cop/lint/useless_assignment.rb +48 -25
  149. data/lib/rubocop/cop/lint/useless_constant_scoping.rb +4 -4
  150. data/lib/rubocop/cop/lint/useless_default_value_argument.rb +2 -0
  151. data/lib/rubocop/cop/lint/useless_or.rb +15 -2
  152. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +1 -1
  153. data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +37 -11
  154. data/lib/rubocop/cop/lint/void.rb +39 -12
  155. data/lib/rubocop/cop/message_annotator.rb +1 -1
  156. data/lib/rubocop/cop/metrics/block_length.rb +1 -1
  157. data/lib/rubocop/cop/metrics/block_nesting.rb +23 -0
  158. data/lib/rubocop/cop/metrics/method_length.rb +1 -1
  159. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -3
  160. data/lib/rubocop/cop/metrics/utils/iterating_block.rb +1 -1
  161. data/lib/rubocop/cop/migration/department_name.rb +12 -1
  162. data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
  163. data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +4 -6
  164. data/lib/rubocop/cop/mixin/code_length.rb +1 -1
  165. data/lib/rubocop/cop/mixin/configurable_max.rb +6 -5
  166. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
  167. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +5 -5
  168. data/lib/rubocop/cop/mixin/hash_transform_method/autocorrection.rb +63 -0
  169. data/lib/rubocop/cop/mixin/hash_transform_method.rb +10 -60
  170. data/lib/rubocop/cop/mixin/line_length_help.rb +21 -2
  171. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
  172. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
  173. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -1
  174. data/lib/rubocop/cop/mixin/project_index_help.rb +48 -0
  175. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +5 -4
  176. data/lib/rubocop/cop/mixin/statement_modifier.rb +0 -6
  177. data/lib/rubocop/cop/mixin/trailing_comma.rb +8 -5
  178. data/lib/rubocop/cop/mixin.rb +86 -0
  179. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  180. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  181. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
  182. data/lib/rubocop/cop/naming/method_name.rb +5 -3
  183. data/lib/rubocop/cop/naming/predicate_method.rb +32 -8
  184. data/lib/rubocop/cop/naming/predicate_prefix.rb +12 -12
  185. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  186. data/lib/rubocop/cop/offense.rb +17 -1
  187. data/lib/rubocop/cop/registry.rb +62 -38
  188. data/lib/rubocop/cop/security/eval.rb +15 -2
  189. data/lib/rubocop/cop/security/io_methods.rb +1 -1
  190. data/lib/rubocop/cop/security/json_load.rb +33 -11
  191. data/lib/rubocop/cop/style/access_modifier_declarations.rb +15 -4
  192. data/lib/rubocop/cop/style/accessor_grouping.rb +4 -2
  193. data/lib/rubocop/cop/style/alias.rb +14 -2
  194. data/lib/rubocop/cop/style/and_or.rb +1 -0
  195. data/lib/rubocop/cop/style/arguments_forwarding.rb +25 -7
  196. data/lib/rubocop/cop/style/array_intersect.rb +46 -12
  197. data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
  198. data/lib/rubocop/cop/style/array_join.rb +4 -2
  199. data/lib/rubocop/cop/style/ascii_comments.rb +6 -3
  200. data/lib/rubocop/cop/style/attr.rb +5 -2
  201. data/lib/rubocop/cop/style/bare_percent_literals.rb +4 -3
  202. data/lib/rubocop/cop/style/begin_block.rb +3 -1
  203. data/lib/rubocop/cop/style/bitwise_predicate.rb +8 -1
  204. data/lib/rubocop/cop/style/block_delimiters.rb +27 -34
  205. data/lib/rubocop/cop/style/case_equality.rb +15 -13
  206. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  207. data/lib/rubocop/cop/style/class_and_module_children.rb +19 -2
  208. data/lib/rubocop/cop/style/collection_compact.rb +36 -16
  209. data/lib/rubocop/cop/style/colon_method_call.rb +3 -1
  210. data/lib/rubocop/cop/style/concat_array_literals.rb +2 -0
  211. data/lib/rubocop/cop/style/conditional_assignment.rb +8 -18
  212. data/lib/rubocop/cop/style/constant_visibility.rb +17 -12
  213. data/lib/rubocop/cop/style/copyright.rb +22 -11
  214. data/lib/rubocop/cop/style/date_time.rb +2 -2
  215. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +1 -1
  216. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +6 -1
  217. data/lib/rubocop/cop/style/documentation.rb +6 -6
  218. data/lib/rubocop/cop/style/documentation_method.rb +8 -8
  219. data/lib/rubocop/cop/style/double_negation.rb +1 -1
  220. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  221. data/lib/rubocop/cop/style/each_with_object.rb +2 -0
  222. data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
  223. data/lib/rubocop/cop/style/empty_class_definition.rb +119 -0
  224. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
  225. data/lib/rubocop/cop/style/empty_method.rb +0 -6
  226. data/lib/rubocop/cop/style/encoding.rb +7 -1
  227. data/lib/rubocop/cop/style/end_block.rb +3 -1
  228. data/lib/rubocop/cop/style/endless_method.rb +23 -5
  229. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
  230. data/lib/rubocop/cop/style/file_open.rb +84 -0
  231. data/lib/rubocop/cop/style/file_write.rb +18 -16
  232. data/lib/rubocop/cop/style/float_division.rb +15 -1
  233. data/lib/rubocop/cop/style/for.rb +3 -0
  234. data/lib/rubocop/cop/style/format_string.rb +4 -3
  235. data/lib/rubocop/cop/style/format_string_token.rb +49 -5
  236. data/lib/rubocop/cop/style/global_vars.rb +5 -2
  237. data/lib/rubocop/cop/style/guard_clause.rb +27 -22
  238. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +27 -9
  239. data/lib/rubocop/cop/style/hash_conversion.rb +1 -1
  240. data/lib/rubocop/cop/style/hash_lookup_method.rb +106 -0
  241. data/lib/rubocop/cop/style/hash_syntax.rb +1 -1
  242. data/lib/rubocop/cop/style/hash_transform_keys.rb +17 -7
  243. data/lib/rubocop/cop/style/hash_transform_values.rb +17 -7
  244. data/lib/rubocop/cop/style/if_inside_else.rb +16 -7
  245. data/lib/rubocop/cop/style/if_unless_modifier.rb +57 -17
  246. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -12
  247. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +4 -1
  248. data/lib/rubocop/cop/style/if_with_semicolon.rb +7 -5
  249. data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
  250. data/lib/rubocop/cop/style/inline_comment.rb +4 -1
  251. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  252. data/lib/rubocop/cop/style/lambda_call.rb +8 -8
  253. data/lib/rubocop/cop/style/magic_comment_format.rb +3 -3
  254. data/lib/rubocop/cop/style/map_join.rb +123 -0
  255. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +15 -2
  256. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +17 -4
  257. data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -4
  258. data/lib/rubocop/cop/style/min_max_comparison.rb +1 -1
  259. data/lib/rubocop/cop/style/module_member_existence_check.rb +110 -0
  260. data/lib/rubocop/cop/style/multiline_if_then.rb +4 -4
  261. data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -4
  262. data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
  263. data/lib/rubocop/cop/style/negative_array_index.rb +220 -0
  264. data/lib/rubocop/cop/style/nil_comparison.rb +11 -10
  265. data/lib/rubocop/cop/style/nil_lambda.rb +1 -1
  266. data/lib/rubocop/cop/style/non_nil_check.rb +5 -11
  267. data/lib/rubocop/cop/style/not.rb +2 -0
  268. data/lib/rubocop/cop/style/numeric_literals.rb +3 -2
  269. data/lib/rubocop/cop/style/one_class_per_file.rb +115 -0
  270. data/lib/rubocop/cop/style/one_line_conditional.rb +21 -12
  271. data/lib/rubocop/cop/style/operator_method_call.rb +11 -2
  272. data/lib/rubocop/cop/style/parallel_assignment.rb +6 -2
  273. data/lib/rubocop/cop/style/partition_instead_of_double_select.rb +270 -0
  274. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -0
  275. data/lib/rubocop/cop/style/predicate_with_kind.rb +84 -0
  276. data/lib/rubocop/cop/style/preferred_hash_methods.rb +12 -12
  277. data/lib/rubocop/cop/style/proc.rb +3 -2
  278. data/lib/rubocop/cop/style/raise_args.rb +1 -1
  279. data/lib/rubocop/cop/style/reduce_to_hash.rb +200 -0
  280. data/lib/rubocop/cop/style/redundant_argument.rb +2 -0
  281. data/lib/rubocop/cop/style/redundant_array_constructor.rb +2 -2
  282. data/lib/rubocop/cop/style/redundant_begin.rb +37 -3
  283. data/lib/rubocop/cop/style/redundant_condition.rb +6 -3
  284. data/lib/rubocop/cop/style/redundant_constant_base.rb +5 -5
  285. data/lib/rubocop/cop/style/redundant_each.rb +3 -3
  286. data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
  287. data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -1
  288. data/lib/rubocop/cop/style/redundant_format.rb +26 -5
  289. data/lib/rubocop/cop/style/redundant_interpolation.rb +11 -2
  290. data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +26 -10
  291. data/lib/rubocop/cop/style/redundant_line_continuation.rb +16 -0
  292. data/lib/rubocop/cop/style/redundant_min_max_by.rb +93 -0
  293. data/lib/rubocop/cop/style/redundant_parentheses.rb +36 -30
  294. data/lib/rubocop/cop/style/redundant_percent_q.rb +5 -3
  295. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +9 -0
  296. data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +2 -2
  297. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -0
  298. data/lib/rubocop/cop/style/redundant_return.rb +3 -1
  299. data/lib/rubocop/cop/style/redundant_self.rb +2 -2
  300. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +0 -5
  301. data/lib/rubocop/cop/style/redundant_sort.rb +7 -7
  302. data/lib/rubocop/cop/style/redundant_struct_keyword_init.rb +114 -0
  303. data/lib/rubocop/cop/style/regexp_literal.rb +31 -2
  304. data/lib/rubocop/cop/style/rescue_modifier.rb +3 -3
  305. data/lib/rubocop/cop/style/reverse_find.rb +51 -0
  306. data/lib/rubocop/cop/style/safe_navigation.rb +25 -8
  307. data/lib/rubocop/cop/style/select_by_kind.rb +158 -0
  308. data/lib/rubocop/cop/style/select_by_range.rb +197 -0
  309. data/lib/rubocop/cop/style/select_by_regexp.rb +51 -21
  310. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  311. data/lib/rubocop/cop/style/semicolon.rb +25 -7
  312. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
  313. data/lib/rubocop/cop/style/single_line_do_end_block.rb +1 -1
  314. data/lib/rubocop/cop/style/single_line_methods.rb +3 -1
  315. data/lib/rubocop/cop/style/sole_nested_conditional.rb +12 -3
  316. data/lib/rubocop/cop/style/special_global_vars.rb +6 -1
  317. data/lib/rubocop/cop/style/string_concatenation.rb +17 -13
  318. data/lib/rubocop/cop/style/struct_inheritance.rb +13 -0
  319. data/lib/rubocop/cop/style/super_arguments.rb +2 -2
  320. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  321. data/lib/rubocop/cop/style/symbol_proc.rb +7 -6
  322. data/lib/rubocop/cop/style/tally_method.rb +181 -0
  323. data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -2
  324. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +45 -0
  325. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  326. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -0
  327. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +11 -11
  328. data/lib/rubocop/cop/style/unless_else.rb +10 -9
  329. data/lib/rubocop/cop/style/unless_logical_operators.rb +3 -3
  330. data/lib/rubocop/cop/style/while_until_modifier.rb +16 -0
  331. data/lib/rubocop/cop/style/yoda_condition.rb +1 -1
  332. data/lib/rubocop/cop/style/yoda_expression.rb +1 -1
  333. data/lib/rubocop/cop/team.rb +87 -36
  334. data/lib/rubocop/cop/util.rb +2 -3
  335. data/lib/rubocop/cop/utils/format_string.rb +10 -0
  336. data/lib/rubocop/cop/variable_force/branch.rb +30 -6
  337. data/lib/rubocop/cop/variable_force/variable.rb +1 -1
  338. data/lib/rubocop/cop/variable_force.rb +9 -7
  339. data/lib/rubocop/cops_documentation_generator.rb +4 -4
  340. data/lib/rubocop/directive_comment.rb +48 -4
  341. data/lib/rubocop/file_patterns.rb +9 -1
  342. data/lib/rubocop/formatter/clang_style_formatter.rb +5 -2
  343. data/lib/rubocop/formatter/disabled_config_formatter.rb +24 -7
  344. data/lib/rubocop/formatter/formatter_set.rb +2 -2
  345. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  346. data/lib/rubocop/formatter/simple_text_formatter.rb +0 -2
  347. data/lib/rubocop/formatter/tap_formatter.rb +5 -2
  348. data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -1
  349. data/lib/rubocop/formatter.rb +22 -21
  350. data/lib/rubocop/lsp/diagnostic.rb +18 -33
  351. data/lib/rubocop/lsp/disable_comment_edits.rb +135 -0
  352. data/lib/rubocop/lsp/routes.rb +43 -7
  353. data/lib/rubocop/lsp/runtime.rb +13 -4
  354. data/lib/rubocop/lsp/stdin_runner.rb +8 -17
  355. data/lib/rubocop/magic_comment.rb +20 -0
  356. data/lib/rubocop/mcp/server.rb +200 -0
  357. data/lib/rubocop/options.rb +35 -4
  358. data/lib/rubocop/path_util.rb +14 -2
  359. data/lib/rubocop/plugin/loader.rb +1 -1
  360. data/lib/rubocop/project_index_loader.rb +66 -0
  361. data/lib/rubocop/rake_task.rb +1 -1
  362. data/lib/rubocop/remote_config.rb +10 -8
  363. data/lib/rubocop/result_cache.rb +61 -38
  364. data/lib/rubocop/rspec/cop_helper.rb +8 -0
  365. data/lib/rubocop/rspec/shared_contexts.rb +39 -5
  366. data/lib/rubocop/rspec/support.rb +2 -1
  367. data/lib/rubocop/runner.rb +134 -57
  368. data/lib/rubocop/server/cache.rb +6 -29
  369. data/lib/rubocop/server/core.rb +2 -0
  370. data/lib/rubocop/target_finder.rb +17 -10
  371. data/lib/rubocop/target_ruby.rb +31 -14
  372. data/lib/rubocop/version.rb +21 -3
  373. data/lib/rubocop.rb +28 -96
  374. data/lib/ruby_lsp/rubocop/addon.rb +23 -8
  375. data/lib/ruby_lsp/rubocop/runtime_adapter.rb +49 -15
  376. metadata +38 -9
data/lib/rubocop.rb CHANGED
@@ -39,6 +39,7 @@ require_relative 'rubocop/warning'
39
39
 
40
40
  # rubocop:disable Style/RequireOrder
41
41
 
42
+ require_relative 'rubocop/project_index_loader'
42
43
  require_relative 'rubocop/cop/util'
43
44
  require_relative 'rubocop/cop/offense'
44
45
  require_relative 'rubocop/cop/message_annotator'
@@ -52,6 +53,7 @@ require_relative 'rubocop/cop/cop'
52
53
  require_relative 'rubocop/cop/commissioner'
53
54
  require_relative 'rubocop/cop/documentation'
54
55
  require_relative 'rubocop/cop/corrector'
56
+ require_relative 'rubocop/cop/correctors'
55
57
  require_relative 'rubocop/cop/force'
56
58
  require_relative 'rubocop/cop/severity'
57
59
  require_relative 'rubocop/cop/generator'
@@ -68,109 +70,18 @@ require_relative 'rubocop/cop/variable_force/reference'
68
70
  require_relative 'rubocop/cop/variable_force/scope'
69
71
  require_relative 'rubocop/cop/variable_force/variable_table'
70
72
 
71
- require_relative 'rubocop/cop/mixin/array_min_size'
72
- require_relative 'rubocop/cop/mixin/array_syntax'
73
- require_relative 'rubocop/cop/mixin/alignment'
74
- require_relative 'rubocop/cop/mixin/allowed_identifiers'
75
- require_relative 'rubocop/cop/mixin/allowed_methods'
76
- require_relative 'rubocop/cop/mixin/allowed_pattern'
77
- require_relative 'rubocop/cop/mixin/allowed_receivers'
78
- require_relative 'rubocop/cop/mixin/forbidden_identifiers'
79
- require_relative 'rubocop/cop/mixin/forbidden_pattern'
80
- require_relative 'rubocop/cop/mixin/auto_corrector' # rubocop:todo Naming/InclusiveLanguage
81
- require_relative 'rubocop/cop/mixin/check_assignment'
82
- require_relative 'rubocop/cop/mixin/check_line_breakable'
83
- require_relative 'rubocop/cop/mixin/check_single_line_suitability'
84
- require_relative 'rubocop/cop/mixin/configurable_max'
85
- require_relative 'rubocop/cop/mixin/code_length' # relies on configurable_max
86
- require_relative 'rubocop/cop/mixin/configurable_enforced_style'
87
- require_relative 'rubocop/cop/mixin/configurable_formatting'
88
- require_relative 'rubocop/cop/mixin/configurable_naming'
89
- require_relative 'rubocop/cop/mixin/configurable_numbering'
90
- require_relative 'rubocop/cop/mixin/dig_help'
91
- require_relative 'rubocop/cop/mixin/documentation_comment'
92
- require_relative 'rubocop/cop/mixin/duplication'
93
- require_relative 'rubocop/cop/mixin/range_help'
94
- require_relative 'rubocop/cop/mixin/annotation_comment' # relies on range
95
- require_relative 'rubocop/cop/mixin/empty_lines_around_body' # relies on range
96
- require_relative 'rubocop/cop/mixin/empty_parameter'
97
- require_relative 'rubocop/cop/mixin/end_keyword_alignment'
98
- require_relative 'rubocop/cop/mixin/endless_method_rewriter'
99
- require_relative 'rubocop/cop/mixin/enforce_superclass'
100
- require_relative 'rubocop/cop/mixin/first_element_line_break'
101
- require_relative 'rubocop/cop/mixin/frozen_string_literal'
102
- require_relative 'rubocop/cop/mixin/gem_declaration'
103
- require_relative 'rubocop/cop/mixin/gemspec_help'
104
- require_relative 'rubocop/cop/mixin/hash_alignment_styles'
105
- require_relative 'rubocop/cop/mixin/hash_subset'
106
- require_relative 'rubocop/cop/mixin/hash_transform_method'
107
- require_relative 'rubocop/cop/mixin/integer_node'
108
- require_relative 'rubocop/cop/mixin/interpolation'
109
- require_relative 'rubocop/cop/mixin/line_length_help'
110
- require_relative 'rubocop/cop/mixin/match_range'
73
+ require_relative 'rubocop/cop/mixin'
74
+ # TODO: move to Layout module once cop lazy loading is implemented
75
+ require_relative 'rubocop/cop/mixin/empty_lines_around_body'
76
+ # TODO: move to Lint module once cop lazy loading is implemented
77
+ require_relative 'rubocop/cop/mixin/unused_argument'
111
78
  require_relative 'rubocop/cop/metrics/utils/repeated_csend_discount'
112
79
  require_relative 'rubocop/cop/metrics/utils/repeated_attribute_discount'
113
- require_relative 'rubocop/cop/mixin/hash_shorthand_syntax'
114
- require_relative 'rubocop/cop/mixin/method_complexity'
115
- require_relative 'rubocop/cop/mixin/method_preference'
116
- require_relative 'rubocop/cop/mixin/min_body_length'
117
- require_relative 'rubocop/cop/mixin/min_branches_count'
118
- require_relative 'rubocop/cop/mixin/multiline_element_indentation'
119
- require_relative 'rubocop/cop/mixin/multiline_element_line_breaks'
120
- require_relative 'rubocop/cop/mixin/multiline_expression_indentation'
121
- require_relative 'rubocop/cop/mixin/multiline_literal_brace_layout'
122
- require_relative 'rubocop/cop/mixin/negative_conditional'
123
- require_relative 'rubocop/cop/mixin/heredoc'
124
- require_relative 'rubocop/cop/mixin/nil_methods'
125
- require_relative 'rubocop/cop/mixin/on_normal_if_unless'
126
- require_relative 'rubocop/cop/mixin/ordered_gem_node'
127
- require_relative 'rubocop/cop/mixin/parentheses'
128
- require_relative 'rubocop/cop/mixin/percent_array'
129
- require_relative 'rubocop/cop/mixin/percent_literal'
130
- require_relative 'rubocop/cop/mixin/preceding_following_alignment'
131
- require_relative 'rubocop/cop/mixin/preferred_delimiters'
132
- require_relative 'rubocop/cop/mixin/rational_literal'
133
- require_relative 'rubocop/cop/mixin/require_library'
134
- require_relative 'rubocop/cop/mixin/rescue_node'
135
- require_relative 'rubocop/cop/mixin/safe_assignment'
136
- require_relative 'rubocop/cop/mixin/space_after_punctuation'
137
- require_relative 'rubocop/cop/mixin/space_before_punctuation'
138
- require_relative 'rubocop/cop/mixin/surrounding_space'
139
- require_relative 'rubocop/cop/mixin/statement_modifier'
140
- require_relative 'rubocop/cop/mixin/string_help'
141
- require_relative 'rubocop/cop/mixin/string_literals_help'
142
- require_relative 'rubocop/cop/mixin/symbol_help'
143
- require_relative 'rubocop/cop/mixin/target_ruby_version'
144
- require_relative 'rubocop/cop/mixin/trailing_body'
145
- require_relative 'rubocop/cop/mixin/trailing_comma'
146
- require_relative 'rubocop/cop/mixin/uncommunicative_name'
147
- require_relative 'rubocop/cop/mixin/unused_argument'
148
- require_relative 'rubocop/cop/mixin/visibility_help'
149
- require_relative 'rubocop/cop/mixin/comments_help' # relies on visibility_help
150
- require_relative 'rubocop/cop/mixin/def_node' # relies on visibility_help
151
80
 
152
81
  require_relative 'rubocop/cop/utils/format_string'
153
82
 
154
83
  require_relative 'rubocop/cop/migration/department_name'
155
84
 
156
- require_relative 'rubocop/cop/correctors/alignment_corrector'
157
- require_relative 'rubocop/cop/correctors/condition_corrector'
158
- require_relative 'rubocop/cop/correctors/each_to_for_corrector'
159
- require_relative 'rubocop/cop/correctors/empty_line_corrector'
160
- require_relative 'rubocop/cop/correctors/for_to_each_corrector'
161
- require_relative 'rubocop/cop/correctors/if_then_corrector'
162
- require_relative 'rubocop/cop/correctors/lambda_literal_to_method_corrector'
163
- require_relative 'rubocop/cop/correctors/line_break_corrector'
164
- require_relative 'rubocop/cop/correctors/multiline_literal_brace_corrector'
165
- require_relative 'rubocop/cop/correctors/ordered_gem_corrector'
166
- require_relative 'rubocop/cop/correctors/parentheses_corrector'
167
- require_relative 'rubocop/cop/correctors/percent_literal_corrector'
168
- require_relative 'rubocop/cop/correctors/punctuation_corrector'
169
- require_relative 'rubocop/cop/correctors/require_library_corrector'
170
- require_relative 'rubocop/cop/correctors/space_corrector'
171
- require_relative 'rubocop/cop/correctors/string_literal_corrector'
172
- require_relative 'rubocop/cop/correctors/unused_arg_corrector'
173
-
174
85
  require_relative 'rubocop/cop/bundler/duplicated_gem'
175
86
  require_relative 'rubocop/cop/bundler/duplicated_group'
176
87
  require_relative 'rubocop/cop/bundler/gem_comment'
@@ -309,6 +220,7 @@ require_relative 'rubocop/cop/lint/constant_overwritten_in_rescue'
309
220
  require_relative 'rubocop/cop/lint/constant_reassignment'
310
221
  require_relative 'rubocop/cop/lint/constant_resolution'
311
222
  require_relative 'rubocop/cop/lint/cop_directive_syntax'
223
+ require_relative 'rubocop/cop/lint/data_define_override'
312
224
  require_relative 'rubocop/cop/lint/debugger'
313
225
  require_relative 'rubocop/cop/lint/deprecated_class_methods'
314
226
  require_relative 'rubocop/cop/lint/deprecated_constants'
@@ -426,6 +338,7 @@ require_relative 'rubocop/cop/lint/unified_integer'
426
338
  require_relative 'rubocop/cop/lint/unmodified_reduce_accumulator'
427
339
  require_relative 'rubocop/cop/lint/unreachable_code'
428
340
  require_relative 'rubocop/cop/lint/unreachable_loop'
341
+ require_relative 'rubocop/cop/lint/unreachable_pattern_branch'
429
342
  require_relative 'rubocop/cop/lint/unused_block_argument'
430
343
  require_relative 'rubocop/cop/lint/unused_method_argument'
431
344
  require_relative 'rubocop/cop/lint/uri_escape_unescape'
@@ -489,6 +402,7 @@ require_relative 'rubocop/cop/style/arguments_forwarding'
489
402
  require_relative 'rubocop/cop/style/array_coercion'
490
403
  require_relative 'rubocop/cop/style/array_first_last'
491
404
  require_relative 'rubocop/cop/style/array_intersect'
405
+ require_relative 'rubocop/cop/style/array_intersect_with_single_element'
492
406
  require_relative 'rubocop/cop/style/array_join'
493
407
  require_relative 'rubocop/cop/style/ascii_comments'
494
408
  require_relative 'rubocop/cop/style/attr'
@@ -540,6 +454,7 @@ require_relative 'rubocop/cop/style/each_for_simple_loop'
540
454
  require_relative 'rubocop/cop/style/each_with_object'
541
455
  require_relative 'rubocop/cop/style/empty_block_parameter'
542
456
  require_relative 'rubocop/cop/style/empty_case_condition'
457
+ require_relative 'rubocop/cop/style/empty_class_definition'
543
458
  require_relative 'rubocop/cop/style/empty_else'
544
459
  require_relative 'rubocop/cop/style/empty_heredoc'
545
460
  require_relative 'rubocop/cop/style/empty_lambda_parameter'
@@ -559,6 +474,7 @@ require_relative 'rubocop/cop/style/exponential_notation'
559
474
  require_relative 'rubocop/cop/style/fetch_env_var'
560
475
  require_relative 'rubocop/cop/style/file_empty'
561
476
  require_relative 'rubocop/cop/style/file_null'
477
+ require_relative 'rubocop/cop/style/file_open'
562
478
  require_relative 'rubocop/cop/style/file_read'
563
479
  require_relative 'rubocop/cop/style/file_touch'
564
480
  require_relative 'rubocop/cop/style/file_write'
@@ -576,6 +492,7 @@ require_relative 'rubocop/cop/style/hash_each_methods'
576
492
  require_relative 'rubocop/cop/style/hash_except'
577
493
  require_relative 'rubocop/cop/style/hash_fetch_chain'
578
494
  require_relative 'rubocop/cop/style/hash_like_case'
495
+ require_relative 'rubocop/cop/style/hash_lookup_method'
579
496
  require_relative 'rubocop/cop/style/hash_slice'
580
497
  require_relative 'rubocop/cop/style/hash_syntax'
581
498
  require_relative 'rubocop/cop/style/hash_transform_keys'
@@ -589,6 +506,7 @@ require_relative 'rubocop/cop/style/if_with_semicolon'
589
506
  require_relative 'rubocop/cop/style/implicit_runtime_error'
590
507
  require_relative 'rubocop/cop/style/in_pattern_then'
591
508
  require_relative 'rubocop/cop/style/infinite_loop'
509
+ require_relative 'rubocop/cop/style/reduce_to_hash'
592
510
  require_relative 'rubocop/cop/style/inverse_methods'
593
511
  require_relative 'rubocop/cop/style/inline_comment'
594
512
  require_relative 'rubocop/cop/style/invertible_unless_condition'
@@ -602,15 +520,19 @@ require_relative 'rubocop/cop/style/lambda_call'
602
520
  require_relative 'rubocop/cop/style/line_end_concatenation'
603
521
  require_relative 'rubocop/cop/style/magic_comment_format'
604
522
  require_relative 'rubocop/cop/style/map_into_array'
523
+ require_relative 'rubocop/cop/style/map_join'
605
524
  require_relative 'rubocop/cop/style/map_to_hash'
606
525
  require_relative 'rubocop/cop/style/map_to_set'
607
526
  require_relative 'rubocop/cop/style/method_call_without_args_parentheses'
608
527
  require_relative 'rubocop/cop/style/method_call_with_args_parentheses'
609
528
  require_relative 'rubocop/cop/style/min_max_comparison'
529
+ require_relative 'rubocop/cop/style/module_member_existence_check'
610
530
  require_relative 'rubocop/cop/style/multiline_in_pattern_then'
611
531
  require_relative 'rubocop/cop/style/numbered_parameters'
532
+ require_relative 'rubocop/cop/style/one_class_per_file'
612
533
  require_relative 'rubocop/cop/style/open_struct_use'
613
534
  require_relative 'rubocop/cop/style/operator_method_call'
535
+ require_relative 'rubocop/cop/style/partition_instead_of_double_select'
614
536
  require_relative 'rubocop/cop/style/redundant_array_constructor'
615
537
  require_relative 'rubocop/cop/style/redundant_array_flatten'
616
538
  require_relative 'rubocop/cop/style/redundant_assignment'
@@ -626,11 +548,14 @@ require_relative 'rubocop/cop/style/redundant_heredoc_delimiter_quotes'
626
548
  require_relative 'rubocop/cop/style/redundant_initialize'
627
549
  require_relative 'rubocop/cop/style/redundant_interpolation_unfreeze'
628
550
  require_relative 'rubocop/cop/style/redundant_line_continuation'
551
+ require_relative 'rubocop/cop/style/redundant_min_max_by'
629
552
  require_relative 'rubocop/cop/style/redundant_regexp_argument'
630
553
  require_relative 'rubocop/cop/style/redundant_regexp_constructor'
631
554
  require_relative 'rubocop/cop/style/redundant_self_assignment'
632
555
  require_relative 'rubocop/cop/style/redundant_self_assignment_branch'
556
+ require_relative 'rubocop/cop/style/redundant_struct_keyword_init'
633
557
  require_relative 'rubocop/cop/style/require_order'
558
+ require_relative 'rubocop/cop/style/reverse_find'
634
559
  require_relative 'rubocop/cop/style/safe_navigation_chain_length'
635
560
  require_relative 'rubocop/cop/style/single_line_do_end_block'
636
561
  require_relative 'rubocop/cop/style/sole_nested_conditional'
@@ -657,6 +582,7 @@ require_relative 'rubocop/cop/style/negated_if'
657
582
  require_relative 'rubocop/cop/style/negated_if_else_condition'
658
583
  require_relative 'rubocop/cop/style/negated_unless'
659
584
  require_relative 'rubocop/cop/style/negated_while'
585
+ require_relative 'rubocop/cop/style/negative_array_index'
660
586
  require_relative 'rubocop/cop/style/nested_file_dirname'
661
587
  require_relative 'rubocop/cop/style/nested_modifier'
662
588
  require_relative 'rubocop/cop/style/nested_parenthesized_calls'
@@ -681,6 +607,7 @@ require_relative 'rubocop/cop/style/parentheses_around_condition'
681
607
  require_relative 'rubocop/cop/style/percent_literal_delimiters'
682
608
  require_relative 'rubocop/cop/style/percent_q_literals'
683
609
  require_relative 'rubocop/cop/style/perl_backrefs'
610
+ require_relative 'rubocop/cop/style/predicate_with_kind'
684
611
  require_relative 'rubocop/cop/style/preferred_hash_methods'
685
612
  require_relative 'rubocop/cop/style/proc'
686
613
  require_relative 'rubocop/cop/style/quoted_symbols'
@@ -710,6 +637,8 @@ require_relative 'rubocop/cop/style/return_nil'
710
637
  require_relative 'rubocop/cop/style/return_nil_in_predicate_method_definition'
711
638
  require_relative 'rubocop/cop/style/safe_navigation'
712
639
  require_relative 'rubocop/cop/style/sample'
640
+ require_relative 'rubocop/cop/style/select_by_kind'
641
+ require_relative 'rubocop/cop/style/select_by_range'
713
642
  require_relative 'rubocop/cop/style/select_by_regexp'
714
643
  require_relative 'rubocop/cop/style/self_assignment'
715
644
  require_relative 'rubocop/cop/style/semicolon'
@@ -737,6 +666,7 @@ require_relative 'rubocop/cop/style/swap_values'
737
666
  require_relative 'rubocop/cop/style/symbol_array'
738
667
  require_relative 'rubocop/cop/style/symbol_literal'
739
668
  require_relative 'rubocop/cop/style/symbol_proc'
669
+ require_relative 'rubocop/cop/style/tally_method'
740
670
  require_relative 'rubocop/cop/style/ternary_parentheses'
741
671
  require_relative 'rubocop/cop/style/top_level_method_definition'
742
672
  require_relative 'rubocop/cop/style/trailing_body_on_class'
@@ -805,6 +735,8 @@ require_relative 'rubocop/cli/command/auto_generate_config'
805
735
  require_relative 'rubocop/cli/command/execute_runner'
806
736
  require_relative 'rubocop/cli/command/init_dotfile'
807
737
  require_relative 'rubocop/cli/command/lsp'
738
+ require_relative 'rubocop/cli/command/list_enabled_cops_for'
739
+ require_relative 'rubocop/cli/command/mcp'
808
740
  require_relative 'rubocop/cli/command/show_cops'
809
741
  require_relative 'rubocop/cli/command/show_docs_url'
810
742
  require_relative 'rubocop/cli/command/suggest_extensions'
@@ -8,7 +8,10 @@ module RubyLsp
8
8
  module RuboCop
9
9
  # A Ruby LSP add-on for RuboCop.
10
10
  class Addon < RubyLsp::Addon
11
- def initializer
11
+ RESTART_WATCHERS = %w[.rubocop.yml .rubocop_todo.yml .rubocop].freeze
12
+
13
+ def initialize
14
+ super
12
15
  @runtime_adapter = nil
13
16
  end
14
17
 
@@ -16,12 +19,16 @@ module RubyLsp
16
19
  'RuboCop'
17
20
  end
18
21
 
22
+ def version
23
+ ::RuboCop::Version::STRING
24
+ end
25
+
19
26
  def activate(global_state, message_queue)
20
27
  ::RuboCop::LSP::Logger.log(
21
28
  "Activating RuboCop LSP addon #{::RuboCop::Version::STRING}.", prefix: '[RuboCop]'
22
29
  )
23
30
 
24
- @runtime_adapter = RuntimeAdapter.new
31
+ @runtime_adapter = RuntimeAdapter.new(message_queue)
25
32
  global_state.register_formatter('rubocop', @runtime_adapter)
26
33
  register_additional_file_watchers(global_state, message_queue)
27
34
 
@@ -49,7 +56,7 @@ module RubyLsp
49
56
  register_options: Interface::DidChangeWatchedFilesRegistrationOptions.new(
50
57
  watchers: [
51
58
  Interface::FileSystemWatcher.new(
52
- glob_pattern: '**/.rubocop{,_todo}.yml',
59
+ glob_pattern: "**/{#{RESTART_WATCHERS.join(',')}}",
53
60
  kind: Constant::WatchKind::CREATE | Constant::WatchKind::CHANGE | Constant::WatchKind::DELETE
54
61
  )
55
62
  ]
@@ -62,13 +69,21 @@ module RubyLsp
62
69
  # rubocop:enable Metrics/MethodLength
63
70
 
64
71
  def workspace_did_change_watched_files(changes)
65
- return unless changes.any? { |change| change[:uri].end_with?('.rubocop.yml') }
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
66
80
 
67
- @runtime_adapter = RuntimeAdapter.new
81
+ private
68
82
 
69
- ::RuboCop::LSP::Logger.log(<<~MESSAGE, prefix: '[RuboCop]')
70
- Re-initialized RuboCop LSP addon #{::RuboCop::Version::STRING} due to .rubocop.yml file change.
71
- MESSAGE
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
72
87
  end
73
88
  end
74
89
  end
@@ -7,30 +7,45 @@ module RubyLsp
7
7
  # Provides an adapter to bridge RuboCop's built-in LSP runtime with Ruby LSP's add-on.
8
8
  # @api private
9
9
  class RuntimeAdapter
10
- include RubyLsp::Requests::Support::Formatter
10
+ def initialize(message_queue)
11
+ @message_queue = message_queue
12
+ reload_config
13
+ end
11
14
 
12
- def initialize
13
- config_store = ::RuboCop::ConfigStore.new
15
+ def reload_config
16
+ @runtime = nil
17
+ options, _paths = ::RuboCop::Options.new.parse([])
14
18
 
19
+ config_store = ::RuboCop::ConfigStore.new
20
+ config_store.apply_options!(options)
15
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
+ )
16
27
  end
17
28
 
18
29
  def run_diagnostic(uri, document)
19
- @runtime.offenses(
20
- uri_to_path(uri),
21
- document.source,
22
- document.encoding,
23
- prism_result: prism_result(document)
24
- )
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
25
38
  end
26
39
 
27
40
  def run_formatting(uri, document)
28
- @runtime.format(
29
- uri_to_path(uri),
30
- document.source,
31
- command: 'rubocop.formatAutocorrects',
32
- prism_result: prism_result(document)
33
- )
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
34
49
  end
35
50
 
36
51
  def run_range_formatting(_uri, _partial_source, _base_indentation)
@@ -43,6 +58,25 @@ module RubyLsp
43
58
 
44
59
  private
45
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
+
46
80
  # duplicated from: lib/standard/lsp/routes.rb
47
81
  # modified to incorporate Ruby LSP's to_standardized_path method
48
82
  def uri_to_path(uri)