rubocop 1.67.0 → 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 (526) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +23 -19
  4. data/config/default.yml +384 -72
  5. data/config/internal_affairs.yml +20 -0
  6. data/config/obsoletion.yml +8 -3
  7. data/exe/rubocop +1 -8
  8. data/lib/rubocop/cached_data.rb +12 -4
  9. data/lib/rubocop/cli/command/auto_generate_config.rb +2 -2
  10. data/lib/rubocop/cli/command/execute_runner.rb +4 -4
  11. data/lib/rubocop/cli/command/show_cops.rb +24 -2
  12. data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
  13. data/lib/rubocop/cli/command/version.rb +2 -2
  14. data/lib/rubocop/cli.rb +19 -4
  15. data/lib/rubocop/comment_config.rb +2 -2
  16. data/lib/rubocop/config.rb +52 -10
  17. data/lib/rubocop/config_loader.rb +56 -48
  18. data/lib/rubocop/config_loader_resolver.rb +36 -10
  19. data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
  20. data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
  21. data/lib/rubocop/config_obsoletion.rb +46 -2
  22. data/lib/rubocop/config_store.rb +5 -0
  23. data/lib/rubocop/config_validator.rb +25 -14
  24. data/lib/rubocop/cop/autocorrect_logic.rb +53 -28
  25. data/lib/rubocop/cop/base.rb +7 -1
  26. data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
  27. data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
  28. data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
  29. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
  30. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
  31. data/lib/rubocop/cop/correctors/alignment_corrector.rb +8 -16
  32. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +8 -3
  33. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -2
  34. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
  35. data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
  36. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
  37. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +37 -15
  38. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
  39. data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
  40. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +0 -2
  41. data/lib/rubocop/cop/generator.rb +6 -0
  42. data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
  43. data/lib/rubocop/cop/internal_affairs/example_description.rb +9 -5
  44. data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
  45. data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
  46. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
  47. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +3 -2
  48. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +5 -5
  49. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
  50. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
  51. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +233 -0
  52. data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
  53. data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
  54. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
  55. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
  56. data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
  57. data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
  58. data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
  59. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
  60. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +3 -1
  61. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
  62. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
  63. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +13 -2
  64. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
  65. data/lib/rubocop/cop/internal_affairs.rb +7 -16
  66. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -1
  67. data/lib/rubocop/cop/layout/argument_alignment.rb +2 -9
  68. data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
  69. data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
  70. data/lib/rubocop/cop/layout/block_alignment.rb +3 -2
  71. data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
  72. data/lib/rubocop/cop/layout/class_structure.rb +45 -10
  73. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
  74. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  75. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  76. data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
  77. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +3 -3
  78. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +34 -20
  79. data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
  80. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +37 -7
  81. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
  82. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
  83. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
  84. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
  85. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +4 -5
  86. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
  87. data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
  88. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
  89. data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -9
  90. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -7
  91. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
  92. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
  93. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
  94. data/lib/rubocop/cop/layout/hash_alignment.rb +8 -11
  95. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -1
  96. data/lib/rubocop/cop/layout/indentation_width.rb +8 -7
  97. data/lib/rubocop/cop/layout/leading_comment_space.rb +57 -2
  98. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +11 -2
  99. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
  100. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
  101. data/lib/rubocop/cop/layout/line_length.rb +158 -10
  102. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
  103. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
  104. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
  105. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
  106. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -4
  107. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  108. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
  109. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +11 -8
  110. data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
  111. data/lib/rubocop/cop/layout/redundant_line_break.rb +19 -46
  112. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +14 -7
  113. data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
  114. data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
  115. data/lib/rubocop/cop/layout/space_after_comma.rb +1 -1
  116. data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
  117. data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
  118. data/lib/rubocop/cop/layout/space_around_keyword.rb +8 -2
  119. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
  120. data/lib/rubocop/cop/layout/space_around_operators.rb +31 -21
  121. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -0
  122. data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
  123. data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
  124. data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
  125. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
  126. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
  127. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +7 -0
  128. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +0 -1
  129. data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
  130. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
  131. data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -0
  132. data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
  133. data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -3
  134. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +10 -12
  135. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
  136. data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -1
  137. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
  138. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +3 -2
  139. data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
  140. data/lib/rubocop/cop/lint/cop_directive_syntax.rb +90 -0
  141. data/lib/rubocop/cop/lint/debugger.rb +3 -3
  142. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
  143. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +7 -3
  144. data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
  145. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
  146. data/lib/rubocop/cop/lint/duplicate_methods.rb +111 -23
  147. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +6 -43
  148. data/lib/rubocop/cop/lint/duplicate_set_element.rb +20 -7
  149. data/lib/rubocop/cop/lint/empty_conditional_body.rb +14 -64
  150. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  151. data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
  152. data/lib/rubocop/cop/lint/empty_file.rb +0 -2
  153. data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -1
  154. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  155. data/lib/rubocop/cop/lint/erb_new_arguments.rb +0 -6
  156. data/lib/rubocop/cop/lint/float_comparison.rb +51 -18
  157. data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -4
  158. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
  159. data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
  160. data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
  161. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  162. data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
  163. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +3 -0
  164. data/lib/rubocop/cop/lint/literal_as_condition.rb +125 -10
  165. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
  166. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +24 -6
  167. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -2
  168. data/lib/rubocop/cop/lint/missing_super.rb +2 -2
  169. data/lib/rubocop/cop/lint/mixed_case_range.rb +5 -8
  170. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  171. data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -6
  172. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  173. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -2
  174. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +12 -3
  175. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -3
  176. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
  177. data/lib/rubocop/cop/lint/number_conversion.rb +0 -1
  178. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
  179. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
  180. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
  181. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
  182. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -5
  183. data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
  184. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
  185. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +2 -2
  186. data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
  187. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +113 -9
  188. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -7
  189. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
  190. data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
  191. data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -0
  192. data/lib/rubocop/cop/lint/redundant_with_object.rb +3 -0
  193. data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
  194. data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
  195. data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
  196. data/lib/rubocop/cop/lint/rescue_exception.rb +2 -5
  197. data/lib/rubocop/cop/lint/rescue_type.rb +4 -8
  198. data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -11
  199. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +17 -1
  200. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +5 -1
  201. data/lib/rubocop/cop/lint/self_assignment.rb +39 -15
  202. data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
  203. data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
  204. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +13 -1
  205. data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
  206. data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
  207. data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
  208. data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
  209. data/lib/rubocop/cop/lint/syntax.rb +4 -1
  210. data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
  211. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  212. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
  213. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
  214. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -1
  215. data/lib/rubocop/cop/lint/unreachable_code.rb +52 -2
  216. data/lib/rubocop/cop/lint/unreachable_loop.rb +6 -6
  217. data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
  218. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
  219. data/lib/rubocop/cop/lint/useless_access_modifier.rb +34 -8
  220. data/lib/rubocop/cop/lint/useless_assignment.rb +3 -1
  221. data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
  222. data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
  223. data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
  224. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -0
  225. data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
  226. data/lib/rubocop/cop/lint/useless_numeric_operation.rb +3 -1
  227. data/lib/rubocop/cop/lint/useless_or.rb +98 -0
  228. data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
  229. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
  230. data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -25
  231. data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
  232. data/lib/rubocop/cop/lint/void.rb +23 -12
  233. data/lib/rubocop/cop/message_annotator.rb +7 -3
  234. data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
  235. data/lib/rubocop/cop/metrics/block_length.rb +1 -0
  236. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  237. data/lib/rubocop/cop/metrics/class_length.rb +9 -9
  238. data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
  239. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
  240. data/lib/rubocop/cop/metrics/method_length.rb +9 -1
  241. data/lib/rubocop/cop/metrics/module_length.rb +1 -1
  242. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  243. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
  244. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +3 -4
  245. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
  246. data/lib/rubocop/cop/mixin/alignment.rb +3 -3
  247. data/lib/rubocop/cop/mixin/allowed_pattern.rb +4 -4
  248. data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
  249. data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
  250. data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
  251. data/lib/rubocop/cop/mixin/comments_help.rb +8 -3
  252. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  253. data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
  254. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
  255. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
  256. data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
  257. data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
  258. data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
  259. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +4 -3
  260. data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
  261. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
  262. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +22 -22
  263. data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
  264. data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
  265. data/lib/rubocop/cop/mixin/line_length_help.rb +27 -10
  266. data/lib/rubocop/cop/mixin/method_complexity.rb +2 -1
  267. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -9
  268. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
  269. data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
  270. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +68 -30
  271. data/lib/rubocop/cop/mixin/range_help.rb +15 -4
  272. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
  273. data/lib/rubocop/cop/mixin/statement_modifier.rb +8 -3
  274. data/lib/rubocop/cop/mixin/string_help.rb +2 -2
  275. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  276. data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
  277. data/lib/rubocop/cop/mixin/trailing_comma.rb +21 -5
  278. data/lib/rubocop/cop/naming/accessor_method_name.rb +6 -6
  279. data/lib/rubocop/cop/naming/block_forwarding.rb +20 -16
  280. data/lib/rubocop/cop/naming/constant_name.rb +6 -7
  281. data/lib/rubocop/cop/naming/file_name.rb +2 -4
  282. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +12 -13
  283. data/lib/rubocop/cop/naming/method_name.rb +185 -15
  284. data/lib/rubocop/cop/naming/predicate_method.rb +319 -0
  285. data/lib/rubocop/cop/naming/{predicate_name.rb → predicate_prefix.rb} +48 -4
  286. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +6 -14
  287. data/lib/rubocop/cop/naming/variable_name.rb +50 -6
  288. data/lib/rubocop/cop/naming/variable_number.rb +2 -3
  289. data/lib/rubocop/cop/offense.rb +2 -3
  290. data/lib/rubocop/cop/registry.rb +9 -6
  291. data/lib/rubocop/cop/security/compound_hash.rb +2 -0
  292. data/lib/rubocop/cop/security/eval.rb +2 -1
  293. data/lib/rubocop/cop/security/json_load.rb +33 -11
  294. data/lib/rubocop/cop/security/open.rb +1 -0
  295. data/lib/rubocop/cop/security/yaml_load.rb +3 -2
  296. data/lib/rubocop/cop/style/access_modifier_declarations.rb +114 -34
  297. data/lib/rubocop/cop/style/accessor_grouping.rb +32 -6
  298. data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
  299. data/lib/rubocop/cop/style/and_or.rb +1 -1
  300. data/lib/rubocop/cop/style/arguments_forwarding.rb +57 -44
  301. data/lib/rubocop/cop/style/array_first_last.rb +18 -2
  302. data/lib/rubocop/cop/style/array_intersect.rb +115 -39
  303. data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
  304. data/lib/rubocop/cop/style/bitwise_predicate.rb +107 -0
  305. data/lib/rubocop/cop/style/block_delimiters.rb +44 -26
  306. data/lib/rubocop/cop/style/case_like_if.rb +9 -12
  307. data/lib/rubocop/cop/style/class_and_module_children.rb +52 -11
  308. data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
  309. data/lib/rubocop/cop/style/collection_methods.rb +2 -1
  310. data/lib/rubocop/cop/style/collection_querying.rb +167 -0
  311. data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
  312. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  313. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  314. data/lib/rubocop/cop/style/commented_keyword.rb +20 -3
  315. data/lib/rubocop/cop/style/comparable_between.rb +78 -0
  316. data/lib/rubocop/cop/style/concat_array_literals.rb +1 -1
  317. data/lib/rubocop/cop/style/conditional_assignment.rb +49 -31
  318. data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
  319. data/lib/rubocop/cop/style/data_inheritance.rb +7 -0
  320. data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -5
  321. data/lib/rubocop/cop/style/dig_chain.rb +89 -0
  322. data/lib/rubocop/cop/style/documentation.rb +1 -1
  323. data/lib/rubocop/cop/style/double_negation.rb +5 -5
  324. data/lib/rubocop/cop/style/each_for_simple_loop.rb +4 -7
  325. data/lib/rubocop/cop/style/each_with_object.rb +2 -3
  326. data/lib/rubocop/cop/style/empty_else.rb +4 -2
  327. data/lib/rubocop/cop/style/empty_literal.rb +5 -1
  328. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  329. data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
  330. data/lib/rubocop/cop/style/endless_method.rb +163 -18
  331. data/lib/rubocop/cop/style/eval_with_location.rb +4 -4
  332. data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -3
  333. data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
  334. data/lib/rubocop/cop/style/explicit_block_argument.rb +17 -4
  335. data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
  336. data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
  337. data/lib/rubocop/cop/style/file_null.rb +89 -0
  338. data/lib/rubocop/cop/style/file_touch.rb +75 -0
  339. data/lib/rubocop/cop/style/float_division.rb +8 -4
  340. data/lib/rubocop/cop/style/for.rb +1 -1
  341. data/lib/rubocop/cop/style/format_string_token.rb +38 -11
  342. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -2
  343. data/lib/rubocop/cop/style/global_std_stream.rb +3 -0
  344. data/lib/rubocop/cop/style/global_vars.rb +1 -3
  345. data/lib/rubocop/cop/style/guard_clause.rb +17 -3
  346. data/lib/rubocop/cop/style/hash_conversion.rb +16 -9
  347. data/lib/rubocop/cop/style/hash_each_methods.rb +6 -8
  348. data/lib/rubocop/cop/style/hash_except.rb +35 -147
  349. data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
  350. data/lib/rubocop/cop/style/hash_slice.rb +80 -0
  351. data/lib/rubocop/cop/style/hash_syntax.rb +9 -3
  352. data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
  353. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
  354. data/lib/rubocop/cop/style/identical_conditional_branches.rb +25 -6
  355. data/lib/rubocop/cop/style/if_inside_else.rb +10 -14
  356. data/lib/rubocop/cop/style/if_unless_modifier.rb +36 -9
  357. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
  358. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +3 -4
  359. data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -9
  360. data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
  361. data/lib/rubocop/cop/style/inverse_methods.rb +16 -13
  362. data/lib/rubocop/cop/style/invertible_unless_condition.rb +2 -2
  363. data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
  364. data/lib/rubocop/cop/style/it_assignment.rb +93 -0
  365. data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
  366. data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
  367. data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
  368. data/lib/rubocop/cop/style/lambda.rb +1 -0
  369. data/lib/rubocop/cop/style/lambda_call.rb +10 -4
  370. data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
  371. data/lib/rubocop/cop/style/map_into_array.rb +11 -3
  372. data/lib/rubocop/cop/style/map_to_hash.rb +13 -4
  373. data/lib/rubocop/cop/style/map_to_set.rb +4 -5
  374. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +28 -20
  375. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +18 -0
  376. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -11
  377. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
  378. data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
  379. data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
  380. data/lib/rubocop/cop/style/missing_else.rb +2 -0
  381. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +33 -3
  382. data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
  383. data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
  384. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  385. data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -9
  386. data/lib/rubocop/cop/style/multiple_comparison.rb +52 -51
  387. data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
  388. data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
  389. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
  390. data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
  391. data/lib/rubocop/cop/style/next.rb +44 -0
  392. data/lib/rubocop/cop/style/nil_comparison.rb +9 -7
  393. data/lib/rubocop/cop/style/not.rb +1 -1
  394. data/lib/rubocop/cop/style/object_then.rb +15 -15
  395. data/lib/rubocop/cop/style/one_line_conditional.rb +42 -13
  396. data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
  397. data/lib/rubocop/cop/style/operator_method_call.rb +5 -6
  398. data/lib/rubocop/cop/style/or_assignment.rb +3 -6
  399. data/lib/rubocop/cop/style/parallel_assignment.rb +41 -38
  400. data/lib/rubocop/cop/style/parentheses_around_condition.rb +2 -2
  401. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  402. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  403. data/lib/rubocop/cop/style/proc.rb +2 -2
  404. data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
  405. data/lib/rubocop/cop/style/raise_args.rb +15 -13
  406. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  407. data/lib/rubocop/cop/style/redundant_argument.rb +3 -1
  408. data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
  409. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
  410. data/lib/rubocop/cop/style/redundant_begin.rb +36 -1
  411. data/lib/rubocop/cop/style/redundant_condition.rb +95 -23
  412. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +16 -5
  413. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +6 -10
  414. data/lib/rubocop/cop/style/redundant_each.rb +1 -1
  415. data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
  416. data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -9
  417. data/lib/rubocop/cop/style/redundant_format.rb +283 -0
  418. data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
  419. data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
  420. data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
  421. data/lib/rubocop/cop/style/redundant_line_continuation.rb +55 -19
  422. data/lib/rubocop/cop/style/redundant_parentheses.rb +105 -36
  423. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +8 -0
  424. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
  425. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -1
  426. data/lib/rubocop/cop/style/redundant_return.rb +2 -2
  427. data/lib/rubocop/cop/style/redundant_self.rb +15 -18
  428. data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
  429. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
  430. data/lib/rubocop/cop/style/redundant_sort.rb +3 -3
  431. data/lib/rubocop/cop/style/redundant_sort_by.rb +17 -1
  432. data/lib/rubocop/cop/style/redundant_string_escape.rb +2 -2
  433. data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
  434. data/lib/rubocop/cop/style/rescue_modifier.rb +5 -3
  435. data/lib/rubocop/cop/style/return_nil.rb +2 -2
  436. data/lib/rubocop/cop/style/safe_navigation.rb +75 -16
  437. data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
  438. data/lib/rubocop/cop/style/select_by_regexp.rb +5 -2
  439. data/lib/rubocop/cop/style/self_assignment.rb +11 -17
  440. data/lib/rubocop/cop/style/semicolon.rb +21 -6
  441. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +2 -1
  442. data/lib/rubocop/cop/style/signal_exception.rb +2 -3
  443. data/lib/rubocop/cop/style/single_argument_dig.rb +9 -5
  444. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  445. data/lib/rubocop/cop/style/single_line_do_end_block.rb +15 -4
  446. data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
  447. data/lib/rubocop/cop/style/slicing_with_range.rb +40 -11
  448. data/lib/rubocop/cop/style/sole_nested_conditional.rb +68 -102
  449. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  450. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
  451. data/lib/rubocop/cop/style/string_concatenation.rb +21 -17
  452. data/lib/rubocop/cop/style/string_literals.rb +1 -1
  453. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  454. data/lib/rubocop/cop/style/struct_inheritance.rb +8 -1
  455. data/lib/rubocop/cop/style/super_arguments.rb +66 -19
  456. data/lib/rubocop/cop/style/swap_values.rb +4 -15
  457. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  458. data/lib/rubocop/cop/style/symbol_proc.rb +3 -1
  459. data/lib/rubocop/cop/style/ternary_parentheses.rb +25 -4
  460. data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
  461. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +56 -2
  462. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
  463. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  464. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
  465. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
  466. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  467. data/lib/rubocop/cop/style/unless_else.rb +10 -9
  468. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
  469. data/lib/rubocop/cop/style/while_until_modifier.rb +0 -1
  470. data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
  471. data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
  472. data/lib/rubocop/cop/team.rb +1 -1
  473. data/lib/rubocop/cop/util.rb +12 -5
  474. data/lib/rubocop/cop/utils/format_string.rb +20 -5
  475. data/lib/rubocop/cop/variable_force/assignment.rb +24 -5
  476. data/lib/rubocop/cop/variable_force/branch.rb +1 -1
  477. data/lib/rubocop/cop/variable_force/scope.rb +1 -1
  478. data/lib/rubocop/cop/variable_force/variable.rb +14 -3
  479. data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
  480. data/lib/rubocop/cop/variable_force.rb +30 -19
  481. data/lib/rubocop/cops_documentation_generator.rb +54 -28
  482. data/lib/rubocop/directive_comment.rb +45 -11
  483. data/lib/rubocop/ext/regexp_node.rb +0 -1
  484. data/lib/rubocop/formatter/disabled_config_formatter.rb +20 -6
  485. data/lib/rubocop/formatter/formatter_set.rb +1 -1
  486. data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
  487. data/lib/rubocop/formatter/html_formatter.rb +1 -1
  488. data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
  489. data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
  490. data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
  491. data/lib/rubocop/lsp/diagnostic.rb +190 -0
  492. data/lib/rubocop/lsp/logger.rb +2 -2
  493. data/lib/rubocop/lsp/routes.rb +66 -26
  494. data/lib/rubocop/lsp/runtime.rb +18 -50
  495. data/lib/rubocop/lsp/server.rb +2 -4
  496. data/lib/rubocop/lsp/stdin_runner.rb +69 -0
  497. data/lib/rubocop/magic_comment.rb +11 -3
  498. data/lib/rubocop/options.rb +28 -12
  499. data/lib/rubocop/path_util.rb +15 -8
  500. data/lib/rubocop/pending_cops_reporter.rb +56 -0
  501. data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
  502. data/lib/rubocop/plugin/load_error.rb +26 -0
  503. data/lib/rubocop/plugin/loader.rb +100 -0
  504. data/lib/rubocop/plugin/not_supported_error.rb +29 -0
  505. data/lib/rubocop/plugin.rb +46 -0
  506. data/lib/rubocop/rake_task.rb +4 -1
  507. data/lib/rubocop/result_cache.rb +27 -25
  508. data/lib/rubocop/rspec/cop_helper.rb +13 -1
  509. data/lib/rubocop/rspec/expect_offense.rb +15 -5
  510. data/lib/rubocop/rspec/shared_contexts.rb +38 -1
  511. data/lib/rubocop/rspec/support.rb +4 -2
  512. data/lib/rubocop/runner.rb +31 -18
  513. data/lib/rubocop/server/cache.rb +51 -13
  514. data/lib/rubocop/server/cli.rb +2 -2
  515. data/lib/rubocop/server/client_command/base.rb +10 -0
  516. data/lib/rubocop/server/client_command/exec.rb +2 -1
  517. data/lib/rubocop/server/client_command/start.rb +11 -1
  518. data/lib/rubocop/target_finder.rb +14 -9
  519. data/lib/rubocop/target_ruby.rb +27 -3
  520. data/lib/rubocop/version.rb +53 -12
  521. data/lib/rubocop.rb +44 -2
  522. data/lib/ruby_lsp/rubocop/addon.rb +90 -0
  523. data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
  524. metadata +91 -21
  525. data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
  526. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
