rubocop 1.30.1 → 1.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +8 -6
  4. data/assets/output.css.erb +159 -0
  5. data/assets/output.html.erb +1 -160
  6. data/config/default.yml +584 -73
  7. data/config/obsoletion.yml +30 -1
  8. data/exe/rubocop +15 -7
  9. data/lib/rubocop/arguments_env.rb +17 -0
  10. data/lib/rubocop/arguments_file.rb +17 -0
  11. data/lib/rubocop/cache_config.rb +29 -0
  12. data/lib/rubocop/cached_data.rb +11 -3
  13. data/lib/rubocop/cli/command/{auto_genenerate_config.rb → auto_generate_config.rb} +30 -9
  14. data/lib/rubocop/cli/command/execute_runner.rb +14 -9
  15. data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
  16. data/lib/rubocop/cli/command/lsp.rb +19 -0
  17. data/lib/rubocop/cli/command/show_docs_url.rb +2 -2
  18. data/lib/rubocop/cli/command/suggest_extensions.rb +61 -16
  19. data/lib/rubocop/cli.rb +70 -11
  20. data/lib/rubocop/comment_config.rb +60 -1
  21. data/lib/rubocop/config.rb +84 -28
  22. data/lib/rubocop/config_finder.rb +78 -0
  23. data/lib/rubocop/config_loader.rb +46 -68
  24. data/lib/rubocop/config_loader_resolver.rb +8 -8
  25. data/lib/rubocop/config_obsoletion/changed_parameter.rb +5 -0
  26. data/lib/rubocop/config_obsoletion/parameter_rule.rb +13 -1
  27. data/lib/rubocop/config_obsoletion.rb +15 -7
  28. data/lib/rubocop/config_validator.rb +16 -9
  29. data/lib/rubocop/cop/autocorrect_logic.rb +37 -14
  30. data/lib/rubocop/cop/badge.rb +9 -4
  31. data/lib/rubocop/cop/base.rb +181 -98
  32. data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -1
  33. data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
  34. data/lib/rubocop/cop/bundler/gem_comment.rb +4 -4
  35. data/lib/rubocop/cop/bundler/gem_filename.rb +4 -4
  36. data/lib/rubocop/cop/bundler/gem_version.rb +5 -7
  37. data/lib/rubocop/cop/bundler/ordered_gems.rb +11 -3
  38. data/lib/rubocop/cop/commissioner.rb +19 -6
  39. data/lib/rubocop/cop/cop.rb +54 -34
  40. data/lib/rubocop/cop/corrector.rb +33 -13
  41. data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -3
  42. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
  43. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +6 -14
  44. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -4
  45. data/lib/rubocop/cop/correctors/line_break_corrector.rb +1 -1
  46. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -10
  47. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +2 -7
  48. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +58 -0
  49. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
  50. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +1 -1
  51. data/lib/rubocop/cop/documentation.rb +16 -6
  52. data/lib/rubocop/cop/exclude_limit.rb +1 -1
  53. data/lib/rubocop/cop/gemspec/dependency_version.rb +22 -26
  54. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +33 -18
  55. data/lib/rubocop/cop/gemspec/development_dependencies.rb +107 -0
  56. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -1
  57. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +10 -2
  58. data/lib/rubocop/cop/gemspec/require_mfa.rb +21 -21
  59. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -1
  60. data/lib/rubocop/cop/generator/require_file_injector.rb +3 -3
  61. data/lib/rubocop/cop/generator.rb +6 -3
  62. data/lib/rubocop/cop/internal_affairs/cop_description.rb +38 -12
  63. data/lib/rubocop/cop/internal_affairs/create_empty_file.rb +37 -0
  64. data/lib/rubocop/cop/internal_affairs/example_description.rb +46 -24
  65. data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +111 -0
  66. data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +1 -1
  67. data/lib/rubocop/cop/internal_affairs/lambda_or_proc.rb +46 -0
  68. data/lib/rubocop/cop/internal_affairs/location_expression.rb +37 -0
  69. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -1
  70. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
  71. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
  72. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +53 -0
  73. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +128 -38
  74. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -1
  75. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +69 -0
  76. data/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb +42 -0
  77. data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
  78. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +11 -3
  79. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
  80. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -1
  81. data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
  82. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +66 -0
  83. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +62 -0
  84. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -0
  85. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +60 -0
  86. data/lib/rubocop/cop/internal_affairs.rb +11 -0
  87. data/lib/rubocop/cop/layout/argument_alignment.rb +1 -1
  88. data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
  89. data/lib/rubocop/cop/layout/block_alignment.rb +16 -12
  90. data/lib/rubocop/cop/layout/block_end_newline.rb +31 -9
  91. data/lib/rubocop/cop/layout/class_structure.rb +44 -27
  92. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +2 -3
  93. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +2 -6
  94. data/lib/rubocop/cop/layout/comment_indentation.rb +4 -2
  95. data/lib/rubocop/cop/layout/dot_position.rb +1 -5
  96. data/lib/rubocop/cop/layout/empty_comment.rb +6 -4
  97. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +42 -9
  98. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
  99. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +28 -5
  100. data/lib/rubocop/cop/layout/empty_lines.rb +3 -1
  101. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +7 -2
  102. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +25 -4
  103. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -0
  104. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -0
  105. data/lib/rubocop/cop/layout/end_alignment.rb +23 -3
  106. data/lib/rubocop/cop/layout/end_of_line.rb +4 -4
  107. data/lib/rubocop/cop/layout/extra_spacing.rb +12 -9
  108. data/lib/rubocop/cop/layout/first_argument_indentation.rb +15 -4
  109. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +44 -20
  110. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +35 -8
  111. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +51 -12
  112. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +36 -1
  113. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +57 -8
  114. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +52 -19
  115. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
  116. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +12 -6
  117. data/lib/rubocop/cop/layout/heredoc_indentation.rb +12 -12
  118. data/lib/rubocop/cop/layout/indentation_style.rb +8 -3
  119. data/lib/rubocop/cop/layout/indentation_width.rb +9 -5
  120. data/lib/rubocop/cop/layout/initial_indentation.rb +2 -2
  121. data/lib/rubocop/cop/layout/leading_comment_space.rb +2 -2
  122. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +144 -0
  123. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +140 -0
  124. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -0
  125. data/lib/rubocop/cop/layout/line_length.rb +8 -1
  126. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +31 -1
  127. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
  128. data/lib/rubocop/cop/layout/multiline_block_layout.rb +4 -2
  129. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +29 -1
  130. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +39 -2
  131. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +20 -5
  132. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +77 -0
  133. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +2 -2
  134. data/lib/rubocop/cop/layout/redundant_line_break.rb +35 -13
  135. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +6 -6
  136. data/lib/rubocop/cop/layout/single_line_block_chain.rb +5 -0
  137. data/lib/rubocop/cop/layout/space_after_comma.rb +9 -1
  138. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  139. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +2 -2
  140. data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -3
  141. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +2 -2
  142. data/lib/rubocop/cop/layout/space_around_operators.rb +54 -22
  143. data/lib/rubocop/cop/layout/space_before_block_braces.rb +22 -11
  144. data/lib/rubocop/cop/layout/space_before_first_arg.rb +2 -2
  145. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -2
  146. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +22 -20
  147. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -0
  148. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +32 -12
  149. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +31 -4
  150. data/lib/rubocop/cop/layout/space_inside_parens.rb +3 -3
  151. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +34 -0
  152. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
  153. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +10 -6
  154. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +5 -4
  155. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +6 -1
  156. data/lib/rubocop/cop/layout/trailing_whitespace.rb +13 -6
  157. data/lib/rubocop/cop/legacy/corrections_proxy.rb +1 -1
  158. data/lib/rubocop/cop/legacy/corrector.rb +1 -1
  159. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +40 -8
  160. data/lib/rubocop/cop/lint/ambiguous_operator.rb +4 -0
  161. data/lib/rubocop/cop/lint/assignment_in_condition.rb +17 -7
  162. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +2 -2
  163. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +51 -0
  164. data/lib/rubocop/cop/lint/constant_resolution.rb +5 -1
  165. data/lib/rubocop/cop/lint/debugger.rb +69 -34
  166. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +66 -110
  167. data/lib/rubocop/cop/lint/deprecated_constants.rb +8 -1
  168. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +1 -1
  169. data/lib/rubocop/cop/lint/duplicate_branch.rb +0 -2
  170. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -1
  171. data/lib/rubocop/cop/lint/duplicate_magic_comment.rb +73 -0
  172. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +122 -0
  173. data/lib/rubocop/cop/lint/duplicate_methods.rb +49 -19
  174. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +55 -11
  175. data/lib/rubocop/cop/lint/duplicate_require.rb +1 -1
  176. data/lib/rubocop/cop/lint/else_layout.rb +3 -7
  177. data/lib/rubocop/cop/lint/empty_block.rb +4 -8
  178. data/lib/rubocop/cop/lint/empty_class.rb +3 -1
  179. data/lib/rubocop/cop/lint/empty_conditional_body.rb +110 -2
  180. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
  181. data/lib/rubocop/cop/lint/erb_new_arguments.rb +15 -16
  182. data/lib/rubocop/cop/lint/float_comparison.rb +10 -0
  183. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +14 -7
  184. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
  185. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +16 -18
  186. data/lib/rubocop/cop/lint/identity_comparison.rb +0 -1
  187. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  188. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -3
  189. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
  190. data/lib/rubocop/cop/lint/inherit_exception.rb +9 -0
  191. data/lib/rubocop/cop/lint/interpolation_check.rb +5 -4
  192. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +56 -0
  193. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
  194. data/lib/rubocop/cop/lint/literal_as_condition.rb +5 -0
  195. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
  196. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +49 -3
  197. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +18 -3
  198. data/lib/rubocop/cop/lint/missing_super.rb +63 -5
  199. data/lib/rubocop/cop/lint/mixed_case_range.rb +116 -0
  200. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -0
  201. data/lib/rubocop/cop/lint/nested_method_definition.rb +53 -9
  202. data/lib/rubocop/cop/lint/next_without_accumulator.rb +11 -7
  203. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +165 -0
  204. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +15 -5
  205. data/lib/rubocop/cop/lint/number_conversion.rb +45 -13
  206. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +2 -2
  207. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -0
  208. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +4 -6
  209. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +17 -2
  210. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +6 -1
  211. data/lib/rubocop/cop/lint/percent_string_array.rb +1 -1
  212. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
  213. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +54 -14
  214. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -7
  215. data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +7 -0
  216. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
  217. data/lib/rubocop/cop/lint/redundant_require_statement.rb +57 -10
  218. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +85 -8
  219. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
  220. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +35 -15
  221. data/lib/rubocop/cop/lint/redundant_with_index.rb +18 -11
  222. data/lib/rubocop/cop/lint/redundant_with_object.rb +13 -12
  223. data/lib/rubocop/cop/lint/refinement_import_methods.rb +2 -1
  224. data/lib/rubocop/cop/lint/regexp_as_condition.rb +8 -2
  225. data/lib/rubocop/cop/lint/require_parentheses.rb +3 -1
  226. data/lib/rubocop/cop/lint/require_range_parentheses.rb +57 -0
  227. data/lib/rubocop/cop/lint/rescue_type.rb +2 -4
  228. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +50 -11
  229. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +1 -1
  230. data/lib/rubocop/cop/lint/script_permission.rb +3 -3
  231. data/lib/rubocop/cop/lint/self_assignment.rb +38 -0
  232. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +6 -6
  233. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
  234. data/lib/rubocop/cop/lint/shadowed_exception.rb +21 -22
  235. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +35 -4
  236. data/lib/rubocop/cop/lint/struct_new_override.rb +14 -14
  237. data/lib/rubocop/cop/lint/suppressed_exception.rb +3 -3
  238. data/lib/rubocop/cop/lint/symbol_conversion.rb +8 -3
  239. data/lib/rubocop/cop/lint/syntax.rb +10 -3
  240. data/lib/rubocop/cop/lint/to_enum_arguments.rb +23 -6
  241. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +23 -9
  242. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +2 -2
  243. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +2 -2
  244. data/lib/rubocop/cop/lint/unreachable_code.rb +4 -2
  245. data/lib/rubocop/cop/lint/unreachable_loop.rb +20 -8
  246. data/lib/rubocop/cop/lint/unused_method_argument.rb +6 -1
  247. data/lib/rubocop/cop/lint/useless_access_modifier.rb +19 -14
  248. data/lib/rubocop/cop/lint/useless_assignment.rb +94 -10
  249. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +44 -0
  250. data/lib/rubocop/cop/lint/useless_method_definition.rb +12 -4
  251. data/lib/rubocop/cop/lint/useless_rescue.rb +89 -0
  252. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +15 -5
  253. data/lib/rubocop/cop/lint/useless_times.rb +3 -3
  254. data/lib/rubocop/cop/lint/void.rb +126 -25
  255. data/lib/rubocop/cop/metrics/abc_size.rb +7 -5
  256. data/lib/rubocop/cop/metrics/block_length.rb +17 -12
  257. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
  258. data/lib/rubocop/cop/metrics/class_length.rb +17 -6
  259. data/lib/rubocop/cop/metrics/collection_literal_length.rb +76 -0
  260. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
  261. data/lib/rubocop/cop/metrics/method_length.rb +18 -12
  262. data/lib/rubocop/cop/metrics/module_length.rb +10 -5
  263. data/lib/rubocop/cop/metrics/parameter_lists.rb +27 -0
  264. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  265. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -8
  266. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +43 -12
  267. data/lib/rubocop/cop/migration/department_name.rb +3 -3
  268. data/lib/rubocop/cop/mixin/alignment.rb +2 -2
  269. data/lib/rubocop/cop/mixin/allowed_identifiers.rb +2 -2
  270. data/lib/rubocop/cop/mixin/allowed_methods.rb +23 -2
  271. data/lib/rubocop/cop/mixin/allowed_pattern.rb +17 -1
  272. data/lib/rubocop/cop/mixin/allowed_receivers.rb +34 -0
  273. data/lib/rubocop/cop/mixin/annotation_comment.rb +14 -7
  274. data/lib/rubocop/cop/mixin/check_line_breakable.rb +5 -1
  275. data/lib/rubocop/cop/mixin/code_length.rb +12 -1
  276. data/lib/rubocop/cop/mixin/comments_help.rb +37 -11
  277. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +21 -9
  278. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
  279. data/lib/rubocop/cop/mixin/def_node.rb +3 -8
  280. data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
  281. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  282. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -1
  283. data/lib/rubocop/cop/mixin/first_element_line_break.rb +11 -7
  284. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +4 -0
  285. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +1 -1
  286. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +162 -12
  287. data/lib/rubocop/cop/mixin/hash_transform_method.rb +13 -9
  288. data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
  289. data/lib/rubocop/cop/mixin/line_length_help.rb +11 -2
  290. data/lib/rubocop/cop/mixin/method_complexity.rb +28 -22
  291. data/lib/rubocop/cop/mixin/min_branches_count.rb +40 -0
  292. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +34 -12
  293. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +5 -6
  294. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +4 -3
  295. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
  296. data/lib/rubocop/cop/mixin/percent_array.rb +58 -1
  297. data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
  298. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +7 -9
  299. data/lib/rubocop/cop/mixin/range_help.rb +28 -7
  300. data/lib/rubocop/cop/mixin/require_library.rb +2 -0
  301. data/lib/rubocop/cop/mixin/rescue_node.rb +5 -3
  302. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
  303. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
  304. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
  305. data/lib/rubocop/cop/mixin/statement_modifier.rb +18 -3
  306. data/lib/rubocop/cop/mixin/string_help.rb +4 -2
  307. data/lib/rubocop/cop/mixin/surrounding_space.rb +13 -11
  308. data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -3
  309. data/lib/rubocop/cop/mixin/visibility_help.rb +40 -5
  310. data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
  311. data/lib/rubocop/cop/naming/block_forwarding.rb +39 -8
  312. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  313. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +3 -1
  314. data/lib/rubocop/cop/naming/constant_name.rb +4 -5
  315. data/lib/rubocop/cop/naming/file_name.rb +3 -3
  316. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +1 -1
  317. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
  318. data/lib/rubocop/cop/naming/inclusive_language.rb +29 -8
  319. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +26 -11
  320. data/lib/rubocop/cop/naming/method_name.rb +3 -3
  321. data/lib/rubocop/cop/naming/predicate_name.rb +33 -4
  322. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -4
  323. data/lib/rubocop/cop/naming/variable_name.rb +6 -1
  324. data/lib/rubocop/cop/registry.rb +74 -46
  325. data/lib/rubocop/cop/security/compound_hash.rb +4 -3
  326. data/lib/rubocop/cop/security/open.rb +2 -2
  327. data/lib/rubocop/cop/style/access_modifier_declarations.rb +142 -3
  328. data/lib/rubocop/cop/style/accessor_grouping.rb +50 -20
  329. data/lib/rubocop/cop/style/alias.rb +19 -9
  330. data/lib/rubocop/cop/style/arguments_forwarding.rb +414 -62
  331. data/lib/rubocop/cop/style/array_first_last.rb +64 -0
  332. data/lib/rubocop/cop/style/array_intersect.rb +119 -0
  333. data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
  334. data/lib/rubocop/cop/style/attr.rb +11 -1
  335. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
  336. data/lib/rubocop/cop/style/begin_block.rb +1 -2
  337. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +3 -3
  338. data/lib/rubocop/cop/style/block_comments.rb +3 -3
  339. data/lib/rubocop/cop/style/block_delimiters.rb +52 -15
  340. data/lib/rubocop/cop/style/case_equality.rb +40 -10
  341. data/lib/rubocop/cop/style/case_like_if.rb +25 -8
  342. data/lib/rubocop/cop/style/character_literal.rb +1 -1
  343. data/lib/rubocop/cop/style/class_and_module_children.rb +9 -16
  344. data/lib/rubocop/cop/style/class_check.rb +1 -0
  345. data/lib/rubocop/cop/style/class_equality_comparison.rb +79 -12
  346. data/lib/rubocop/cop/style/class_methods_definitions.rb +2 -1
  347. data/lib/rubocop/cop/style/class_vars.rb +3 -3
  348. data/lib/rubocop/cop/style/collection_compact.rb +44 -12
  349. data/lib/rubocop/cop/style/collection_methods.rb +4 -0
  350. data/lib/rubocop/cop/style/colon_method_call.rb +2 -2
  351. data/lib/rubocop/cop/style/combinable_loops.rb +38 -8
  352. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  353. data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
  354. data/lib/rubocop/cop/style/commented_keyword.rb +7 -4
  355. data/lib/rubocop/cop/style/comparable_clamp.rb +125 -0
  356. data/lib/rubocop/cop/style/concat_array_literals.rb +95 -0
  357. data/lib/rubocop/cop/style/conditional_assignment.rb +16 -20
  358. data/lib/rubocop/cop/style/copyright.rb +32 -22
  359. data/lib/rubocop/cop/style/data_inheritance.rb +75 -0
  360. data/lib/rubocop/cop/style/date_time.rb +5 -4
  361. data/lib/rubocop/cop/style/dir.rb +1 -1
  362. data/lib/rubocop/cop/style/dir_empty.rb +54 -0
  363. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
  364. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +3 -3
  365. data/lib/rubocop/cop/style/documentation.rb +22 -10
  366. data/lib/rubocop/cop/style/documentation_method.rb +30 -4
  367. data/lib/rubocop/cop/style/double_negation.rb +4 -2
  368. data/lib/rubocop/cop/style/each_for_simple_loop.rb +45 -10
  369. data/lib/rubocop/cop/style/each_with_object.rb +40 -9
  370. data/lib/rubocop/cop/style/empty_block_parameter.rb +2 -2
  371. data/lib/rubocop/cop/style/empty_case_condition.rb +6 -1
  372. data/lib/rubocop/cop/style/empty_else.rb +37 -0
  373. data/lib/rubocop/cop/style/empty_heredoc.rb +73 -0
  374. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +2 -2
  375. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  376. data/lib/rubocop/cop/style/empty_method.rb +17 -2
  377. data/lib/rubocop/cop/style/encoding.rb +1 -1
  378. data/lib/rubocop/cop/style/endless_method.rb +1 -1
  379. data/lib/rubocop/cop/style/eval_with_location.rb +14 -23
  380. data/lib/rubocop/cop/style/exact_regexp_match.rb +70 -0
  381. data/lib/rubocop/cop/style/explicit_block_argument.rb +8 -4
  382. data/lib/rubocop/cop/style/fetch_env_var.rb +10 -177
  383. data/lib/rubocop/cop/style/file_empty.rb +71 -0
  384. data/lib/rubocop/cop/style/file_read.rb +3 -3
  385. data/lib/rubocop/cop/style/file_write.rb +1 -1
  386. data/lib/rubocop/cop/style/for.rb +5 -1
  387. data/lib/rubocop/cop/style/format_string.rb +33 -12
  388. data/lib/rubocop/cop/style/format_string_token.rb +73 -23
  389. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +5 -3
  390. data/lib/rubocop/cop/style/guard_clause.rb +159 -42
  391. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +2 -1
  392. data/lib/rubocop/cop/style/hash_conversion.rb +10 -0
  393. data/lib/rubocop/cop/style/hash_each_methods.rb +131 -22
  394. data/lib/rubocop/cop/style/hash_except.rb +101 -9
  395. data/lib/rubocop/cop/style/hash_like_case.rb +3 -9
  396. data/lib/rubocop/cop/style/hash_syntax.rb +51 -5
  397. data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
  398. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
  399. data/lib/rubocop/cop/style/identical_conditional_branches.rb +47 -3
  400. data/lib/rubocop/cop/style/if_inside_else.rb +6 -0
  401. data/lib/rubocop/cop/style/if_unless_modifier.rb +112 -16
  402. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +34 -5
  403. data/lib/rubocop/cop/style/if_with_semicolon.rb +6 -6
  404. data/lib/rubocop/cop/style/implicit_runtime_error.rb +2 -2
  405. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  406. data/lib/rubocop/cop/style/inverse_methods.rb +21 -16
  407. data/lib/rubocop/cop/style/invertible_unless_condition.rb +160 -0
  408. data/lib/rubocop/cop/style/keyword_parameters_order.rb +1 -1
  409. data/lib/rubocop/cop/style/lambda.rb +3 -3
  410. data/lib/rubocop/cop/style/lambda_call.rb +5 -0
  411. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -2
  412. data/lib/rubocop/cop/style/magic_comment_format.rb +307 -0
  413. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +8 -10
  414. data/lib/rubocop/cop/style/map_into_array.rb +175 -0
  415. data/lib/rubocop/cop/style/map_to_hash.rb +21 -8
  416. data/lib/rubocop/cop/style/map_to_set.rb +64 -0
  417. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +63 -32
  418. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +5 -1
  419. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +50 -45
  420. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +41 -2
  421. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +4 -1
  422. data/lib/rubocop/cop/style/method_def_parentheses.rb +12 -5
  423. data/lib/rubocop/cop/style/min_max.rb +3 -3
  424. data/lib/rubocop/cop/style/min_max_comparison.rb +83 -0
  425. data/lib/rubocop/cop/style/missing_else.rb +13 -1
  426. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +2 -2
  427. data/lib/rubocop/cop/style/mixin_grouping.rb +5 -5
  428. data/lib/rubocop/cop/style/module_function.rb +30 -8
  429. data/lib/rubocop/cop/style/multiline_block_chain.rb +4 -2
  430. data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -6
  431. data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
  432. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +2 -4
  433. data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
  434. data/lib/rubocop/cop/style/multiline_method_signature.rb +18 -6
  435. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +22 -5
  436. data/lib/rubocop/cop/style/multiline_when_then.rb +1 -3
  437. data/lib/rubocop/cop/style/multiple_comparison.rb +14 -0
  438. data/lib/rubocop/cop/style/negated_if_else_condition.rb +17 -10
  439. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +10 -1
  440. data/lib/rubocop/cop/style/nested_ternary_operator.rb +18 -14
  441. data/lib/rubocop/cop/style/next.rb +4 -6
  442. data/lib/rubocop/cop/style/nil_comparison.rb +2 -0
  443. data/lib/rubocop/cop/style/nil_lambda.rb +4 -4
  444. data/lib/rubocop/cop/style/not.rb +1 -1
  445. data/lib/rubocop/cop/style/numbered_parameters_limit.rb +11 -3
  446. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  447. data/lib/rubocop/cop/style/numeric_literals.rb +16 -1
  448. data/lib/rubocop/cop/style/numeric_predicate.rb +53 -11
  449. data/lib/rubocop/cop/style/object_then.rb +10 -3
  450. data/lib/rubocop/cop/style/one_line_conditional.rb +4 -7
  451. data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
  452. data/lib/rubocop/cop/style/operator_method_call.rb +73 -0
  453. data/lib/rubocop/cop/style/parallel_assignment.rb +32 -24
  454. data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
  455. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -3
  456. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  457. data/lib/rubocop/cop/style/perl_backrefs.rb +22 -1
  458. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  459. data/lib/rubocop/cop/style/proc.rb +4 -1
  460. data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
  461. data/lib/rubocop/cop/style/raise_args.rb +4 -1
  462. data/lib/rubocop/cop/style/redundant_argument.rb +37 -5
  463. data/lib/rubocop/cop/style/redundant_array_constructor.rb +77 -0
  464. data/lib/rubocop/cop/style/redundant_assignment.rb +10 -2
  465. data/lib/rubocop/cop/style/redundant_begin.rb +13 -2
  466. data/lib/rubocop/cop/style/redundant_condition.rb +41 -8
  467. data/lib/rubocop/cop/style/redundant_conditional.rb +2 -14
  468. data/lib/rubocop/cop/style/redundant_constant_base.rb +85 -0
  469. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +39 -0
  470. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +133 -0
  471. data/lib/rubocop/cop/style/redundant_each.rb +119 -0
  472. data/lib/rubocop/cop/style/redundant_exception.rb +32 -12
  473. data/lib/rubocop/cop/style/redundant_fetch_block.rb +10 -8
  474. data/lib/rubocop/cop/style/redundant_filter_chain.rb +118 -0
  475. data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +58 -0
  476. data/lib/rubocop/cop/style/redundant_initialize.rb +3 -1
  477. data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
  478. data/lib/rubocop/cop/style/redundant_line_continuation.rb +199 -0
  479. data/lib/rubocop/cop/style/redundant_parentheses.rb +91 -44
  480. data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
  481. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +100 -0
  482. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +9 -3
  483. data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +46 -0
  484. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +22 -4
  485. data/lib/rubocop/cop/style/redundant_return.rb +21 -3
  486. data/lib/rubocop/cop/style/redundant_self.rb +19 -2
  487. data/lib/rubocop/cop/style/redundant_self_assignment.rb +1 -1
  488. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +8 -1
  489. data/lib/rubocop/cop/style/redundant_sort.rb +33 -17
  490. data/lib/rubocop/cop/style/redundant_sort_by.rb +24 -8
  491. data/lib/rubocop/cop/style/redundant_string_escape.rb +185 -0
  492. data/lib/rubocop/cop/style/regexp_literal.rb +11 -2
  493. data/lib/rubocop/cop/style/require_order.rb +139 -0
  494. data/lib/rubocop/cop/style/rescue_modifier.rb +2 -4
  495. data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -2
  496. data/lib/rubocop/cop/style/return_nil.rb +6 -2
  497. data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +95 -0
  498. data/lib/rubocop/cop/style/safe_navigation.rb +41 -10
  499. data/lib/rubocop/cop/style/sample.rb +3 -4
  500. data/lib/rubocop/cop/style/select_by_regexp.rb +30 -11
  501. data/lib/rubocop/cop/style/self_assignment.rb +3 -3
  502. data/lib/rubocop/cop/style/semicolon.rb +71 -8
  503. data/lib/rubocop/cop/style/send.rb +4 -4
  504. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +83 -0
  505. data/lib/rubocop/cop/style/signal_exception.rb +9 -7
  506. data/lib/rubocop/cop/style/single_argument_dig.rb +7 -3
  507. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  508. data/lib/rubocop/cop/style/single_line_do_end_block.rb +67 -0
  509. data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
  510. data/lib/rubocop/cop/style/slicing_with_range.rb +77 -11
  511. data/lib/rubocop/cop/style/sole_nested_conditional.rb +25 -12
  512. data/lib/rubocop/cop/style/special_global_vars.rb +4 -6
  513. data/lib/rubocop/cop/style/static_class.rb +32 -1
  514. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  515. data/lib/rubocop/cop/style/string_chars.rb +1 -0
  516. data/lib/rubocop/cop/style/string_hash_keys.rb +4 -1
  517. data/lib/rubocop/cop/style/string_literals.rb +1 -5
  518. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
  519. data/lib/rubocop/cop/style/strip.rb +7 -4
  520. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
  521. data/lib/rubocop/cop/style/super_arguments.rb +137 -0
  522. data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
  523. data/lib/rubocop/cop/style/swap_values.rb +1 -1
  524. data/lib/rubocop/cop/style/symbol_array.rb +40 -19
  525. data/lib/rubocop/cop/style/symbol_proc.rb +110 -15
  526. data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -13
  527. data/lib/rubocop/cop/style/top_level_method_definition.rb +3 -1
  528. data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -0
  529. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -4
  530. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  531. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -1
  532. data/lib/rubocop/cop/style/trivial_accessors.rb +4 -1
  533. data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -0
  534. data/lib/rubocop/cop/style/unpack_first.rb +11 -14
  535. data/lib/rubocop/cop/style/word_array.rb +59 -5
  536. data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
  537. data/lib/rubocop/cop/style/yoda_condition.rb +17 -8
  538. data/lib/rubocop/cop/style/yoda_expression.rb +91 -0
  539. data/lib/rubocop/cop/style/zero_length_predicate.rb +40 -19
  540. data/lib/rubocop/cop/team.rb +66 -56
  541. data/lib/rubocop/cop/util.rb +46 -10
  542. data/lib/rubocop/cop/utils/regexp_ranges.rb +113 -0
  543. data/lib/rubocop/cop/variable_force/assignment.rb +45 -4
  544. data/lib/rubocop/cop/variable_force/scope.rb +3 -3
  545. data/lib/rubocop/cop/variable_force/variable.rb +5 -3
  546. data/lib/rubocop/cop/variable_force/variable_table.rb +6 -4
  547. data/lib/rubocop/cop/variable_force.rb +19 -30
  548. data/lib/rubocop/cops_documentation_generator.rb +60 -18
  549. data/lib/rubocop/directive_comment.rb +14 -12
  550. data/lib/rubocop/ext/comment.rb +18 -0
  551. data/lib/rubocop/ext/processed_source.rb +2 -0
  552. data/lib/rubocop/ext/range.rb +15 -0
  553. data/lib/rubocop/ext/regexp_node.rb +10 -5
  554. data/lib/rubocop/ext/regexp_parser.rb +5 -2
  555. data/lib/rubocop/feature_loader.rb +94 -0
  556. data/lib/rubocop/file_finder.rb +4 -7
  557. data/lib/rubocop/file_patterns.rb +43 -0
  558. data/lib/rubocop/formatter/clang_style_formatter.rb +4 -8
  559. data/lib/rubocop/formatter/disabled_config_formatter.rb +47 -15
  560. data/lib/rubocop/formatter/formatter_set.rb +27 -20
  561. data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +15 -2
  562. data/lib/rubocop/formatter/html_formatter.rb +38 -18
  563. data/lib/rubocop/formatter/json_formatter.rb +0 -1
  564. data/lib/rubocop/formatter/junit_formatter.rb +4 -1
  565. data/lib/rubocop/formatter/markdown_formatter.rb +1 -1
  566. data/lib/rubocop/formatter/offense_count_formatter.rb +21 -6
  567. data/lib/rubocop/formatter/simple_text_formatter.rb +7 -8
  568. data/lib/rubocop/formatter/tap_formatter.rb +4 -8
  569. data/lib/rubocop/formatter/worst_offenders_formatter.rb +6 -3
  570. data/lib/rubocop/formatter.rb +34 -0
  571. data/lib/rubocop/lockfile.rb +56 -7
  572. data/lib/rubocop/lsp/logger.rb +22 -0
  573. data/lib/rubocop/lsp/routes.rb +243 -0
  574. data/lib/rubocop/lsp/runtime.rb +99 -0
  575. data/lib/rubocop/lsp/server.rb +73 -0
  576. data/lib/rubocop/lsp/severity.rb +27 -0
  577. data/lib/rubocop/lsp.rb +36 -0
  578. data/lib/rubocop/magic_comment.rb +13 -11
  579. data/lib/rubocop/options.rb +101 -32
  580. data/lib/rubocop/path_util.rb +54 -22
  581. data/lib/rubocop/rake_task.rb +35 -10
  582. data/lib/rubocop/result_cache.rb +29 -24
  583. data/lib/rubocop/rspec/cop_helper.rb +32 -3
  584. data/lib/rubocop/rspec/expect_offense.rb +18 -8
  585. data/lib/rubocop/rspec/shared_contexts.rb +86 -33
  586. data/lib/rubocop/rspec/support.rb +19 -2
  587. data/lib/rubocop/runner.rb +91 -23
  588. data/lib/rubocop/server/cache.rb +155 -0
  589. data/lib/rubocop/server/cli.rb +147 -0
  590. data/lib/rubocop/server/client_command/base.rb +44 -0
  591. data/lib/rubocop/server/client_command/exec.rb +64 -0
  592. data/lib/rubocop/server/client_command/restart.rb +25 -0
  593. data/lib/rubocop/server/client_command/start.rb +48 -0
  594. data/lib/rubocop/server/client_command/status.rb +28 -0
  595. data/lib/rubocop/server/client_command/stop.rb +31 -0
  596. data/lib/rubocop/server/client_command.rb +26 -0
  597. data/lib/rubocop/server/core.rb +111 -0
  598. data/lib/rubocop/server/errors.rb +23 -0
  599. data/lib/rubocop/server/helper.rb +34 -0
  600. data/lib/rubocop/server/server_command/base.rb +50 -0
  601. data/lib/rubocop/server/server_command/exec.rb +33 -0
  602. data/lib/rubocop/server/server_command/stop.rb +24 -0
  603. data/lib/rubocop/server/server_command.rb +21 -0
  604. data/lib/rubocop/server/socket_reader.rb +69 -0
  605. data/lib/rubocop/server.rb +53 -0
  606. data/lib/rubocop/string_interpreter.rb +3 -3
  607. data/lib/rubocop/target_finder.rb +92 -82
  608. data/lib/rubocop/target_ruby.rb +86 -80
  609. data/lib/rubocop/version.rb +44 -12
  610. data/lib/rubocop.rb +73 -35
  611. metadata +145 -39
  612. data/lib/rubocop/cop/gemspec/date_assignment.rb +0 -49
  613. data/lib/rubocop/cop/mixin/ignored_methods.rb +0 -52
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # This code is based on https://github.com/fohte/rubocop-daemon.
5
+ #
6
+ # Copyright (c) 2018 Hayato Kawai
7
+ #
8
+ # The MIT License (MIT)
9
+ #
10
+ # https://github.com/fohte/rubocop-daemon/blob/master/LICENSE.txt
11
+ #
12
+ module RuboCop
13
+ module Server
14
+ # @api private
15
+ module ServerCommand
16
+ autoload :Base, 'rubocop/server/server_command/base'
17
+ autoload :Exec, 'rubocop/server/server_command/exec'
18
+ autoload :Stop, 'rubocop/server/server_command/stop'
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # This code is based on https://github.com/fohte/rubocop-daemon.
5
+ #
6
+ # Copyright (c) 2018 Hayato Kawai
7
+ #
8
+ # The MIT License (MIT)
9
+ #
10
+ # https://github.com/fohte/rubocop-daemon/blob/master/LICENSE.txt
11
+ #
12
+ module RuboCop
13
+ module Server
14
+ # This class sends the request read from the socket to server.
15
+ # @api private
16
+ class SocketReader
17
+ Request = Struct.new(:header, :body)
18
+ Header = Struct.new(:token, :cwd, :command, :args)
19
+
20
+ def initialize(socket)
21
+ @socket = socket
22
+ end
23
+
24
+ def read!
25
+ request = parse_request(@socket.read)
26
+
27
+ stderr = StringIO.new
28
+ Helper.redirect(
29
+ stdin: StringIO.new(request.body),
30
+ stdout: @socket,
31
+ stderr: stderr
32
+ ) do
33
+ create_command_instance(request).run
34
+ end
35
+ ensure
36
+ Cache.stderr_path.write(stderr.string)
37
+ @socket.close
38
+ end
39
+
40
+ private
41
+
42
+ def parse_request(content)
43
+ raw_header, *body = content.lines
44
+
45
+ Request.new(parse_header(raw_header), body.join)
46
+ end
47
+
48
+ def parse_header(header)
49
+ token, cwd, command, *args = header.shellsplit
50
+ Header.new(token, cwd, command, args)
51
+ end
52
+
53
+ def create_command_instance(request)
54
+ klass = find_command_class(request.header.command)
55
+
56
+ klass.new(request.header.args, token: request.header.token, cwd: request.header.cwd)
57
+ end
58
+
59
+ def find_command_class(command)
60
+ case command
61
+ when 'stop' then ServerCommand::Stop
62
+ when 'exec' then ServerCommand::Exec
63
+ else
64
+ raise UnknownServerCommandError, "#{command.inspect} is not a valid command"
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'platform'
4
+
5
+ #
6
+ # This code is based on https://github.com/fohte/rubocop-daemon.
7
+ #
8
+ # Copyright (c) 2018 Hayato Kawai
9
+ #
10
+ # The MIT License (MIT)
11
+ #
12
+ # https://github.com/fohte/rubocop-daemon/blob/master/LICENSE.txt
13
+ #
14
+ module RuboCop
15
+ # The bootstrap module for server.
16
+ # @api private
17
+ module Server
18
+ TIMEOUT = 20
19
+
20
+ autoload :CLI, 'rubocop/server/cli'
21
+ autoload :Cache, 'rubocop/server/cache'
22
+ autoload :ClientCommand, 'rubocop/server/client_command'
23
+ autoload :Helper, 'rubocop/server/helper'
24
+ autoload :Core, 'rubocop/server/core'
25
+ autoload :ServerCommand, 'rubocop/server/server_command'
26
+ autoload :SocketReader, 'rubocop/server/socket_reader'
27
+
28
+ class << self
29
+ def support_server?
30
+ RUBY_ENGINE == 'ruby' && !RuboCop::Platform.windows?
31
+ end
32
+
33
+ def running?
34
+ return false unless support_server? # Never running.
35
+
36
+ Cache.pid_running?
37
+ end
38
+
39
+ def wait_for_running_status!(expected)
40
+ start_time = Time.now
41
+ while Server.running? != expected
42
+ sleep 0.1
43
+ next unless Time.now - start_time > TIMEOUT
44
+
45
+ warn "running? was not #{expected} after #{TIMEOUT} seconds!"
46
+ exit 1
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ require_relative 'server/errors'
@@ -32,9 +32,9 @@ module RuboCop
32
32
 
