rubocop 1.50.2 → 1.59.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 (290) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -3
  3. data/config/default.yml +153 -16
  4. data/config/obsoletion.yml +5 -0
  5. data/lib/rubocop/cli/command/auto_generate_config.rb +10 -5
  6. data/lib/rubocop/cli/command/lsp.rb +19 -0
  7. data/lib/rubocop/cli.rb +4 -1
  8. data/lib/rubocop/config.rb +4 -0
  9. data/lib/rubocop/config_finder.rb +2 -2
  10. data/lib/rubocop/config_loader_resolver.rb +4 -3
  11. data/lib/rubocop/config_obsoletion/parameter_rule.rb +9 -1
  12. data/lib/rubocop/config_obsoletion.rb +13 -10
  13. data/lib/rubocop/cop/autocorrect_logic.rb +3 -1
  14. data/lib/rubocop/cop/base.rb +6 -2
  15. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -0
  16. data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
  17. data/lib/rubocop/cop/bundler/gem_comment.rb +3 -3
  18. data/lib/rubocop/cop/bundler/gem_version.rb +2 -2
  19. data/lib/rubocop/cop/bundler/ordered_gems.rb +9 -1
  20. data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -1
  21. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -4
  22. data/lib/rubocop/cop/gemspec/dependency_version.rb +2 -2
  23. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +2 -2
  24. data/lib/rubocop/cop/gemspec/development_dependencies.rb +1 -1
  25. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +9 -1
  26. data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
  27. data/lib/rubocop/cop/internal_affairs/cop_description.rb +32 -8
  28. data/lib/rubocop/cop/internal_affairs/example_description.rb +42 -21
  29. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -1
  30. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
  31. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +53 -0
  32. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +7 -7
  33. data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
  34. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -0
  35. data/lib/rubocop/cop/internal_affairs.rb +1 -0
  36. data/lib/rubocop/cop/layout/argument_alignment.rb +1 -1
  37. data/lib/rubocop/cop/layout/class_structure.rb +7 -0
  38. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +1 -2
  39. data/lib/rubocop/cop/layout/dot_position.rb +1 -5
  40. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +42 -9
  41. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +27 -4
  42. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -0
  43. data/lib/rubocop/cop/layout/end_alignment.rb +7 -1
  44. data/lib/rubocop/cop/layout/extra_spacing.rb +4 -10
  45. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +6 -6
  46. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
  47. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -4
  48. data/lib/rubocop/cop/layout/heredoc_indentation.rb +4 -1
  49. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  50. data/lib/rubocop/cop/layout/indentation_width.rb +3 -3
  51. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  52. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +17 -9
  53. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +1 -1
  54. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -0
  55. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18 -3
  56. data/lib/rubocop/cop/layout/redundant_line_break.rb +16 -5
  57. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +4 -4
  58. data/lib/rubocop/cop/layout/single_line_block_chain.rb +5 -0
  59. data/lib/rubocop/cop/layout/space_after_comma.rb +9 -1
  60. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  61. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +2 -2
  62. data/lib/rubocop/cop/layout/space_around_operators.rb +53 -21
  63. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -0
  64. data/lib/rubocop/cop/layout/space_inside_parens.rb +1 -1
  65. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
  66. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +5 -0
  67. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +13 -1
  68. data/lib/rubocop/cop/lint/assignment_in_condition.rb +4 -4
  69. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +2 -2
  70. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +1 -1
  71. data/lib/rubocop/cop/lint/debugger.rb +19 -5
  72. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -1
  73. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -1
  74. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +46 -19
  75. data/lib/rubocop/cop/lint/empty_block.rb +1 -1
  76. data/lib/rubocop/cop/lint/erb_new_arguments.rb +6 -7
  77. data/lib/rubocop/cop/lint/float_comparison.rb +10 -0
  78. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
  79. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
  80. data/lib/rubocop/cop/lint/identity_comparison.rb +0 -1
  81. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -3
  82. data/lib/rubocop/cop/lint/inherit_exception.rb +9 -0
  83. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +56 -0
  84. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
  85. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +78 -0
  86. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  87. data/lib/rubocop/cop/lint/missing_super.rb +34 -5
  88. data/lib/rubocop/cop/lint/mixed_case_range.rb +111 -0
  89. data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -21
  90. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +10 -7
  91. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -5
  92. data/lib/rubocop/cop/lint/number_conversion.rb +14 -4
  93. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +2 -2
  94. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +0 -1
  95. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +2 -2
  96. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
  97. data/lib/rubocop/cop/lint/redundant_require_statement.rb +12 -3
  98. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +63 -4
  99. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  100. data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -2
  101. data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -2
  102. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +14 -8
  103. data/lib/rubocop/cop/lint/self_assignment.rb +38 -0
  104. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -2
  105. data/lib/rubocop/cop/lint/shadowed_exception.rb +5 -11
  106. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +7 -1
  107. data/lib/rubocop/cop/lint/struct_new_override.rb +12 -12
  108. data/lib/rubocop/cop/lint/suppressed_exception.rb +2 -2
  109. data/lib/rubocop/cop/lint/symbol_conversion.rb +8 -3
  110. data/lib/rubocop/cop/lint/to_enum_arguments.rb +5 -3
  111. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +23 -9
  112. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
  113. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +2 -2
  114. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -2
  115. data/lib/rubocop/cop/lint/useless_assignment.rb +94 -10
  116. data/lib/rubocop/cop/lint/useless_times.rb +1 -1
  117. data/lib/rubocop/cop/lint/void.rb +92 -11
  118. data/lib/rubocop/cop/metrics/abc_size.rb +3 -3
  119. data/lib/rubocop/cop/metrics/block_length.rb +1 -1
  120. data/lib/rubocop/cop/metrics/class_length.rb +8 -3
  121. data/lib/rubocop/cop/metrics/method_length.rb +1 -1
  122. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -2
  123. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +32 -4
  124. data/lib/rubocop/cop/migration/department_name.rb +2 -2
  125. data/lib/rubocop/cop/mixin/allowed_receivers.rb +34 -0
  126. data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
  127. data/lib/rubocop/cop/mixin/comments_help.rb +19 -11
  128. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  129. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  130. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +14 -11
  131. data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
  132. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -2
  133. data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
  134. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +6 -8
  135. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
  136. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
  137. data/lib/rubocop/cop/mixin/string_help.rb +4 -2
  138. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -1
  139. data/lib/rubocop/cop/naming/block_forwarding.rb +3 -3
  140. data/lib/rubocop/cop/naming/constant_name.rb +2 -3
  141. data/lib/rubocop/cop/naming/file_name.rb +1 -1
  142. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
  143. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +26 -11
  144. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +11 -3
  145. data/lib/rubocop/cop/naming/variable_name.rb +6 -1
  146. data/lib/rubocop/cop/style/access_modifier_declarations.rb +2 -2
  147. data/lib/rubocop/cop/style/accessor_grouping.rb +6 -2
  148. data/lib/rubocop/cop/style/alias.rb +9 -8
  149. data/lib/rubocop/cop/style/arguments_forwarding.rb +342 -63
  150. data/lib/rubocop/cop/style/array_first_last.rb +64 -0
  151. data/lib/rubocop/cop/style/array_intersect.rb +13 -5
  152. data/lib/rubocop/cop/style/attr.rb +11 -1
  153. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
  154. data/lib/rubocop/cop/style/begin_block.rb +1 -2
  155. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
  156. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  157. data/lib/rubocop/cop/style/block_delimiters.rb +5 -4
  158. data/lib/rubocop/cop/style/case_like_if.rb +4 -4
  159. data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
  160. data/lib/rubocop/cop/style/class_check.rb +1 -0
  161. data/lib/rubocop/cop/style/class_equality_comparison.rb +24 -39
  162. data/lib/rubocop/cop/style/collection_compact.rb +22 -11
  163. data/lib/rubocop/cop/style/collection_methods.rb +2 -0
  164. data/lib/rubocop/cop/style/colon_method_call.rb +2 -2
  165. data/lib/rubocop/cop/style/combinable_loops.rb +36 -8
  166. data/lib/rubocop/cop/style/concat_array_literals.rb +2 -1
  167. data/lib/rubocop/cop/style/conditional_assignment.rb +6 -4
  168. data/lib/rubocop/cop/style/copyright.rb +5 -2
  169. data/lib/rubocop/cop/style/date_time.rb +5 -4
  170. data/lib/rubocop/cop/style/dir.rb +1 -1
  171. data/lib/rubocop/cop/style/dir_empty.rb +8 -14
  172. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +1 -1
  173. data/lib/rubocop/cop/style/documentation.rb +1 -1
  174. data/lib/rubocop/cop/style/each_with_object.rb +2 -2
  175. data/lib/rubocop/cop/style/empty_case_condition.rb +6 -1
  176. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  177. data/lib/rubocop/cop/style/eval_with_location.rb +8 -8
  178. data/lib/rubocop/cop/style/exact_regexp_match.rb +69 -0
  179. data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -2
  180. data/lib/rubocop/cop/style/file_read.rb +2 -2
  181. data/lib/rubocop/cop/style/for.rb +1 -1
  182. data/lib/rubocop/cop/style/format_string.rb +24 -3
  183. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -1
  184. data/lib/rubocop/cop/style/guard_clause.rb +28 -0
  185. data/lib/rubocop/cop/style/hash_conversion.rb +10 -0
  186. data/lib/rubocop/cop/style/hash_each_methods.rb +84 -32
  187. data/lib/rubocop/cop/style/hash_except.rb +21 -9
  188. data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
  189. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
  190. data/lib/rubocop/cop/style/identical_conditional_branches.rb +31 -5
  191. data/lib/rubocop/cop/style/if_inside_else.rb +6 -0
  192. data/lib/rubocop/cop/style/if_unless_modifier.rb +3 -0
  193. data/lib/rubocop/cop/style/if_with_semicolon.rb +2 -2
  194. data/lib/rubocop/cop/style/inverse_methods.rb +6 -5
  195. data/lib/rubocop/cop/style/invertible_unless_condition.rb +10 -6
  196. data/lib/rubocop/cop/style/lambda.rb +3 -3
  197. data/lib/rubocop/cop/style/lambda_call.rb +5 -0
  198. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +3 -2
  199. data/lib/rubocop/cop/style/map_to_hash.rb +10 -4
  200. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +12 -5
  201. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +1 -1
  202. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +20 -0
  203. data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
  204. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +2 -2
  205. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  206. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
  207. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -1
  208. data/lib/rubocop/cop/style/multiple_comparison.rb +14 -0
  209. data/lib/rubocop/cop/style/nested_ternary_operator.rb +3 -11
  210. data/lib/rubocop/cop/style/next.rb +1 -1
  211. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  212. data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
  213. data/lib/rubocop/cop/style/operator_method_call.rb +8 -2
  214. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  215. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  216. data/lib/rubocop/cop/style/redundant_argument.rb +9 -3
  217. data/lib/rubocop/cop/style/redundant_array_constructor.rb +77 -0
  218. data/lib/rubocop/cop/style/redundant_begin.rb +10 -2
  219. data/lib/rubocop/cop/style/redundant_conditional.rb +2 -10
  220. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +38 -0
  221. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +93 -5
  222. data/lib/rubocop/cop/style/redundant_exception.rb +32 -12
  223. data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -3
  224. data/lib/rubocop/cop/style/redundant_filter_chain.rb +118 -0
  225. data/lib/rubocop/cop/style/redundant_line_continuation.rb +9 -3
  226. data/lib/rubocop/cop/style/redundant_parentheses.rb +54 -21
  227. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +100 -0
  228. data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +46 -0
  229. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +2 -1
  230. data/lib/rubocop/cop/style/redundant_return.rb +8 -3
  231. data/lib/rubocop/cop/style/redundant_self.rb +17 -2
  232. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +8 -1
  233. data/lib/rubocop/cop/style/redundant_sort.rb +10 -9
  234. data/lib/rubocop/cop/style/redundant_sort_by.rb +2 -2
  235. data/lib/rubocop/cop/style/redundant_string_escape.rb +3 -1
  236. data/lib/rubocop/cop/style/regexp_literal.rb +11 -2
  237. data/lib/rubocop/cop/style/require_order.rb +11 -5
  238. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -3
  239. data/lib/rubocop/cop/style/return_nil.rb +6 -2
  240. data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +95 -0
  241. data/lib/rubocop/cop/style/sample.rb +2 -1
  242. data/lib/rubocop/cop/style/select_by_regexp.rb +22 -11
  243. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  244. data/lib/rubocop/cop/style/semicolon.rb +20 -4
  245. data/lib/rubocop/cop/style/signal_exception.rb +1 -1
  246. data/lib/rubocop/cop/style/single_argument_dig.rb +7 -3
  247. data/lib/rubocop/cop/style/single_line_do_end_block.rb +67 -0
  248. data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
  249. data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
  250. data/lib/rubocop/cop/style/sole_nested_conditional.rb +6 -2
  251. data/lib/rubocop/cop/style/special_global_vars.rb +3 -4
  252. data/lib/rubocop/cop/style/string_chars.rb +1 -0
  253. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
  254. data/lib/rubocop/cop/style/strip.rb +7 -4
  255. data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
  256. data/lib/rubocop/cop/style/symbol_array.rb +35 -15
  257. data/lib/rubocop/cop/style/unpack_first.rb +11 -14
  258. data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
  259. data/lib/rubocop/cop/style/yoda_condition.rb +4 -2
  260. data/lib/rubocop/cop/style/yoda_expression.rb +8 -7
  261. data/lib/rubocop/cop/team.rb +1 -1
  262. data/lib/rubocop/cop/util.rb +1 -1
  263. data/lib/rubocop/cop/utils/regexp_ranges.rb +113 -0
  264. data/lib/rubocop/cop/variable_force/assignment.rb +45 -4
  265. data/lib/rubocop/cop/variable_force/variable_table.rb +2 -2
  266. data/lib/rubocop/cop/variable_force.rb +1 -0
  267. data/lib/rubocop/cops_documentation_generator.rb +1 -1
  268. data/lib/rubocop/ext/regexp_parser.rb +4 -1
  269. data/lib/rubocop/file_finder.rb +4 -7
  270. data/lib/rubocop/formatter/html_formatter.rb +5 -4
  271. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  272. data/lib/rubocop/lsp/logger.rb +22 -0
  273. data/lib/rubocop/lsp/routes.rb +246 -0
  274. data/lib/rubocop/lsp/runtime.rb +99 -0
  275. data/lib/rubocop/lsp/server.rb +68 -0
  276. data/lib/rubocop/lsp/severity.rb +27 -0
  277. data/lib/rubocop/magic_comment.rb +12 -10
  278. data/lib/rubocop/options.rb +11 -1
  279. data/lib/rubocop/result_cache.rb +5 -2
  280. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  281. data/lib/rubocop/rspec/shared_contexts.rb +2 -3
  282. data/lib/rubocop/runner.rb +6 -4
  283. data/lib/rubocop/server/cache.rb +1 -0
  284. data/lib/rubocop/server/client_command/exec.rb +3 -2
  285. data/lib/rubocop/string_interpreter.rb +3 -3
  286. data/lib/rubocop/target_finder.rb +7 -3
  287. data/lib/rubocop/target_ruby.rb +12 -7
  288. data/lib/rubocop/version.rb +10 -6
  289. data/lib/rubocop.rb +19 -0
  290. metadata +54 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67accbc10c4c2ae80033ab2a3713fce8a190d772234cbd52c5584e5c69895915