data/lib/rubocop.rb CHANGED
@@ -11,6 +11,7 @@ require 'rainbow'
11
11
 
12
12
  require 'regexp_parser'
13
13
  require 'set'
14
+ require 'stringio'
14
15
  require 'unicode/display_width'
15
16
 
16
17
  # we have to require RuboCop's version, before rubocop-ast's
@@ -74,15 +75,19 @@ require_relative 'rubocop/cop/mixin/allowed_identifiers'
74
75
  require_relative 'rubocop/cop/mixin/allowed_methods'
75
76
  require_relative 'rubocop/cop/mixin/allowed_pattern'
76
77
  require_relative 'rubocop/cop/mixin/allowed_receivers'
78
+ require_relative 'rubocop/cop/mixin/forbidden_identifiers'
79
+ require_relative 'rubocop/cop/mixin/forbidden_pattern'
77
80
  require_relative 'rubocop/cop/mixin/auto_corrector' # rubocop:todo Naming/InclusiveLanguage
78
81
  require_relative 'rubocop/cop/mixin/check_assignment'
79
82
  require_relative 'rubocop/cop/mixin/check_line_breakable'
83
+ require_relative 'rubocop/cop/mixin/check_single_line_suitability'
80
84
  require_relative 'rubocop/cop/mixin/configurable_max'