33
33
  def interpret_string_escape(escape)
34
34
  case escape[1]
35
- when 'u' then interpret_unicode(escape)
36
- when 'x' then interpret_hex(escape)
37
- when /\d/ then interpret_octal(escape)
35
+ when 'u' then interpret_unicode(escape)
36
+ when 'x' then interpret_hex(escape)
37
+ when /\d/ then interpret_octal(escape)
38
38
  else
39
39
  escape[1] # literal escaped char, like \\
40
40
  end
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RuboCop
4
- # This class finds target files to inspect by scanning the directory tree
5
- # and picking ruby files.
4
+ # This class finds target files to inspect by scanning the directory tree and picking ruby files.
6
5
  # @api private
7
6
  class TargetFinder
8
7
  HIDDEN_PATH_SUBSTRING = "#{File::SEPARATOR}."
@@ -12,21 +11,8 @@ module RuboCop
12
11
  @options = options
13
12
  end
14
13
 
15
- def force_exclusion?
16
- @options[:force_exclusion]
17
- end
18
-
19
- def debug?
20
- @options[:debug]
21
- end
22
-
23
- def fail_fast?
24
- @options[:fail_fast]
25
- end
26
-
27
- # Generate a list of target files by expanding globbing patterns
28
- # (if any). If args is empty, recursively find all Ruby source
29
- # files under the current directory
14
+ # Generate a list of target files by expanding globbing patterns (if any). If args is empty,
15
+ # recursively find all Ruby source files under the current directory
30
16
  # @return [Array] array of file paths
