rubocop 1.52.1 → 1.79.2

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