81
85
  require_relative 'rubocop/cop/mixin/code_length' # relies on configurable_max
82
86
  require_relative 'rubocop/cop/mixin/configurable_enforced_style'
83
87
  require_relative 'rubocop/cop/mixin/configurable_formatting'
84
88
  require_relative 'rubocop/cop/mixin/configurable_naming'
85
89
  require_relative 'rubocop/cop/mixin/configurable_numbering'
90
+ require_relative 'rubocop/cop/mixin/dig_help'
86
91
  require_relative 'rubocop/cop/mixin/documentation_comment'
87
92
  require_relative 'rubocop/cop/mixin/duplication'
88
93
  require_relative 'rubocop/cop/mixin/range_help'
@@ -90,12 +95,14 @@ require_relative 'rubocop/cop/mixin/annotation_comment' # relies on range
90
95
  require_relative 'rubocop/cop/mixin/empty_lines_around_body' # relies on range
91
96
  require_relative 'rubocop/cop/mixin/empty_parameter'
92
97
  require_relative 'rubocop/cop/mixin/end_keyword_alignment'
98
+ require_relative 'rubocop/cop/mixin/endless_method_rewriter'
93
99
  require_relative 'rubocop/cop/mixin/enforce_superclass'
94
100
  require_relative 'rubocop/cop/mixin/first_element_line_break'