31
17
  def find(args, mode)
32
18
  return target_files_in_dir if args.empty?
@@ -44,12 +30,11 @@ module RuboCop
44
30
  files.map { |f| File.expand_path(f) }.uniq
45
31
  end
46
32
 
47
- # Finds all Ruby source files under the current or other supplied
48
- # directory. A Ruby source file is defined as a file with the `.rb`
49
- # extension or a file with no extension that has a ruby shebang line
50
- # as its first line.
51
- # It is possible to specify includes and excludes using the config file,
52
- # so you can include other Ruby files like Rakefiles and gemspecs.
33
+ # Finds all Ruby source files under the current or other supplied directory. A Ruby source file
34
+ # is defined as a file with the `.rb` extension or a file with no extension that has a ruby
35
+ # shebang line as its first line.
36
+ # It is possible to specify includes and excludes using the config file, so you can include
37
+ # other Ruby files like Rakefiles and gemspecs.
53
38
  # @param base_dir Root directory under which to search for
54
39
  # ruby source files
55
40
  # @return [Array] Array of filenames
@@ -66,20 +51,10 @@ module RuboCop
66
51
  target_files.sort_by!(&order)
67
52
  end
68
53
 
69
- def to_inspect?(file, hidden_files, base_dir_config)
70
- return false if base_dir_config.file_to_exclude?(file)
71
- return true if !hidden_files.bsearch do |hidden_file|
72
- file <=> hidden_file
73
- end && ruby_file?(file)
74
-
75
- base_dir_config.file_to_include?(file)
76
- end
77
-
78
- # Search for files recursively starting at the given base directory using
79
- # the given flags that determine how the match is made. Excluded files will
80
- # be removed later by the caller, but as an optimization find_files removes
81
- # the top level directories that are excluded in configuration in the
82
- # normal way (dir/**/*).
54
+ # Search for files recursively starting at the given base directory using the given flags that
55
+ # determine how the match is made. Excluded files will be removed later by the caller, but as an
56
+ # optimization find_files removes the top level directories that are excluded in configuration
57
+ # in the normal way (dir/**/*).
83
58
  def find_files(base_dir, flags)