4
- data.tar.gz: 69e7f99ee66c192619b2dc26df6d0ac73c794bb088bade8182f3eceb1cb8d8c0
3
+ metadata.gz: 236fd46f4a118eb34ff38fce1a147a116b2d30a7bf849ca809ece40aecabc694
4
+ data.tar.gz: 550ecc4682d191a6a429a6af299212a42aa459e0aee04d5f7cb6a20ded419ff4
5
5
  SHA512:
6
- metadata.gz: 21005d0d16a207a998640686ee7dcf251683899ab8e746baa861888fd26f2e58791733b48869a085b1b365ce2b67e64b216b4cfe6c1a2e26a2ecc699da0ea085
7
- data.tar.gz: 461a588bb95269c194efee4ee8570c166ce009695664aa31181f1f0806220f451e4685d4feff8751d4135f196d3cb42ec100c171b905526e06ed968cd9bb47f9
6
+ metadata.gz: 5c7cfaa0f6573e566bbbac89a993889cd0f0944ab5c012e0286da61021e2d3da6ed51f68fbbf6c71afd4b6d81c577d15228b7a6a2d93aed59d2dfcba61a9be63
7
+ data.tar.gz: 5cbb4256ff218ab5744fc3065f56061e5b0eab787d21dc30f3ded5972b789ffc2c24cd977fbaf3acbcc84abf36c5e3537a2eeb328dabb3becf29268eccaa81f8
data/README.md CHANGED
@@ -53,7 +53,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
53
53
  in your `Gemfile`:
54
54
 
55
55
  ```rb
56
- gem 'rubocop', '~> 1.50', require: false
56
+ gem 'rubocop', '~> 1.59', require: false
57
57
  ```
58
58
 
59
59
  See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
@@ -67,6 +67,8 @@ $ cd my/cool/ruby/project
67
67
  $ rubocop
68
68
  ```
69
69
 
70
+ You can also use this magic in your favorite editor with RuboCop's [built-in LSP server](https://docs.rubocop.org/rubocop/usage/lsp.html).
71
+
70
72
  ## Documentation
71
73
 
72
74
  You can read a lot more about RuboCop in its [official docs](https://docs.rubocop.org).
@@ -75,8 +77,8 @@ You can read a lot more about RuboCop in its [official docs](https://docs.ruboco
75
77
 
76
78
  RuboCop officially supports the following runtime Ruby implementations:
77
79
 
78
- * MRI 2.6+
79
- * JRuby 9.3+
80
+ * MRI 2.7+
81
+ * JRuby 9.4+
80
82
 
81
83
  Targets Ruby 2.0+ code analysis.
82
84
 
data/config/default.yml CHANGED
@@ -30,6 +30,7 @@ AllCops:
30
30
  - '**/*.rbx'
31
31
  - '**/*.ru'
32
32
  - '**/*.ruby'
33
+ - '**/*.schema'
33
34
  - '**/*.spec'
34
35
  - '**/*.thor'
35
36
  - '**/*.watchr'
@@ -55,6 +56,7 @@ AllCops:
55
56
  - '**/Puppetfile'
56
57
  - '**/Rakefile'
57
58
  - '**/rakefile'
59
+ - '**/Schemafile'
58
60
  - '**/Snapfile'
59
61
  - '**/Steepfile'
60
62
  - '**/Thorfile'
@@ -140,7 +142,7 @@ AllCops:
140
142
  # or gems.locked file. (Although the Ruby version is specified in the Gemfile
141
143
  # or gems.rb file, RuboCop reads the final value from the lock file.) If the
142
144
  # Ruby version is still unresolved, RuboCop will use the oldest officially
143
- # supported Ruby version (currently Ruby 2.6).
145
+ # supported Ruby version (currently Ruby 2.7).
144
146
  TargetRubyVersion: ~
145
147
  # Determines if a notification for extension libraries should be shown when
146
148
  # rubocop is run. Keys are the name of the extension, and values are an array
@@ -154,6 +156,7 @@ AllCops:
154
156
  rubocop-rake: [rake]
155
157
  rubocop-graphql: [graphql]
156
158
  rubocop-capybara: [capybara]
159
+ rubocop-factory_bot: [factory_bot, factory_bot_rails]
157
160
  # Enable/Disable checking the methods extended by Active Support.
158
161
  ActiveSupportExtensionsEnabled: false
159
162
 
@@ -170,6 +173,16 @@ Bundler/DuplicatedGem:
170
173
  - '**/Gemfile'
171
174
  - '**/gems.rb'
172
175
 
176
+ Bundler/DuplicatedGroup:
177
+ Description: 'Checks for duplicate group entries in Gemfile.'
178
+ Enabled: true
179
+ Severity: warning
180
+ VersionAdded: '1.56'
181
+ Include:
182
+ - '**/*.gemfile'
183
+ - '**/Gemfile'
184
+ - '**/gems.rb'
185
+
173
186
  Bundler/GemComment:
174
187
  Description: 'Add a comment describing each gem.'
175
188
  Enabled: false
@@ -466,7 +479,9 @@ Layout/ClassStructure:
466
479
  Description: 'Enforces a configured order of definitions within a class body.'
467
480
  StyleGuide: '#consistent-classes'
468
481
  Enabled: false
482
+ SafeAutoCorrect: false
469
483
  VersionAdded: '0.52'
484
+ VersionChanged: '1.53'
470
485
  Categories:
471
486
  module_inclusion:
472
487
  - include
@@ -574,6 +589,8 @@ Layout/EmptyLineBetweenDefs:
574
589
  EmptyLineBetweenMethodDefs: true
575
590
  EmptyLineBetweenClassDefs: true
576
591
  EmptyLineBetweenModuleDefs: true
592
+ # `DefLikeMacros` takes the name of any macro that you want to treat like a def.
593
+ DefLikeMacros: []
577
594
  # `AllowAdjacentOneLineDefs` means that single line method definitions don't
578
595
  # need an empty line between them. `true` by default.
579
596
  AllowAdjacentOneLineDefs: true
@@ -1334,6 +1351,10 @@ Layout/SpaceAroundOperators:
1334
1351
  SupportedStylesForExponentOperator:
1335
1352
  - space
1336
1353
  - no_space
1354
+ EnforcedStyleForRationalLiterals: no_space
1355
+ SupportedStylesForRationalLiterals:
1356
+ - space
1357
+ - no_space
1337
1358
 
1338
1359
  Layout/SpaceBeforeBlockBraces:
1339
1360
  Description: >-
@@ -1529,7 +1550,6 @@ Lint/AmbiguousBlockAssociation:
1529
1550
  Description: >-
1530
1551
  Checks for ambiguous block association with method when param passed without
1531
1552
  parentheses.
1532
- StyleGuide: '#syntax'
1533
1553
  Enabled: true
1534
1554
  VersionAdded: '0.48'
1535
1555
  VersionChanged: '1.13'
@@ -1943,6 +1963,12 @@ Lint/InterpolationCheck:
1943
1963
  VersionAdded: '0.50'
1944
1964
  VersionChanged: '1.40'
1945
1965
 
1966
+ Lint/ItWithoutArgumentsInBlock:
1967
+ Description: 'Checks uses of `it` calls without arguments in block.'
1968
+ Reference: 'https://bugs.ruby-lang.org/issues/18980'
1969
+ Enabled: pending
1970
+ VersionAdded: '1.59'
1971
+
1946
1972
  Lint/LambdaWithoutLiteralBlock:
1947
1973
  Description: 'Checks uses of lambda without a literal block.'
1948
1974
  Enabled: pending
@@ -1953,6 +1979,11 @@ Lint/LiteralAsCondition:
1953
1979
  Enabled: true
1954
1980
  VersionAdded: '0.51'
1955
1981
 
1982
+ Lint/LiteralAssignmentInCondition:
1983
+ Description: 'Checks for literal assignments in the conditions.'
1984
+ Enabled: pending
1985
+ VersionAdded: '1.58'
1986
+
1956
1987
  Lint/LiteralInInterpolation:
1957
1988
  Description: 'Checks for literals used in interpolation.'
1958
1989
  Enabled: true
@@ -1987,9 +2018,16 @@ Lint/MissingSuper:
1987
2018
  Checks for the presence of constructors and lifecycle callbacks
1988
2019
  without calls to `super`.
1989
2020
  Enabled: true
2021
+ AllowedParentClasses: []
1990
2022
  VersionAdded: '0.89'
1991
2023
  VersionChanged: '1.4'
1992
2024
 
2025
+ Lint/MixedCaseRange:
2026
+ Description: 'Checks for mixed-case character ranges since they include likely unintended characters.'
2027
+ Enabled: pending
2028
+ SafeAutoCorrect: false
2029
+ VersionAdded: '1.53'
2030
+
1993
2031
  Lint/MixedRegexpCaptureTypes:
1994
2032
  Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
1995
2033
  Enabled: true
@@ -2139,10 +2177,17 @@ Lint/RedundantDirGlobSort:
2139
2177
  VersionChanged: '1.26'
2140
2178
  SafeAutoCorrect: false
2141
2179
 
2180
+ Lint/RedundantRegexpQuantifiers:
2181
+ Description: 'Checks for redundant quantifiers in Regexps.'
2182
+ Enabled: pending
2183
+ VersionAdded: '1.53'
2184
+
2142
2185
  Lint/RedundantRequireStatement:
2143
2186
  Description: 'Checks for unnecessary `require` statement.'
2144
2187
  Enabled: true
2188
+ SafeAutoCorrect: false
2145
2189
  VersionAdded: '0.76'
2190
+ VersionChanged: '1.57'
2146
2191
 
2147
2192
  Lint/RedundantSafeNavigation:
2148
2193
  Description: 'Checks for redundant safe navigation calls.'
@@ -2343,6 +2388,9 @@ Lint/TopLevelReturnWithArgument:
2343
2388
  Description: 'Detects top level return statements with argument.'
2344
2389
  Enabled: true
2345
2390
  VersionAdded: '0.89'
2391
+ # These codes are `eval`-ed in method and their return values may be used.
2392
+ Exclude:
2393
+ - '**/*.jb'
2346
2394
 
2347
2395
  Lint/TrailingCommaInAttributeDeclaration:
2348
2396
  Description: 'Checks for trailing commas in attribute declarations.'
@@ -2451,6 +2499,8 @@ Lint/UselessAssignment:
2451
2499
  StyleGuide: '#underscore-unused-vars'
2452
2500
  Enabled: true
2453
2501
  VersionAdded: '0.11'
2502
+ VersionChanged: '1.51'
2503
+ SafeAutoCorrect: false
2454
2504
 
2455
2505
  Lint/UselessElseWithoutRescue:
2456
2506
  Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
@@ -2478,10 +2528,9 @@ Lint/UselessRuby2Keywords:
2478
2528
  Lint/UselessSetterCall:
2479
2529
  Description: 'Checks for useless setter call to a local variable.'
2480
2530
  Enabled: true
2481
- SafeAutoCorrect: false
2531
+ Safe: false
2482
2532
  VersionAdded: '0.13'
2483
2533
  VersionChanged: '1.2'
2484
- Safe: false
2485
2534
 
2486
2535
  Lint/UselessTimes:
2487
2536
  Description: 'Checks for useless `Integer#times` calls.'