95
101
  require_relative 'rubocop/cop/mixin/frozen_string_literal'
96
102
  require_relative 'rubocop/cop/mixin/gem_declaration'
97
103
  require_relative 'rubocop/cop/mixin/gemspec_help'
98
104
  require_relative 'rubocop/cop/mixin/hash_alignment_styles'
105
+ require_relative 'rubocop/cop/mixin/hash_subset'
99
106
  require_relative 'rubocop/cop/mixin/hash_transform_method'
100
107
  require_relative 'rubocop/cop/mixin/integer_node'
101
108
  require_relative 'rubocop/cop/mixin/interpolation'
@@ -143,7 +150,6 @@ require_relative 'rubocop/cop/mixin/comments_help' # relies on visibility_help
143
150
  require_relative 'rubocop/cop/mixin/def_node' # relies on visibility_help
144
151
 
145
152
  require_relative 'rubocop/cop/utils/format_string'
146
- require_relative 'rubocop/cop/utils/regexp_ranges'
147
153
 
148
154
  require_relative 'rubocop/cop/migration/department_name'
149
155
 
@@ -174,6 +180,7 @@ require_relative 'rubocop/cop/bundler/insecure_protocol_source'
174
180
  require_relative 'rubocop/cop/bundler/ordered_gems'
175
181
 