84
59
  # get all wanted directories first to improve speed of finding all files
85
60
  exclude_pattern = combined_exclude_glob_patterns(base_dir)
@@ -88,14 +63,29 @@ module RuboCop
88
63
  patterns.map! { |dir| File.join(dir, '*') }
89
64
  # We need this special case to avoid creating the pattern
90
65
  # /**/* which searches the entire file system.
91
- patterns = [File.join(dir, '**/*')] if patterns.empty?
66
+ patterns = [File.join(base_dir, '**/*')] if patterns.empty?
92
67
 
93
68
  Dir.glob(patterns, flags).select { |path| FileTest.file?(path) }
94
69
  end
95
70
 
71
+ private
72
+
73
+ def to_inspect?(file, hidden_files, base_dir_config)
74
+ return false if base_dir_config.file_to_exclude?(file)
75
+ return true if !hidden_files.bsearch do |hidden_file|
76
+ file <=> hidden_file
77
+ end && ruby_file?(file)
78
+
79
+ base_dir_config.file_to_include?(file)
80
+ end
81
+
96
82
  def wanted_dir_patterns(base_dir, exclude_pattern, flags)
97
- base_dir = base_dir.gsub('/{}/', '/\{}/')
98
- dirs = Dir.glob(File.join(base_dir.gsub('/*/', '/\*/').gsub('/**/', '/\**/'), '*/'), flags)
83
+ # Escape glob characters in base_dir to avoid unwanted behavior.
84
+ base_dir = base_dir.gsub(/[\\\{\}\[\]\*\?]/) do |reserved_glob_character|
85
+ "\\#{reserved_glob_character}"
86
+ end
87
+
88
+ dirs = Dir.glob(File.join(base_dir, '*/'), flags)
99
89
  .reject do |dir|