@@ -2942,7 +2991,9 @@ Naming/VariableNumber:
2942
2991
  Security/CompoundHash:
2943
2992
  Description: 'When overwriting Object#hash to combine values, prefer delegating to Array#hash over writing a custom implementation.'
2944
2993
  Enabled: pending
2994
+ Safe: false
2945
2995
  VersionAdded: '1.28'
2996
+ VersionChanged: '1.51'
2946
2997
 
2947
2998
  Security/Eval:
2948
2999
  Description: 'The use of eval represents a serious security risk.'
@@ -3048,7 +3099,20 @@ Style/ArgumentsForwarding:
3048
3099
  StyleGuide: '#arguments-forwarding'
3049
3100
  Enabled: pending
3050
3101
  AllowOnlyRestArgument: true
3102
+ UseAnonymousForwarding: true
3103
+ RedundantRestArgumentNames:
3104
+ - args
3105
+ - arguments
3106
+ RedundantKeywordRestArgumentNames:
3107
+ - kwargs
3108
+ - options
3109
+ - opts
3110
+ RedundantBlockArgumentNames:
3111
+ - blk
3112
+ - block
3113
+ - proc
3051
3114
  VersionAdded: '1.1'
3115
+ VersionChanged: '1.58'
3052
3116
 
3053
3117
  Style/ArrayCoercion:
3054
3118
  Description: >-
@@ -3059,6 +3123,13 @@ Style/ArrayCoercion:
3059
3123
  Enabled: false
3060
3124
  VersionAdded: '0.88'
3061
3125
 
3126
+ Style/ArrayFirstLast:
3127
+ Description: 'Use `arr.first` and `arr.last` instead of `arr[0]` and `arr[-1]`.'
3128
+ Reference: '#first-and-last'
3129
+ Enabled: false
3130
+ VersionAdded: '1.58'
3131
+ Safe: false
3132
+
3062
3133
  Style/ArrayIntersect:
3063
3134
  Description: 'Use `array1.intersect?(array2)` instead of `(array1 & array2).any?`.'
3064
3135
  Enabled: 'pending'
@@ -3319,7 +3390,9 @@ Style/ClassEqualityComparison:
3319
3390
  Description: 'Enforces the use of `Object#instance_of?` instead of class comparison for equality.'
3320
3391
  StyleGuide: '#instance-of-vs-class-comparison'
3321
3392
  Enabled: true
3393
+ SafeAutoCorrect: false
3322
3394
  VersionAdded: '0.93'
3395
+ VersionChanged: '1.57'
3323
3396
  AllowedMethods:
3324
3397
  - ==
3325
3398
  - equal?
@@ -3355,6 +3428,7 @@ Style/CollectionCompact:
3355
3428
  Safe: false
3356
3429
  VersionAdded: '1.2'
3357
3430
  VersionChanged: '1.3'
3431
+ AllowedReceivers: []
3358
3432
 
3359
3433
  # Align with the style guide.
3360
3434
  Style/CollectionMethods:
@@ -3373,6 +3447,7 @@ Style/CollectionMethods:
3373
3447
  PreferredMethods:
3374
3448
  collect: 'map'
3375
3449
  collect!: 'map!'
3450
+ collect_concat: 'flat_map'
3376
3451
  inject: 'reduce'
3377
3452
  detect: 'find'
3378
3453
  find_all: 'select'