176
182
  require_relative 'rubocop/cop/gemspec/add_runtime_dependency'
183
+ require_relative 'rubocop/cop/gemspec/attribute_assignment'
177
184
  require_relative 'rubocop/cop/gemspec/dependency_version'
178
185
  require_relative 'rubocop/cop/gemspec/deprecated_attribute_assignment'
179
186
  require_relative 'rubocop/cop/gemspec/development_dependencies'
@@ -204,6 +211,7 @@ require_relative 'rubocop/cop/layout/empty_line_after_guard_clause'
204
211
  require_relative 'rubocop/cop/layout/empty_line_after_magic_comment'
205
212
  require_relative 'rubocop/cop/layout/empty_line_after_multiline_condition'
206
213
  require_relative 'rubocop/cop/layout/empty_line_between_defs'
214
+ require_relative 'rubocop/cop/layout/empty_lines_after_module_inclusion'
207
215
  require_relative 'rubocop/cop/layout/empty_lines_around_access_modifier'
208
216
  require_relative 'rubocop/cop/layout/empty_lines_around_arguments'
209
217
  require_relative 'rubocop/cop/layout/empty_lines_around_attribute_accessor'
@@ -283,12 +291,14 @@ require_relative 'rubocop/cop/layout/space_inside_string_interpolation'
283
291
  require_relative 'rubocop/cop/layout/trailing_empty_lines'