100
90
  next true if dir.end_with?('/./', '/../')
101
91
  next true if File.fnmatch?(exclude_pattern, dir, flags)
@@ -114,27 +104,12 @@ module RuboCop
114
104
  end
115
105
 
116
106
  def combined_exclude_glob_patterns(base_dir)
117
- exclude = @config_store.for(base_dir).for_all_cops['Exclude']
107
+ exclude = @config_store.for(base_dir).for_all_cops['Exclude'] || []
118
108
  patterns = exclude.select { |pattern| pattern.is_a?(String) && pattern.end_with?('/**/*') }
119
109
  .map { |pattern| pattern.sub("#{base_dir}/", '') }
120
110
  "#{base_dir}/{#{patterns.join(',')}}"
121
111
  end
122
112
 
123
- def ruby_extension?(file)
124
- ruby_extensions.include?(File.extname(file))
125
- end
126
-
127
- def ruby_extensions
128
- @ruby_extensions ||= begin
129
- ext_patterns = all_cops_include.select { |pattern| pattern.start_with?('**/*.') }
130
- ext_patterns.map { |pattern| pattern.sub('**/*', '') }
131
- end
132
- end
133
-
134
- def ruby_filename?(file)
135
- ruby_filenames.include?(File.basename(file))
136
- end
137
-
138
113
  def ruby_filenames