@@ -3515,7 +3590,9 @@ Style/DataInheritance:
3515
3590
  Description: 'Checks for inheritance from Data.define.'
3516
3591
  StyleGuide: '#no-extend-data-define'
3517
3592
  Enabled: pending
3593
+ SafeAutoCorrect: false
3518
3594
  VersionAdded: '1.49'
3595
+ VersionChanged: '1.51'
3519
3596
 
3520
3597
  Style/DateTime:
3521
3598
  Description: 'Use Time over DateTime.'
@@ -3706,6 +3783,11 @@ Style/EvenOdd:
3706
3783
  VersionAdded: '0.12'
3707
3784
  VersionChanged: '0.29'
3708
3785
 
3786
+ Style/ExactRegexpMatch:
3787
+ Description: 'Checks for exact regexp match inside Regexp literals.'
3788
+ Enabled: pending
3789
+ VersionAdded: '1.51'
3790
+
3709
3791
  Style/ExpandPathArguments:
3710
3792
  Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`."
3711
3793
  Enabled: true
@@ -3884,8 +3966,9 @@ Style/HashConversion:
3884
3966
  Description: 'Avoid Hash[] in favor of ary.to_h or literal hashes.'
3885
3967
  StyleGuide: '#avoid-hash-constructor'
3886
3968
  Enabled: pending
3969
+ SafeAutoCorrect: false
3887
3970
  VersionAdded: '1.10'
3888
- VersionChanged: '1.11'
3971
+ VersionChanged: '1.55'
3889
3972
  AllowSplatArgument: true
3890
3973
 
3891
3974
  Style/HashEachMethods:
@@ -4086,14 +4169,6 @@ Style/InvertibleUnlessCondition:
4086
4169
  :none?: :any?
4087
4170
  :even?: :odd?
4088
4171
  :odd?: :even?
4089
- # `ActiveSupport` defines some common inverse methods. They are listed below,
4090
- # and not enabled by default.
4091
- # :present?: :blank?
4092
- # :blank?: :present?
4093
- # :include?: :exclude?
4094
- # :exclude?: :include?
4095
- # :one?: :many?
4096
- # :many?: :one?
4097
4172
 
4098
4173
  Style/IpAddresses:
4099
4174
  Description: "Don't include literal IP addresses in code."
@@ -4370,6 +4445,7 @@ Style/MultipleComparison:
4370
4445
  VersionAdded: '0.49'
4371
4446
  VersionChanged: '1.1'
4372
4447
  AllowMethodComparison: true
4448
+ ComparisonsThreshold: 2
4373
4449
 
4374
4450
  Style/MutableConstant:
4375
4451
  Description: 'Do not assign mutable objects to constants.'
@@ -4624,7 +4700,9 @@ Style/OpenStructUse:
4624
4700
  - https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats
4625
4701
 
4626
4702
  Enabled: pending
4703
+ Safe: false
4627
4704
  VersionAdded: '1.23'
4705
+ VersionChanged: '1.51'
4628
4706
 
4629
4707
  Style/OperatorMethodCall:
4630
4708
  Description: 'Checks for redundant dot before operator method call.'
@@ -4777,12 +4855,16 @@ Style/RedundantArgument:
4777
4855
  Enabled: pending
4778
4856
  Safe: false
4779
4857
  VersionAdded: '1.4'
4780
- VersionChanged: '1.40'
4858
+ VersionChanged: '1.55'
4781
4859
  Methods:
4782
4860
  # Array#join
4783
4861
  join: ''
4784
4862
  # Array#sum
4785
4863
  sum: 0
4864
+ # Kernel.#exit
4865
+ exit: true
4866
+ # Kernel.#exit!
4867
+ exit!: false
4786
4868
  # String#split
4787
4869
  split: ' '
4788
4870
  # String#chomp
@@ -4790,6 +4872,11 @@ Style/RedundantArgument:
4790
4872
  # String#chomp!
4791
4873
  chomp!: "\n"
4792
4874
 
4875
+ Style/RedundantArrayConstructor:
4876
+ Description: 'Checks for the instantiation of array using redundant `Array` constructor.'
4877
+ Enabled: pending
4878
+ VersionAdded: '1.52'
4879
+
4793
4880
  Style/RedundantAssignment:
4794
4881
  Description: 'Checks for redundant assignment before returning.'
4795
4882
  Enabled: true
@@ -4822,6 +4909,11 @@ Style/RedundantConstantBase:
4822
4909
  Enabled: pending
4823
4910
  VersionAdded: '1.40'
4824
4911
 
4912
+ Style/RedundantCurrentDirectoryInPath:
4913
+ Description: 'Checks for uses a redundant current directory in path.'
4914
+ Enabled: pending
4915
+ VersionAdded: '1.53'
4916
+
4825
4917
  Style/RedundantDoubleSplatHashBraces:
4826
4918
  Description: 'Checks for redundant uses of double splat hash braces.'
4827
4919
  Enabled: pending
@@ -4844,7 +4936,7 @@ Style/RedundantFetchBlock:
4844
4936
  Description: >-
4845
4937
  Use `fetch(key, value)` instead of `fetch(key) { value }`
4846
4938
  when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant.
4847
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code'
4939
+ Reference: 'https://github.com/fastruby/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code'
4848
4940
  Enabled: true
4849
4941
  Safe: false
4850
4942
  # If enabled, this cop will autocorrect usages of
@@ -4861,6 +4953,15 @@ Style/RedundantFileExtensionInRequire:
4861
4953
  Enabled: true
4862
4954
  VersionAdded: '0.88'
4863
4955
 
4956
+ Style/RedundantFilterChain:
4957
+ Description: >-
4958
+ Identifies usages of `any?`, `empty?`, `none?` or `one?` predicate methods chained to
4959
+ `select`/`filter`/`find_all` and change them to use predicate method instead.
4960
+ Enabled: pending
4961
+ SafeAutoCorrect: false
4962
+ VersionAdded: '1.52'
4963
+ VersionChanged: '1.57'
4964
+
4864
4965
  Style/RedundantFreeze:
4865
4966
  Description: "Checks usages of Object#freeze on immutable objects."
4866
4967
  Enabled: true
@@ -4903,11 +5004,21 @@ Style/RedundantPercentQ:
4903
5004
  Enabled: true
4904
5005
  VersionAdded: '0.76'
4905
5006
 
5007
+ Style/RedundantRegexpArgument:
5008
+ Description: 'Identifies places where argument can be replaced from a deterministic regexp to a string.'
5009
+ Enabled: pending
5010
+ VersionAdded: '1.53'
5011
+
4906
5012
  Style/RedundantRegexpCharacterClass:
4907
5013
  Description: 'Checks for unnecessary single-element Regexp character classes.'
4908
5014
  Enabled: true
4909
5015
  VersionAdded: '0.85'
4910
5016
 
5017
+ Style/RedundantRegexpConstructor:
5018
+ Description: 'Checks for the instantiation of regexp using redundant `Regexp.new` or `Regexp.compile`.'
5019
+ Enabled: pending
5020
+ VersionAdded: '1.52'
5021
+
4911
5022
  Style/RedundantRegexpEscape:
4912
5023
  Description: 'Checks for redundant escapes in Regexps.'
4913
5024
  Enabled: true
@@ -5010,6 +5121,15 @@ Style/ReturnNil:
5010
5121
  - return_nil
5011
5122
  VersionAdded: '0.50'
5012
5123
 
5124
+ Style/ReturnNilInPredicateMethodDefinition:
5125
+ Description: 'Checks if uses of `return` or `return nil` in predicate method definition.'
5126
+ StyleGuide: '#bool-methods-qmark'
5127
+ Enabled: pending
5128
+ SafeAutoCorrect: false
5129
+ AllowedMethods: []
5130
+ AllowedPatterns: []
5131
+ VersionAdded: '1.53'
5132
+
5013
5133
  Style/SafeNavigation:
5014
5134
  Description: >-
5015
5135
  Transforms usages of a method call safeguarded by
@@ -5037,7 +5157,7 @@ Style/Sample:
5037
5157
  Description: >-
5038
5158
  Use `sample` instead of `shuffle.first`,
5039
5159
  `shuffle.last`, and `shuffle[Integer]`.
5040
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
5160
+ Reference: 'https://github.com/fastruby/fast-ruby#arrayshufflefirst-vs-arraysample-code'
5041
5161
  Enabled: true
5042
5162
  VersionAdded: '0.30'
5043
5163
 
@@ -5102,6 +5222,12 @@ Style/SingleLineBlockParams:
5102
5222
  - acc
5103
5223
  - elem
5104
5224
 
5225
+ Style/SingleLineDoEndBlock:
5226
+ Description: 'Checks for single-line `do`...`end` blocks.'
5227
+ StyleGuide: '#single-line-do-end-block'
5228
+ Enabled: pending
5229
+ VersionAdded: '1.57'
5230
+
5105
5231
  Style/SingleLineMethods:
5106
5232
  Description: 'Avoid single-line methods.'
5107
5233
  StyleGuide: '#no-single-line-methods'
@@ -5238,6 +5364,12 @@ Style/StructInheritance:
5238
5364
  VersionAdded: '0.29'
5239
5365
  VersionChanged: '1.20'
5240
5366
 
5367
+ Style/SuperWithArgsParentheses:
5368
+ Description: 'Use parentheses for `super` with arguments.'
5369
+ StyleGuide: '#super-with-args'
5370
+ Enabled: pending
5371
+ VersionAdded: '1.58'
5372
+
5241
5373
  Style/SwapValues:
5242
5374
  Description: 'Enforces the use of shorthand-style swapping of 2 variables.'
5243
5375
  StyleGuide: '#values-swapping'
@@ -5494,6 +5626,11 @@ Style/WordArray:
5494
5626
  # The regular expression `WordRegex` decides what is considered a word.
5495
5627
  WordRegex: !ruby/regexp '/\A(?:\p{Word}|\p{Word}-\p{Word}|\n|\t)+\z/'
5496
5628
 
5629
+ Style/YAMLFileRead:
5630
+ Description: 'Checks for the use of `YAML.load`, `YAML.safe_load`, and `YAML.parse` with `File.read` argument.'
5631
+ Enabled: pending
5632
+ VersionAdded: '1.53'
5633
+
5497
5634
  Style/YodaCondition:
5498
5635
  Description: 'Forbid or enforce yoda conditions.'
5499
5636
  Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions'
@@ -224,6 +224,11 @@ changed_parameters:
224
224
  - AllowedMethods
225
225
  - AllowedPatterns
226
226
  severity: warning
227
+ - cops: Style/ArgumentsForwarding
228
+ parameters: AllowOnlyRestArgument
229
+ reason: "`AllowOnlyRestArgument` has no effect with TargetRubyVersion >= 3.2."
230
+ severity: warning
231
+ minimum_ruby_version: 3.2
227
232
 
228
233
  # Enforced styles that have been removed or replaced
229
234
  changed_enforced_styles:
@@ -10,6 +10,7 @@ module RuboCop
10
10
 
11
11
  AUTO_GENERATED_FILE = '.rubocop_todo.yml'
12
12
  YAML_OPTIONAL_DOC_START = /\A---(\s+#|\s*\z)/.freeze
13
+ PLACEHOLDER = '###rubocop:inherit_here'
13
14
 
14
15
  PHASE_1 = 'Phase 1 of 2: run Layout/LineLength cop'
15
16
  PHASE_2 = 'Phase 2 of 2: run all cops'
@@ -125,15 +126,19 @@ module RuboCop
125
126
 
126
127
  def existing_configuration(config_file)
127
128
  File.read(config_file, encoding: Encoding::UTF_8)
128
- .sub(/^inherit_from: *[^\n]+/, '')
129
- .sub(/^inherit_from: *(\n *- *[^\n]+)+/, '')
129
+ .sub(/^inherit_from: *[^\n]+/, PLACEHOLDER)
130
+ .sub(/^inherit_from: *(\n *- *[^\n]+)+/, PLACEHOLDER)
130
131
  end
131
132
 
132
133
  def write_config_file(file_name, file_string, rubocop_yml_contents)
133
134
  lines = /\S/.match?(rubocop_yml_contents) ? rubocop_yml_contents.split("\n", -1) : []
134
- doc_start_index = lines.index { |line| YAML_OPTIONAL_DOC_START.match?(line) } || -1
135
- lines.insert(doc_start_index + 1, "inherit_from:#{file_string}\n")
136
- File.write(file_name, lines.join("\n"))
135
+ unless rubocop_yml_contents&.include?(PLACEHOLDER)
136
+ doc_start_index = lines.index { |line| YAML_OPTIONAL_DOC_START.match?(line) } || -1
137
+ lines.insert(doc_start_index + 1, PLACEHOLDER)
138
+ end
139
+ File.write(file_name, lines.join("\n")
140
+ .sub(/#{PLACEHOLDER}\n*/o, "inherit_from:#{file_string}\n\n")
141
+ .sub(/\n\n+\Z/, "\n"))
137
142
  end
138
143
 
139
144
  def relative_path_to_todo_from_options_config
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lsp/server'
4
+
5
+ module RuboCop
6
+ class CLI
7
+ module Command
8
+ # Start Language Server Protocol of RuboCop.
9
+ # @api private
10
+ class Lsp < Base
11
+ self.command_name = :lsp
12
+
13
+ def run
14
+ RuboCop::Lsp::Server.new(@config_store).start
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/rubocop/cli.rb CHANGED
@@ -11,7 +11,7 @@ module RuboCop
11
11
  STATUS_ERROR = 2
12
12
  STATUS_INTERRUPTED = Signal.list['INT'] + 128
13
13
  DEFAULT_PARALLEL_OPTIONS = %i[
14
- color debug display_style_guide display_time display_only_fail_level_offenses
14
+ color config debug display_style_guide display_time display_only_fail_level_offenses
15
15
  display_only_failed except extra_details fail_level fix_layout format
16
16
  ignore_disable_comments lint only only_guide_cops require safe
17
17
  autocorrect safe_autocorrect autocorrect_all
@@ -174,14 +174,17 @@ module RuboCop
174
174
  ConfigLoader.ignore_unrecognized_cops = @options[:ignore_unrecognized_cops]
175
175
  end
176
176
 
177
+ # rubocop:disable Metrics/CyclomaticComplexity
177
178
  def handle_exiting_options
178
179
  return unless Options::EXITING_OPTIONS.any? { |o| @options.key? o }
179
180
 
180
181
  run_command(:version) if @options[:version] || @options[:verbose_version]
181
182
  run_command(:show_cops) if @options[:show_cops]
182
183
  run_command(:show_docs_url) if @options[:show_docs_url]
184
+ run_command(:lsp) if @options[:lsp]
183
185
  raise Finished
184
186
  end
187
+ # rubocop:enable Metrics/CyclomaticComplexity
185
188
 
186
189
  def apply_default_formatter
187
190
  # This must be done after the options have already been processed,
@@ -284,6 +284,10 @@ module RuboCop
284
284
  end
285
285
  end
286
286
 
287
+ def inspect # :nodoc:
288
+ "#<#{self.class.name}:#{object_id} @loaded_path=#{loaded_path}>"
289
+ end
290
+
287
291
  private
288
292
 
289
293
  def target_rails_version_from_bundler_lock_file
@@ -46,14 +46,14 @@ module RuboCop
46
46
 
47
47
  file = File.join(Dir.home, DOTFILE)
48
48
 
49
- return file if File.exist?(file)
49
+ file if File.exist?(file)
50
50
  end
51
51
 
52
52
  def find_user_xdg_config
53
53
  xdg_config_home = expand_path(ENV.fetch('XDG_CONFIG_HOME', '~/.config'))
54
54
  xdg_config = File.join(xdg_config_home, 'rubocop', XDG_CONFIG)
55
55
 
56
- return xdg_config if File.exist?(xdg_config)
56
+ xdg_config if File.exist?(xdg_config)
57
57
  end
58
58
 
59
59
  def expand_path(path)
@@ -33,7 +33,7 @@ module RuboCop
33
33
  inherit_mode: determine_inherit_mode(hash, k))
34
34
  end
35
35
  hash[k] = v
36
- fix_include_paths(base_config.loaded_path, hash, k, v) if v.key?('Include')
36
+ fix_include_paths(base_config.loaded_path, hash, path, k, v) if v.key?('Include')
37
37
  end
38
38
  end
39
39
  end
@@ -42,12 +42,13 @@ module RuboCop
42
42
  # base configuration are relative to the directory where the base configuration file is. For the
43
43
  # derived configuration, we need to make those paths relative to where the derived configuration
44
44
  # file is.
45
- def fix_include_paths(base_config_path, hash, key, value)
45
+ def fix_include_paths(base_config_path, hash, path, key, value)
46
46
  return unless File.basename(base_config_path).start_with?('.rubocop')
47
47
 
48
48
  base_dir = File.dirname(base_config_path)
49
+ derived_dir = File.dirname(path)
49
50
  hash[key]['Include'] = value['Include'].map do |include_path|
50
- PathUtil.relative_path(File.join(base_dir, include_path), Dir.pwd)
51
+ PathUtil.relative_path(File.join(base_dir, include_path), derived_dir)
51
52
  end
52
53
  end
53
54
 
@@ -19,7 +19,7 @@ module RuboCop
19
19
  end
20
20
 
21
21
  def violated?
22
- config[cop]&.key?(parameter)
22
+ applies_to_current_ruby_version? && config[cop]&.key?(parameter)
23
23
  end
24
24
 
25
25
  def warning?
@@ -28,6 +28,14 @@ module RuboCop
28
28
 
29
29
  private
30
30
 
31
+ def applies_to_current_ruby_version?
32
+ minimum_ruby_version = metadata['minimum_ruby_version']
33
+
34
+ return true unless minimum_ruby_version
35
+
36
+ config.target_ruby_version >= minimum_ruby_version
37
+ end
38
+
31
39
  def alternative
32
40
  metadata['alternative']
33
41
  end