284
292
  require_relative 'rubocop/cop/layout/trailing_whitespace'
285
293
 
294
+ require_relative 'rubocop/cop/lint/utils/nil_receiver_checker'
286
295
  require_relative 'rubocop/cop/lint/ambiguous_assignment'
287
296
  require_relative 'rubocop/cop/lint/ambiguous_block_association'
288
297
  require_relative 'rubocop/cop/lint/ambiguous_operator'
289
298
  require_relative 'rubocop/cop/lint/ambiguous_operator_precedence'
290
299
  require_relative 'rubocop/cop/lint/ambiguous_range'
291
300
  require_relative 'rubocop/cop/lint/ambiguous_regexp_literal'
301
+ require_relative 'rubocop/cop/lint/array_literal_in_regexp'
292
302
  require_relative 'rubocop/cop/lint/assignment_in_condition'
293
303
  require_relative 'rubocop/cop/lint/big_decimal_new'
294
304
  require_relative 'rubocop/cop/lint/binary_operator_with_identical_operands'
@@ -296,7 +306,9 @@ require_relative 'rubocop/cop/lint/boolean_symbol'
296
306
  require_relative 'rubocop/cop/lint/circular_argument_reference'
297
307
  require_relative 'rubocop/cop/lint/constant_definition_in_block'
298
308
  require_relative 'rubocop/cop/lint/constant_overwritten_in_rescue'
309
+ require_relative 'rubocop/cop/lint/constant_reassignment'
299
310
  require_relative 'rubocop/cop/lint/constant_resolution'
311
+ require_relative 'rubocop/cop/lint/cop_directive_syntax'
300
312
  require_relative 'rubocop/cop/lint/debugger'
301
313
  require_relative 'rubocop/cop/lint/deprecated_class_methods'
302
314
  require_relative 'rubocop/cop/lint/deprecated_constants'
@@ -325,12 +337,14 @@ require_relative 'rubocop/cop/lint/empty_in_pattern'
325
337
  require_relative 'rubocop/cop/lint/empty_interpolation'
326
338
  require_relative 'rubocop/cop/lint/empty_when'
327
339
  require_relative 'rubocop/cop/lint/ensure_return'
340
+ require_relative 'rubocop/cop/lint/shared_mutable_default'
328
341
  require_relative 'rubocop/cop/lint/erb_new_arguments'
329
342
  require_relative 'rubocop/cop/lint/flip_flop'
330
343
  require_relative 'rubocop/cop/lint/float_comparison'
331
344
  require_relative 'rubocop/cop/lint/float_out_of_range'
332
345
  require_relative 'rubocop/cop/lint/format_parameter_mismatch'
333
346
  require_relative 'rubocop/cop/lint/hash_compare_by_identity'
347
+ require_relative 'rubocop/cop/lint/hash_new_with_keyword_arguments_as_default'
334
348
  require_relative 'rubocop/cop/lint/heredoc_method_call_position'
335
349
  require_relative 'rubocop/cop/lint/identity_comparison'
336
350
  require_relative 'rubocop/cop/lint/implicit_string_concatenation'
@@ -358,6 +372,7 @@ require_relative 'rubocop/cop/lint/non_deterministic_require_order'
358
372
  require_relative 'rubocop/cop/lint/non_local_exit_from_iterator'
359
373
  require_relative 'rubocop/cop/lint/number_conversion'
360
374
  require_relative 'rubocop/cop/lint/numbered_parameter_assignment'
375
+ require_relative 'rubocop/cop/lint/numeric_operation_with_constant_result'
361
376
  require_relative 'rubocop/cop/lint/or_assignment_to_constant'
362
377
  require_relative 'rubocop/cop/lint/ordered_magic_comments'
363
378
  require_relative 'rubocop/cop/lint/out_of_range_regexp_ref'
@@ -374,6 +389,7 @@ require_relative 'rubocop/cop/lint/redundant_require_statement'
374
389
  require_relative 'rubocop/cop/lint/redundant_safe_navigation'
375
390
  require_relative 'rubocop/cop/lint/redundant_splat_expansion'
376
391
  require_relative 'rubocop/cop/lint/redundant_string_coercion'
392
+ require_relative 'rubocop/cop/lint/redundant_type_conversion'
377
393
  require_relative 'rubocop/cop/lint/redundant_with_index'
378
394
  require_relative 'rubocop/cop/lint/redundant_with_object'
379
395
  require_relative 'rubocop/cop/lint/refinement_import_methods'
@@ -395,6 +411,7 @@ require_relative 'rubocop/cop/lint/shadowed_exception'
395
411
  require_relative 'rubocop/cop/lint/shadowing_outer_local_variable'
396
412
  require_relative 'rubocop/cop/lint/struct_new_override'
397
413
  require_relative 'rubocop/cop/lint/suppressed_exception'