139
114
  @ruby_filenames ||= begin
140
115
  file_patterns = all_cops_include.reject { |pattern| pattern.start_with?('**/*.') }
@@ -146,53 +121,72 @@ module RuboCop
146
121
  @all_cops_include ||= @config_store.for_pwd.for_all_cops['Include'].map(&:to_s)
147
122
  end
148
123
 
149
- def ruby_executable?(file)
150
- return false unless File.extname(file).empty? && File.exist?(file)
124
+ def process_explicit_path(path, mode)
125
+ files = path.include?('*') ? Dir[path] : [path]
151
126
 
152
- first_line = File.open(file, &:readline)
153
- /#!.*(#{ruby_interpreters(file).join('|')})/.match?(first_line)
154
- rescue EOFError, ArgumentError => e
155
- warn("Unprocessable file #{file}: #{e.class}, #{e.message}") if debug?
127
+ if mode == :only_recognized_file_types || force_exclusion?
128
+ files.select! { |file| included_file?(file) }
129
+ end
156
130
 
157
- false
131
+ force_exclusion? ? without_excluded(files) : files
158
132
  end
159
133
 
160
- def ruby_interpreters(file)
161
- @config_store.for(file).for_all_cops['RubyInterpreters']
134
+ def without_excluded(files)
135
+ files.reject do |file|
136
+ # When --ignore-parent-exclusion is given, we must look at the configuration associated with
137
+ # the file, but in the default case when --ignore-parent-exclusion is not given, can safely
138
+ # look only at the configuration for the current directory, since it's only the Exclude
139
+ # parameters we're going to check.
140
+ config = @config_store.for(ignore_parent_exclusion? ? file : '.')
141
+ config.file_to_exclude?(file)
142
+ end
162
143
  end
163
144
 
164
- def stdin?
165
- @options.key?(:stdin)
145
+ def included_file?(file)
146
+ ruby_file?(file) || configured_include?(file)
166
147
  end
167
148
 
168
149
  def ruby_file?(file)
169
150
  stdin? || ruby_extension?(file) || ruby_filename?(file) || ruby_executable?(file)
170
151
  end
171
152
 
172
- def configured_include?(file)
173
- @config_store.for_pwd.file_to_include?(file)
153
+ def stdin?
154
+ @options.key?(:stdin)
174
155
  end
175
156
 
176
- def included_file?(file)
177
- ruby_file?(file) || configured_include?(file)
157
+ def ruby_extension?(file)
158
+ ruby_extensions.include?(File.extname(file))
178
159
  end
179
160
 
180
- def process_explicit_path(path, mode)
181
- files = path.include?('*') ? Dir[path] : [path]
182
-
183
- if mode == :only_recognized_file_types || force_exclusion?
184
- files.select! { |file| included_file?(file) }
161
+ def ruby_extensions
162
+ @ruby_extensions ||= begin
163
+ ext_patterns = all_cops_include.select { |pattern| pattern.start_with?('**/*.') }
164
+ ext_patterns.map { |pattern| pattern.sub('**/*', '') }
185
165
  end
166
+ end
186
167
 
187
- return files unless force_exclusion?
168
+ def ruby_filename?(file)
169
+ ruby_filenames.include?(File.basename(file))
170
+ end
188
171
 
189
- files.reject do |file|
190
- config = @config_store.for(file)
191
- config.file_to_exclude?(file)
192
- end
172
+ def configured_include?(file)
173
+ @config_store.for_pwd.file_to_include?(file)
193
174
  end
194
175
 
195
- private
176
+ def ruby_executable?(file)
177
+ return false unless File.extname(file).empty? && File.exist?(file)
178
+
179
+ first_line = File.open(file, &:readline)
180
+ /#!.*(#{ruby_interpreters(file).join('|')})/.match?(first_line)
181
+ rescue EOFError, ArgumentError => e
182
+ warn("Unprocessable file #{file}: #{e.class}, #{e.message}") if debug?
183
+
184
+ false
185
+ end
186
+
187
+ def ruby_interpreters(file)
188
+ @config_store.for(file).for_all_cops['RubyInterpreters']
189
+ end
196
190
 
197
191
  def order
198
192
  if fail_fast?
@@ -202,5 +196,21 @@ module RuboCop
202
196
  :itself
203
197
  end
204
198
  end
199
+
200
+ def force_exclusion?
201
+ @options[:force_exclusion]
202
+ end
203
+
204
+ def ignore_parent_exclusion?
205
+ @options[:ignore_parent_exclusion]
206
+ end
207
+
208
+ def debug?
209
+ @options[:debug]
210
+ end
211
+
212
+ def fail_fast?
213
+ @options[:fail_fast]
214
+ end
205
215
  end
206
216
  end
@@ -4,8 +4,8 @@ module RuboCop
4
4
  # The kind of Ruby that code inspected by RuboCop is written in.
5
5
  # @api private
6
6
  class TargetRuby
7
- KNOWN_RUBIES = [2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1, 3.2].freeze
8
- DEFAULT_VERSION = 2.6
7
+ KNOWN_RUBIES = [2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1, 3.2, 3.3, 3.4].freeze
8
+ DEFAULT_VERSION = 2.7
9
9
 
10
10
  OBSOLETE_RUBIES = {
11
11
  1.9 => '0.41',
@@ -14,7 +14,8 @@ module RuboCop
14
14
  2.2 => '0.68',
15
15
  2.3 => '0.81',
16
16
  2.4 => '1.12',
17
- 2.5 => '1.28'
17
+ 2.5 => '1.28',
18
+ 2.6 => '1.50'
18
19
  }.freeze