414
+ require_relative 'rubocop/cop/lint/suppressed_exception_in_number_conversion'
398
415
  require_relative 'rubocop/cop/lint/symbol_conversion'
399
416
  require_relative 'rubocop/cop/lint/syntax'
400
417
  require_relative 'rubocop/cop/lint/to_enum_arguments'
@@ -403,6 +420,7 @@ require_relative 'rubocop/cop/lint/top_level_return_with_argument'
403
420
  require_relative 'rubocop/cop/lint/trailing_comma_in_attribute_declaration'
404
421
  require_relative 'rubocop/cop/lint/triple_quotes'
405
422
  require_relative 'rubocop/cop/lint/underscore_prefixed_variable_name'
423
+ require_relative 'rubocop/cop/lint/unescaped_bracket_in_regexp'
406
424
  require_relative 'rubocop/cop/lint/unexpected_block_arity'
407
425
  require_relative 'rubocop/cop/lint/unified_integer'
408
426
  require_relative 'rubocop/cop/lint/unmodified_reduce_accumulator'
@@ -414,9 +432,13 @@ require_relative 'rubocop/cop/lint/uri_escape_unescape'
414
432
  require_relative 'rubocop/cop/lint/uri_regexp'
415
433
  require_relative 'rubocop/cop/lint/useless_access_modifier'
416
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'
417
438
  require_relative 'rubocop/cop/lint/useless_else_without_rescue'
418
439
  require_relative 'rubocop/cop/lint/useless_method_definition'
419
440
  require_relative 'rubocop/cop/lint/useless_numeric_operation'
441
+ require_relative 'rubocop/cop/lint/useless_or'
420
442
  require_relative 'rubocop/cop/lint/useless_rescue'
421
443
  require_relative 'rubocop/cop/lint/useless_ruby2_keywords'
422
444
  require_relative 'rubocop/cop/lint/useless_setter_call'
@@ -452,7 +474,8 @@ require_relative 'rubocop/cop/naming/memoized_instance_variable_name'
452
474
  require_relative 'rubocop/cop/naming/method_name'
453
475
  require_relative 'rubocop/cop/naming/method_parameter_name'
454
476
  require_relative 'rubocop/cop/naming/binary_operator_parameter_name'
455
- require_relative 'rubocop/cop/naming/predicate_name'
477
+ require_relative 'rubocop/cop/naming/predicate_method'
478
+ require_relative 'rubocop/cop/naming/predicate_prefix'
456
479
  require_relative 'rubocop/cop/naming/rescued_exceptions_variable_name'
457
480
  require_relative 'rubocop/cop/naming/variable_name'
458
481
  require_relative 'rubocop/cop/naming/variable_number'
@@ -460,11 +483,13 @@ require_relative 'rubocop/cop/naming/variable_number'
460
483
  require_relative 'rubocop/cop/style/access_modifier_declarations'
461
484
  require_relative 'rubocop/cop/style/accessor_grouping'
462
485
  require_relative 'rubocop/cop/style/alias'
486
+ require_relative 'rubocop/cop/style/ambiguous_endless_method_definition'
463
487
  require_relative 'rubocop/cop/style/and_or'
464
488
  require_relative 'rubocop/cop/style/arguments_forwarding'
465
489
  require_relative 'rubocop/cop/style/array_coercion'
466
490
  require_relative 'rubocop/cop/style/array_first_last'
467
491
  require_relative 'rubocop/cop/style/array_intersect'
492
+ require_relative 'rubocop/cop/style/array_intersect_with_single_element'
468
493
  require_relative 'rubocop/cop/style/array_join'
469
494
  require_relative 'rubocop/cop/style/ascii_comments'
470
495
  require_relative 'rubocop/cop/style/attr'
@@ -472,6 +497,7 @@ require_relative 'rubocop/cop/style/auto_resource_cleanup'
472
497
  require_relative 'rubocop/cop/style/bare_percent_literals'
473
498
  require_relative 'rubocop/cop/style/begin_block'
474
499
  require_relative 'rubocop/cop/style/bisected_attr_accessor'
500
+ require_relative 'rubocop/cop/style/bitwise_predicate'
475
501
  require_relative 'rubocop/cop/style/block_comments'
476
502
  require_relative 'rubocop/cop/style/block_delimiters'
477
503
  require_relative 'rubocop/cop/style/case_equality'
@@ -485,12 +511,15 @@ require_relative 'rubocop/cop/style/class_methods_definitions'
485
511
  require_relative 'rubocop/cop/style/class_vars'
486
512
  require_relative 'rubocop/cop/style/collection_compact'
487
513
  require_relative 'rubocop/cop/style/collection_methods'
514
+ require_relative 'rubocop/cop/style/collection_querying'
488
515
  require_relative 'rubocop/cop/style/colon_method_call'
489
516
  require_relative 'rubocop/cop/style/colon_method_definition'
517
+ require_relative 'rubocop/cop/style/combinable_defined'
490
518
  require_relative 'rubocop/cop/style/combinable_loops'
491
519
  require_relative 'rubocop/cop/style/command_literal'
492
520
  require_relative 'rubocop/cop/style/comment_annotation'
493
521
  require_relative 'rubocop/cop/style/commented_keyword'
522
+ require_relative 'rubocop/cop/style/comparable_between'
494
523
  require_relative 'rubocop/cop/style/comparable_clamp'
495
524
  require_relative 'rubocop/cop/style/concat_array_literals'
496
525
  require_relative 'rubocop/cop/style/conditional_assignment'