19
20
  private_constant :KNOWN_RUBIES, :OBSOLETE_RUBIES
20
21
 
@@ -47,6 +48,86 @@ module RuboCop
47
48
  end
48
49
  end
49
50
 
51
+ # The target ruby version may be found in a .gemspec file.
52
+ # @api private
53
+ class GemspecFile < Source
54
+ extend NodePattern::Macros
55
+
56
+ GEMSPEC_EXTENSION = '.gemspec'
57
+
58
+ # @!method required_ruby_version(node)
59
+ def_node_search :required_ruby_version, <<~PATTERN
60
+ (send _ :required_ruby_version= $_)
61
+ PATTERN
62
+
63
+ # @!method gem_requirement_versions(node)
64
+ def_node_matcher :gem_requirement_versions, <<~PATTERN
65
+ (send (const(const _ :Gem):Requirement) :new
66
+ {$str+ | (send $str :freeze)+ | (array $str+) | (array (send $str :freeze)+)}
67
+ )
68
+ PATTERN
69
+
70
+ def name
71
+ "`required_ruby_version` parameter (in #{gemspec_filename})"
72
+ end
73
+
74
+ private
75
+
76
+ def find_version
77
+ file = gemspec_filepath
78
+ return unless file && File.file?(file)
79
+
80
+ right_hand_side = version_from_gemspec_file(file)
81
+ return if right_hand_side.nil?
82
+
83
+ find_default_minimal_known_ruby(right_hand_side)
84
+ end
85
+
86
+ def gemspec_filename
87
+ @gemspec_filename ||= begin
88
+ basename = Pathname.new(@config.base_dir_for_path_parameters).basename.to_s
89
+ "#{basename}#{GEMSPEC_EXTENSION}"
90
+ end
91
+ end
92
+
93
+ def gemspec_filepath
94
+ @gemspec_filepath ||=
95
+ @config.find_file_upwards(gemspec_filename, @config.base_dir_for_path_parameters)
96
+ end
97
+
98
+ def version_from_gemspec_file(file)
99
+ processed_source = ProcessedSource.from_file(
100
+ file, DEFAULT_VERSION, parser_engine: @config.parser_engine
101
+ )
102
+ required_ruby_version(processed_source.ast).first
103
+ end
104
+
105
+ def version_from_right_hand_side(right_hand_side)
106
+ gem_requirement_versions = gem_requirement_versions(right_hand_side)
107
+
108
+ if right_hand_side.array_type? && right_hand_side.children.all?(&:str_type?)
109
+ version_from_array(right_hand_side)
110
+ elsif gem_requirement_versions
111
+ gem_requirement_versions.map(&:value)
112
+ elsif right_hand_side.str_type?
113
+ right_hand_side.value
114
+ end
115
+ end
116
+
117
+ def version_from_array(array)
118
+ array.children.map(&:value)
119
+ end
120
+
121
+ def find_default_minimal_known_ruby(right_hand_side)
122
+ version = version_from_right_hand_side(right_hand_side)
123
+ requirement = Gem::Requirement.new(version)
124
+
125
+ KNOWN_RUBIES.detect do |v|
126
+ v >= DEFAULT_VERSION && requirement.satisfied_by?(Gem::Version.new("#{v}.99"))
127
+ end
128
+ end
129
+ end
130
+
50
131
  # The target ruby version may be found in a .ruby-version file.
51
132
  # @api private
52
133
  class RubyVersionFile < Source
@@ -84,7 +165,7 @@ module RuboCop
84
165
  # @api private
85
166
  class ToolVersionsFile < RubyVersionFile
86
167
  TOOL_VERSIONS_FILENAME = '.tool-versions'
87
- TOOL_VERSIONS_PATTERN = /\Aruby (?:ruby-)?(?<version>\d+\.\d+)/.freeze
168
+ TOOL_VERSIONS_PATTERN = /^(?:ruby )(?<version>\d+\.\d+)/.freeze
88
169
 
89
170
  def name
90
171
  "`#{TOOL_VERSIONS_FILENAME}`"
@@ -142,80 +223,6 @@ module RuboCop
142
223
  end
143
224
  end
144
225
 
145
- # The target ruby version may be found in a .gemspec file.
146
- # @api private
147
- class GemspecFile < Source
148
- extend NodePattern::Macros
149
-
150
- GEMSPEC_EXTENSION = '.gemspec'
151
-
152
- # @!method required_ruby_version(node)
153
- def_node_search :required_ruby_version, <<~PATTERN
154
- (send _ :required_ruby_version= $_)
155
- PATTERN
156
-
157
- # @!method gem_requirement?(node)
158
- def_node_matcher :gem_requirement?, <<~PATTERN
159
- (send (const(const _ :Gem):Requirement) :new $str)
160
- PATTERN
161
-
162
- def name
163
- "`required_ruby_version` parameter (in #{gemspec_filename})"
164
- end
165
-
166
- private
167
-
168
- def find_version
169
- file = gemspec_filepath
170
- return unless file && File.file?(file)
171
-
172
- right_hand_side = version_from_gemspec_file(file)
173
- return if right_hand_side.nil?
174
-
175
- find_default_minimal_known_ruby(right_hand_side)
176
- end
177
-
178
- def gemspec_filename
179
- @gemspec_filename ||= begin
180
- basename = Pathname.new(@config.base_dir_for_path_parameters).basename.to_s
181
- "#{basename}#{GEMSPEC_EXTENSION}"
182
- end
183
- end
184
-
185
- def gemspec_filepath
186
- @gemspec_filepath ||=
187
- @config.find_file_upwards(gemspec_filename, @config.base_dir_for_path_parameters)
188
- end
189
-
190
- def version_from_gemspec_file(file)
191
- processed_source = ProcessedSource.from_file(file, DEFAULT_VERSION)
192
- required_ruby_version(processed_source.ast).first
193
- end
194
-
195
- def version_from_right_hand_side(right_hand_side)
196
- if right_hand_side.array_type?
197
- version_from_array(right_hand_side)
198
- elsif gem_requirement?(right_hand_side)
199
- right_hand_side.children.last.value
200
- else
201
- right_hand_side.value
202
- end
203
- end
204
-
205
- def version_from_array(array)
206
- array.children.map(&:value)
207
- end
208
-
209
- def find_default_minimal_known_ruby(right_hand_side)
210
- version = version_from_right_hand_side(right_hand_side)
211
- requirement = Gem::Requirement.new(version)
212
-
213
- KNOWN_RUBIES.detect do |v|
214
- v >= DEFAULT_VERSION && requirement.satisfied_by?(Gem::Version.new("#{v}.99"))
215
- end
216
- end
217
- end
218
-
219
226
  # If all else fails, a default version will be picked.
220
227
  # @api private
221
228
  class Default < Source
@@ -236,15 +243,14 @@ module RuboCop
236
243
 
237
244
  SOURCES = [
238
245
  RuboCopConfig,
246
+ GemspecFile,
239
247
  RubyVersionFile,
240
248
  ToolVersionsFile,
241
249
  BundlerLockFile,
242
- GemspecFile,
243
250
  Default
244
251
  ].freeze
245
252
 
246
253
  private_constant :SOURCES
247
-
248
254
  def initialize(config)
249
255
  @config = config
250
256
  end