@@ -499,6 +528,7 @@ require_relative 'rubocop/cop/style/copyright'
499
528
  require_relative 'rubocop/cop/style/data_inheritance'
500
529
  require_relative 'rubocop/cop/style/date_time'
501
530
  require_relative 'rubocop/cop/style/def_with_parentheses'
531
+ require_relative 'rubocop/cop/style/dig_chain'
502
532
  require_relative 'rubocop/cop/style/dir'
503
533
  require_relative 'rubocop/cop/style/dir_empty'
504
534
  require_relative 'rubocop/cop/style/disable_cops_within_source_code_directive'
@@ -516,6 +546,7 @@ require_relative 'rubocop/cop/style/empty_heredoc'
516
546
  require_relative 'rubocop/cop/style/empty_lambda_parameter'
517
547
  require_relative 'rubocop/cop/style/empty_literal'
518
548
  require_relative 'rubocop/cop/style/empty_method'
549
+ require_relative 'rubocop/cop/style/empty_string_inside_interpolation'
519
550
  require_relative 'rubocop/cop/style/endless_method'
520
551
  require_relative 'rubocop/cop/style/encoding'
521
552
  require_relative 'rubocop/cop/style/end_block'
@@ -528,7 +559,9 @@ require_relative 'rubocop/cop/style/explicit_block_argument'
528
559
  require_relative 'rubocop/cop/style/exponential_notation'
529
560
  require_relative 'rubocop/cop/style/fetch_env_var'
530
561
  require_relative 'rubocop/cop/style/file_empty'
562
+ require_relative 'rubocop/cop/style/file_null'
531
563
  require_relative 'rubocop/cop/style/file_read'
564
+ require_relative 'rubocop/cop/style/file_touch'
532
565
  require_relative 'rubocop/cop/style/file_write'
533
566
  require_relative 'rubocop/cop/style/float_division'
534
567
  require_relative 'rubocop/cop/style/for'
@@ -542,7 +575,9 @@ require_relative 'rubocop/cop/style/hash_as_last_array_item'
542
575
  require_relative 'rubocop/cop/style/hash_conversion'
543
576
  require_relative 'rubocop/cop/style/hash_each_methods'
544
577
  require_relative 'rubocop/cop/style/hash_except'
578
+ require_relative 'rubocop/cop/style/hash_fetch_chain'
545
579
  require_relative 'rubocop/cop/style/hash_like_case'
580
+ require_relative 'rubocop/cop/style/hash_slice'
546
581
  require_relative 'rubocop/cop/style/hash_syntax'
547
582
  require_relative 'rubocop/cop/style/hash_transform_keys'
548
583
  require_relative 'rubocop/cop/style/hash_transform_values'
@@ -559,6 +594,9 @@ require_relative 'rubocop/cop/style/inverse_methods'
559
594
  require_relative 'rubocop/cop/style/inline_comment'
560
595
  require_relative 'rubocop/cop/style/invertible_unless_condition'
561
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'
562
600
  require_relative 'rubocop/cop/style/keyword_parameters_order'
563
601
  require_relative 'rubocop/cop/style/lambda'
564
602
  require_relative 'rubocop/cop/style/lambda_call'
@@ -575,6 +613,7 @@ require_relative 'rubocop/cop/style/numbered_parameters'
575
613
  require_relative 'rubocop/cop/style/open_struct_use'
576
614
  require_relative 'rubocop/cop/style/operator_method_call'
577
615
  require_relative 'rubocop/cop/style/redundant_array_constructor'
616
+ require_relative 'rubocop/cop/style/redundant_array_flatten'
578
617
  require_relative 'rubocop/cop/style/redundant_assignment'
579
618
  require_relative 'rubocop/cop/style/redundant_constant_base'
580
619
  require_relative 'rubocop/cop/style/redundant_current_directory_in_path'
@@ -583,6 +622,7 @@ require_relative 'rubocop/cop/style/redundant_each'
583
622
  require_relative 'rubocop/cop/style/redundant_fetch_block'
584
623
  require_relative 'rubocop/cop/style/redundant_file_extension_in_require'
585
624
  require_relative 'rubocop/cop/style/redundant_filter_chain'
625
+ require_relative 'rubocop/cop/style/redundant_format'
586
626
  require_relative 'rubocop/cop/style/redundant_heredoc_delimiter_quotes'
587
627
  require_relative 'rubocop/cop/style/redundant_initialize'
588
628
  require_relative 'rubocop/cop/style/redundant_interpolation_unfreeze'
@@ -592,6 +632,7 @@ require_relative 'rubocop/cop/style/redundant_regexp_constructor'
592
632
  require_relative 'rubocop/cop/style/redundant_self_assignment'
593
633
  require_relative 'rubocop/cop/style/redundant_self_assignment_branch'
594
634
  require_relative 'rubocop/cop/style/require_order'
635
+ require_relative 'rubocop/cop/style/safe_navigation_chain_length'
595
636
  require_relative 'rubocop/cop/style/single_line_do_end_block'
596
637
  require_relative 'rubocop/cop/style/sole_nested_conditional'
597
638
  require_relative 'rubocop/cop/style/static_class'
@@ -774,6 +815,7 @@ require_relative 'rubocop/options'
774
815
  require_relative 'rubocop/remote_config'
775
816
  require_relative 'rubocop/target_ruby'
776
817
  require_relative 'rubocop/yaml_duplication_checker'
818
+ require_relative 'rubocop/pending_cops_reporter'
777
819
 
778
820
  # rubocop:enable Style/RequireOrder
779
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