rubocop 1.67.0 → 1.82.1

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 (540) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +23 -19
  4. data/config/default.yml +403 -75
  5. data/config/internal_affairs.yml +20 -0
  6. data/config/obsoletion.yml +12 -3
  7. data/exe/rubocop +1 -8
  8. data/lib/rubocop/cached_data.rb +12 -4
  9. data/lib/rubocop/cli/command/auto_generate_config.rb +2 -2
  10. data/lib/rubocop/cli/command/execute_runner.rb +4 -4
  11. data/lib/rubocop/cli/command/show_cops.rb +24 -2
  12. data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
  13. data/lib/rubocop/cli/command/version.rb +2 -2
  14. data/lib/rubocop/cli.rb +21 -5
  15. data/lib/rubocop/comment_config.rb +64 -19
  16. data/lib/rubocop/config.rb +52 -10
  17. data/lib/rubocop/config_loader.rb +58 -49
  18. data/lib/rubocop/config_loader_resolver.rb +43 -16
  19. data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
  20. data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
  21. data/lib/rubocop/config_obsoletion.rb +46 -2
  22. data/lib/rubocop/config_store.rb +5 -0
  23. data/lib/rubocop/config_validator.rb +25 -14
  24. data/lib/rubocop/cop/autocorrect_logic.rb +57 -28
  25. data/lib/rubocop/cop/base.rb +7 -1
  26. data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
  27. data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
  28. data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
  29. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
  30. data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -3
  31. data/lib/rubocop/cop/correctors/alignment_corrector.rb +9 -19
  32. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +8 -3
  33. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -2
  34. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
  35. data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
  36. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
  37. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +37 -15
  38. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +2 -3
  39. data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
  40. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +0 -2
  41. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +10 -5
  42. data/lib/rubocop/cop/generator.rb +6 -0
  43. data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
  44. data/lib/rubocop/cop/internal_affairs/example_description.rb +9 -5
  45. data/lib/rubocop/cop/internal_affairs/location_exists.rb +142 -0
  46. data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
  47. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
  48. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +3 -2
  49. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +5 -5
  50. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
  51. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
  52. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +233 -0
  53. data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
  54. data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
  55. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
  56. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
  57. data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
  58. data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
  59. data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
  60. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
  61. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +3 -1
  62. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
  63. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
  64. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +13 -2
  65. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
  66. data/lib/rubocop/cop/internal_affairs.rb +7 -16
  67. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -1
  68. data/lib/rubocop/cop/layout/argument_alignment.rb +2 -9
  69. data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
  70. data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
  71. data/lib/rubocop/cop/layout/block_alignment.rb +3 -2
  72. data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
  73. data/lib/rubocop/cop/layout/class_structure.rb +45 -10
  74. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
  75. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  76. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  77. data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
  78. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +6 -3
  79. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +34 -20
  80. data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
  81. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +37 -7
  82. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
  83. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
  84. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
  85. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
  86. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +4 -5
  87. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
  88. data/lib/rubocop/cop/layout/end_alignment.rb +5 -1
  89. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
  90. data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -9
  91. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -7
  92. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
  93. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
  94. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
  95. data/lib/rubocop/cop/layout/hash_alignment.rb +10 -11
  96. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -3
  97. data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -4
  98. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  99. data/lib/rubocop/cop/layout/indentation_width.rb +20 -8
  100. data/lib/rubocop/cop/layout/leading_comment_space.rb +57 -2
  101. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +11 -2
  102. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
  103. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
  104. data/lib/rubocop/cop/layout/line_length.rb +163 -11
  105. data/lib/rubocop/cop/layout/multiline_block_layout.rb +3 -0
  106. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
  107. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
  108. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
  109. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +9 -5
  110. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  111. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
  112. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +11 -8
  113. data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
  114. data/lib/rubocop/cop/layout/redundant_line_break.rb +19 -46
  115. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +16 -7
  116. data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
  117. data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
  118. data/lib/rubocop/cop/layout/space_after_comma.rb +3 -11
  119. data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
  120. data/lib/rubocop/cop/layout/space_after_semicolon.rb +12 -2
  121. data/lib/rubocop/cop/layout/space_around_keyword.rb +9 -3
  122. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
  123. data/lib/rubocop/cop/layout/space_around_operators.rb +31 -21
  124. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -0
  125. data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
  126. data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
  127. data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
  128. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
  129. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
  130. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +7 -0
  131. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +0 -1
  132. data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
  133. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
  134. data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -0
  135. data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
  136. data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -3
  137. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +10 -12
  138. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
  139. data/lib/rubocop/cop/lint/circular_argument_reference.rb +51 -4
  140. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
  141. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +3 -2
  142. data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
  143. data/lib/rubocop/cop/lint/cop_directive_syntax.rb +90 -0
  144. data/lib/rubocop/cop/lint/debugger.rb +3 -5
  145. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
  146. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +7 -3
  147. data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
  148. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +5 -5
  149. data/lib/rubocop/cop/lint/duplicate_methods.rb +111 -23
  150. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +6 -43
  151. data/lib/rubocop/cop/lint/duplicate_set_element.rb +20 -7
  152. data/lib/rubocop/cop/lint/else_layout.rb +19 -0
  153. data/lib/rubocop/cop/lint/empty_conditional_body.rb +14 -64
  154. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  155. data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
  156. data/lib/rubocop/cop/lint/empty_file.rb +0 -2
  157. data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -1
  158. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  159. data/lib/rubocop/cop/lint/erb_new_arguments.rb +0 -6
  160. data/lib/rubocop/cop/lint/float_comparison.rb +51 -18
  161. data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -4
  162. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
  163. data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
  164. data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
  165. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  166. data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
  167. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +3 -0
  168. data/lib/rubocop/cop/lint/literal_as_condition.rb +129 -10
  169. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
  170. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +25 -7
  171. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +17 -8
  172. data/lib/rubocop/cop/lint/missing_super.rb +2 -2
  173. data/lib/rubocop/cop/lint/mixed_case_range.rb +5 -8
  174. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  175. data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -6
  176. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  177. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +6 -2
  178. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +12 -3
  179. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -3
  180. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
  181. data/lib/rubocop/cop/lint/number_conversion.rb +0 -1
  182. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
  183. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
  184. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
  185. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
  186. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -5
  187. data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
  188. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +23 -9
  189. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
  190. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +2 -2
  191. data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -23
  192. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +113 -9
  193. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +15 -8
  194. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
  195. data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
  196. data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -0
  197. data/lib/rubocop/cop/lint/redundant_with_object.rb +3 -0
  198. data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
  199. data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
  200. data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
  201. data/lib/rubocop/cop/lint/rescue_exception.rb +2 -5
  202. data/lib/rubocop/cop/lint/rescue_type.rb +4 -8
  203. data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -11
  204. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +17 -1
  205. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +5 -1
  206. data/lib/rubocop/cop/lint/self_assignment.rb +47 -15
  207. data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
  208. data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
  209. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +13 -1
  210. data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
  211. data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
  212. data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
  213. data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
  214. data/lib/rubocop/cop/lint/syntax.rb +4 -1
  215. data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
  216. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  217. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
  218. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
  219. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -1
  220. data/lib/rubocop/cop/lint/unreachable_code.rb +54 -2
  221. data/lib/rubocop/cop/lint/unreachable_loop.rb +6 -6
  222. data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
  223. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
  224. data/lib/rubocop/cop/lint/useless_access_modifier.rb +34 -8
  225. data/lib/rubocop/cop/lint/useless_assignment.rb +47 -17
  226. data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
  227. data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
  228. data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
  229. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -0
  230. data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
  231. data/lib/rubocop/cop/lint/useless_numeric_operation.rb +3 -1
  232. data/lib/rubocop/cop/lint/useless_or.rb +111 -0
  233. data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
  234. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
  235. data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -25
  236. data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
  237. data/lib/rubocop/cop/lint/void.rb +23 -12
  238. data/lib/rubocop/cop/message_annotator.rb +7 -3
  239. data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
  240. data/lib/rubocop/cop/metrics/block_length.rb +1 -0
  241. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  242. data/lib/rubocop/cop/metrics/class_length.rb +9 -9
  243. data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
  244. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
  245. data/lib/rubocop/cop/metrics/method_length.rb +9 -1
  246. data/lib/rubocop/cop/metrics/module_length.rb +1 -1
  247. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  248. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +5 -4
  249. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +3 -4
  250. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
  251. data/lib/rubocop/cop/mixin/alignment.rb +3 -3
  252. data/lib/rubocop/cop/mixin/allowed_pattern.rb +4 -4
  253. data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
  254. data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
  255. data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +47 -0
  256. data/lib/rubocop/cop/mixin/code_length.rb +1 -1
  257. data/lib/rubocop/cop/mixin/comments_help.rb +8 -3
  258. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  259. data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
  260. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
  261. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
  262. data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
  263. data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
  264. data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
  265. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +4 -3
  266. data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
  267. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
  268. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +22 -22
  269. data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
  270. data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
  271. data/lib/rubocop/cop/mixin/line_length_help.rb +48 -12
  272. data/lib/rubocop/cop/mixin/method_complexity.rb +3 -2
  273. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +8 -10
  274. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -1
  275. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
  276. data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
  277. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +68 -30
  278. data/lib/rubocop/cop/mixin/range_help.rb +15 -4
  279. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +5 -4
  280. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
  281. data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -8
  282. data/lib/rubocop/cop/mixin/string_help.rb +2 -2
  283. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  284. data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
  285. data/lib/rubocop/cop/mixin/trailing_comma.rb +28 -9
  286. data/lib/rubocop/cop/naming/accessor_method_name.rb +6 -6
  287. data/lib/rubocop/cop/naming/block_forwarding.rb +20 -16
  288. data/lib/rubocop/cop/naming/constant_name.rb +6 -7
  289. data/lib/rubocop/cop/naming/file_name.rb +2 -4
  290. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +12 -13
  291. data/lib/rubocop/cop/naming/method_name.rb +187 -15
  292. data/lib/rubocop/cop/naming/predicate_method.rb +319 -0
  293. data/lib/rubocop/cop/naming/{predicate_name.rb → predicate_prefix.rb} +48 -4
  294. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +6 -14
  295. data/lib/rubocop/cop/naming/variable_name.rb +50 -6
  296. data/lib/rubocop/cop/naming/variable_number.rb +2 -3
  297. data/lib/rubocop/cop/offense.rb +2 -3
  298. data/lib/rubocop/cop/registry.rb +9 -6
  299. data/lib/rubocop/cop/security/compound_hash.rb +2 -0
  300. data/lib/rubocop/cop/security/eval.rb +2 -1
  301. data/lib/rubocop/cop/security/json_load.rb +33 -11
  302. data/lib/rubocop/cop/security/open.rb +1 -0
  303. data/lib/rubocop/cop/security/yaml_load.rb +3 -2
  304. data/lib/rubocop/cop/style/access_modifier_declarations.rb +114 -34
  305. data/lib/rubocop/cop/style/accessor_grouping.rb +32 -6
  306. data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
  307. data/lib/rubocop/cop/style/and_or.rb +1 -1
  308. data/lib/rubocop/cop/style/arguments_forwarding.rb +57 -44
  309. data/lib/rubocop/cop/style/array_first_last.rb +18 -2
  310. data/lib/rubocop/cop/style/array_intersect.rb +115 -39
  311. data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
  312. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -2
  313. data/lib/rubocop/cop/style/bitwise_predicate.rb +107 -0
  314. data/lib/rubocop/cop/style/block_delimiters.rb +44 -26
  315. data/lib/rubocop/cop/style/case_equality.rb +11 -13
  316. data/lib/rubocop/cop/style/case_like_if.rb +9 -12
  317. data/lib/rubocop/cop/style/class_and_module_children.rb +53 -11
  318. data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
  319. data/lib/rubocop/cop/style/collection_methods.rb +2 -1
  320. data/lib/rubocop/cop/style/collection_querying.rb +167 -0
  321. data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
  322. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  323. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  324. data/lib/rubocop/cop/style/commented_keyword.rb +20 -3
  325. data/lib/rubocop/cop/style/comparable_between.rb +78 -0
  326. data/lib/rubocop/cop/style/concat_array_literals.rb +1 -1
  327. data/lib/rubocop/cop/style/conditional_assignment.rb +50 -42
  328. data/lib/rubocop/cop/style/constant_visibility.rb +19 -23
  329. data/lib/rubocop/cop/style/data_inheritance.rb +7 -0
  330. data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -5
  331. data/lib/rubocop/cop/style/dig_chain.rb +89 -0
  332. data/lib/rubocop/cop/style/documentation.rb +1 -1
  333. data/lib/rubocop/cop/style/double_negation.rb +5 -5
  334. data/lib/rubocop/cop/style/each_for_simple_loop.rb +4 -7
  335. data/lib/rubocop/cop/style/each_with_object.rb +2 -3
  336. data/lib/rubocop/cop/style/empty_else.rb +4 -2
  337. data/lib/rubocop/cop/style/empty_literal.rb +5 -1
  338. data/lib/rubocop/cop/style/empty_method.rb +0 -6
  339. data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
  340. data/lib/rubocop/cop/style/endless_method.rb +163 -18
  341. data/lib/rubocop/cop/style/eval_with_location.rb +4 -4
  342. data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -3
  343. data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
  344. data/lib/rubocop/cop/style/explicit_block_argument.rb +17 -4
  345. data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
  346. data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
  347. data/lib/rubocop/cop/style/file_null.rb +89 -0
  348. data/lib/rubocop/cop/style/file_touch.rb +75 -0
  349. data/lib/rubocop/cop/style/float_division.rb +23 -5
  350. data/lib/rubocop/cop/style/for.rb +1 -1
  351. data/lib/rubocop/cop/style/format_string_token.rb +38 -11
  352. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -2
  353. data/lib/rubocop/cop/style/global_std_stream.rb +3 -0
  354. data/lib/rubocop/cop/style/global_vars.rb +1 -3
  355. data/lib/rubocop/cop/style/guard_clause.rb +17 -14
  356. data/lib/rubocop/cop/style/hash_conversion.rb +16 -9
  357. data/lib/rubocop/cop/style/hash_each_methods.rb +6 -8
  358. data/lib/rubocop/cop/style/hash_except.rb +35 -147
  359. data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
  360. data/lib/rubocop/cop/style/hash_slice.rb +80 -0
  361. data/lib/rubocop/cop/style/hash_syntax.rb +9 -3
  362. data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
  363. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
  364. data/lib/rubocop/cop/style/identical_conditional_branches.rb +25 -6
  365. data/lib/rubocop/cop/style/if_inside_else.rb +10 -14
  366. data/lib/rubocop/cop/style/if_unless_modifier.rb +39 -12
  367. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
  368. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +3 -4
  369. data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -9
  370. data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
  371. data/lib/rubocop/cop/style/inverse_methods.rb +16 -13
  372. data/lib/rubocop/cop/style/invertible_unless_condition.rb +2 -2
  373. data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
  374. data/lib/rubocop/cop/style/it_assignment.rb +93 -0
  375. data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
  376. data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
  377. data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
  378. data/lib/rubocop/cop/style/lambda.rb +1 -0
  379. data/lib/rubocop/cop/style/lambda_call.rb +10 -4
  380. data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
  381. data/lib/rubocop/cop/style/map_into_array.rb +11 -3
  382. data/lib/rubocop/cop/style/map_to_hash.rb +13 -4
  383. data/lib/rubocop/cop/style/map_to_set.rb +4 -5
  384. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +28 -20
  385. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +12 -1
  386. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +35 -4
  387. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -11
  388. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
  389. data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
  390. data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
  391. data/lib/rubocop/cop/style/missing_else.rb +2 -0
  392. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +33 -3
  393. data/lib/rubocop/cop/style/module_member_existence_check.rb +74 -0
  394. data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
  395. data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
  396. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  397. data/lib/rubocop/cop/style/multiline_method_signature.rb +3 -13
  398. data/lib/rubocop/cop/style/multiple_comparison.rb +52 -51
  399. data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
  400. data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
  401. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
  402. data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
  403. data/lib/rubocop/cop/style/next.rb +44 -0
  404. data/lib/rubocop/cop/style/nil_comparison.rb +9 -7
  405. data/lib/rubocop/cop/style/not.rb +1 -1
  406. data/lib/rubocop/cop/style/object_then.rb +15 -15
  407. data/lib/rubocop/cop/style/one_line_conditional.rb +42 -13
  408. data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
  409. data/lib/rubocop/cop/style/operator_method_call.rb +16 -8
  410. data/lib/rubocop/cop/style/or_assignment.rb +3 -6
  411. data/lib/rubocop/cop/style/parallel_assignment.rb +43 -40
  412. data/lib/rubocop/cop/style/parentheses_around_condition.rb +2 -2
  413. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  414. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  415. data/lib/rubocop/cop/style/proc.rb +2 -2
  416. data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
  417. data/lib/rubocop/cop/style/raise_args.rb +15 -13
  418. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  419. data/lib/rubocop/cop/style/redundant_argument.rb +5 -1
  420. data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
  421. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
  422. data/lib/rubocop/cop/style/redundant_begin.rb +36 -1
  423. data/lib/rubocop/cop/style/redundant_condition.rb +95 -23
  424. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +16 -5
  425. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +6 -10
  426. data/lib/rubocop/cop/style/redundant_each.rb +1 -1
  427. data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
  428. data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -9
  429. data/lib/rubocop/cop/style/redundant_format.rb +283 -0
  430. data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
  431. data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
  432. data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
  433. data/lib/rubocop/cop/style/redundant_line_continuation.rb +55 -19
  434. data/lib/rubocop/cop/style/redundant_parentheses.rb +105 -36
  435. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  436. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +13 -0
  437. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
  438. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -1
  439. data/lib/rubocop/cop/style/redundant_return.rb +2 -2
  440. data/lib/rubocop/cop/style/redundant_self.rb +15 -18
  441. data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
  442. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
  443. data/lib/rubocop/cop/style/redundant_sort.rb +10 -10
  444. data/lib/rubocop/cop/style/redundant_sort_by.rb +17 -1
  445. data/lib/rubocop/cop/style/redundant_string_escape.rb +2 -2
  446. data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
  447. data/lib/rubocop/cop/style/rescue_modifier.rb +5 -3
  448. data/lib/rubocop/cop/style/return_nil.rb +2 -2
  449. data/lib/rubocop/cop/style/safe_navigation.rb +75 -16
  450. data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
  451. data/lib/rubocop/cop/style/select_by_regexp.rb +5 -2
  452. data/lib/rubocop/cop/style/self_assignment.rb +11 -17
  453. data/lib/rubocop/cop/style/semicolon.rb +24 -8
  454. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +2 -1
  455. data/lib/rubocop/cop/style/signal_exception.rb +2 -3
  456. data/lib/rubocop/cop/style/single_argument_dig.rb +9 -5
  457. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  458. data/lib/rubocop/cop/style/single_line_do_end_block.rb +15 -4
  459. data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
  460. data/lib/rubocop/cop/style/slicing_with_range.rb +40 -11
  461. data/lib/rubocop/cop/style/sole_nested_conditional.rb +75 -102
  462. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  463. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
  464. data/lib/rubocop/cop/style/string_concatenation.rb +21 -17
  465. data/lib/rubocop/cop/style/string_literals.rb +1 -1
  466. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  467. data/lib/rubocop/cop/style/struct_inheritance.rb +8 -1
  468. data/lib/rubocop/cop/style/super_arguments.rb +68 -21
  469. data/lib/rubocop/cop/style/swap_values.rb +4 -15
  470. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  471. data/lib/rubocop/cop/style/symbol_proc.rb +3 -1
  472. data/lib/rubocop/cop/style/ternary_parentheses.rb +25 -4
  473. data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
  474. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +56 -2
  475. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
  476. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  477. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
  478. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +15 -15
  479. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  480. data/lib/rubocop/cop/style/unless_else.rb +10 -9
  481. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
  482. data/lib/rubocop/cop/style/while_until_modifier.rb +0 -1
  483. data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
  484. data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
  485. data/lib/rubocop/cop/team.rb +1 -1
  486. data/lib/rubocop/cop/util.rb +14 -8
  487. data/lib/rubocop/cop/utils/format_string.rb +20 -5
  488. data/lib/rubocop/cop/variable_force/assignment.rb +24 -5
  489. data/lib/rubocop/cop/variable_force/branch.rb +1 -1
  490. data/lib/rubocop/cop/variable_force/scope.rb +1 -1
  491. data/lib/rubocop/cop/variable_force/variable.rb +14 -3
  492. data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
  493. data/lib/rubocop/cop/variable_force.rb +30 -19
  494. data/lib/rubocop/cops_documentation_generator.rb +54 -28
  495. data/lib/rubocop/directive_comment.rb +88 -11
  496. data/lib/rubocop/ext/regexp_node.rb +0 -1
  497. data/lib/rubocop/formatter/disabled_config_formatter.rb +21 -6
  498. data/lib/rubocop/formatter/formatter_set.rb +1 -1
  499. data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
  500. data/lib/rubocop/formatter/html_formatter.rb +1 -1
  501. data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
  502. data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
  503. data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
  504. data/lib/rubocop/lsp/diagnostic.rb +185 -0
  505. data/lib/rubocop/lsp/logger.rb +2 -2
  506. data/lib/rubocop/lsp/routes.rb +37 -24
  507. data/lib/rubocop/lsp/runtime.rb +18 -50
  508. data/lib/rubocop/lsp/server.rb +0 -2
  509. data/lib/rubocop/lsp/stdin_runner.rb +69 -0
  510. data/lib/rubocop/magic_comment.rb +31 -3
  511. data/lib/rubocop/options.rb +28 -12
  512. data/lib/rubocop/path_util.rb +15 -8
  513. data/lib/rubocop/pending_cops_reporter.rb +56 -0
  514. data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
  515. data/lib/rubocop/plugin/load_error.rb +26 -0
  516. data/lib/rubocop/plugin/loader.rb +100 -0
  517. data/lib/rubocop/plugin/not_supported_error.rb +29 -0
  518. data/lib/rubocop/plugin.rb +46 -0
  519. data/lib/rubocop/rake_task.rb +5 -2
  520. data/lib/rubocop/remote_config.rb +7 -8
  521. data/lib/rubocop/result_cache.rb +61 -48
  522. data/lib/rubocop/rspec/cop_helper.rb +13 -1
  523. data/lib/rubocop/rspec/expect_offense.rb +15 -5
  524. data/lib/rubocop/rspec/shared_contexts.rb +38 -1
  525. data/lib/rubocop/rspec/support.rb +4 -2
  526. data/lib/rubocop/runner.rb +35 -18
  527. data/lib/rubocop/server/cache.rb +51 -13
  528. data/lib/rubocop/server/cli.rb +2 -2
  529. data/lib/rubocop/server/client_command/base.rb +10 -0
  530. data/lib/rubocop/server/client_command/exec.rb +2 -1
  531. data/lib/rubocop/server/client_command/start.rb +11 -1
  532. data/lib/rubocop/target_finder.rb +14 -9
  533. data/lib/rubocop/target_ruby.rb +27 -3
  534. data/lib/rubocop/version.rb +53 -12
  535. data/lib/rubocop.rb +45 -2
  536. data/lib/ruby_lsp/rubocop/addon.rb +90 -0
  537. data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
  538. metadata +92 -21
  539. data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
  540. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
@@ -47,7 +47,7 @@ module RuboCop
47
47
  # @!method redundant_source_range(node)
48
48
  def_node_matcher :redundant_source_range, <<~PATTERN
49
49
  {
50
- (send $(send _ :source_range) :source)
50
+ (call $(call _ :source_range) :source)
51
51
  (send nil? :add_offense $(send _ :source_range) ...)
52
52
  (send _ {
53
53
  :replace :insert_before :insert_before_multi :insert_after :insert_after_multi
@@ -59,6 +59,7 @@ module RuboCop
59
59
 
60
60
  def on_send(node)
61
61
  return unless (source_range = redundant_source_range(node))
62
+ return unless source_range.receiver
62
63
  return if source_range.receiver.send_type? && source_range.receiver.method?(:buffer)
63
64
 
64
65
  selector = source_range.loc.selector
@@ -67,6 +68,7 @@ module RuboCop
67
68
  corrector.remove(source_range.loc.dot.join(selector))
68
69
  end
69
70
  end
71
+ alias on_csend on_send
70
72
  end
71
73
  end
72
74
  end
@@ -34,8 +34,8 @@ module RuboCop
34
34
  # @!method single_line_comparison(node)
35
35
  def_node_matcher :single_line_comparison, <<~PATTERN
36
36
  {
37
- (send (send $_receiver {:line :first_line}) {:== :!=} (send _receiver :last_line))
38
- (send (send $_receiver :last_line) {:== :!=} (send _receiver {:line :first_line}))
37
+ (send (call $_receiver {:line :first_line}) {:== :!=} (call _receiver :last_line))
38
+ (send (call $_receiver :last_line) {:== :!=} (call _receiver {:line :first_line}))
39
39
  }
40
40
  PATTERN
41
41
 
@@ -43,7 +43,8 @@ module RuboCop
43
43
  return unless (receiver = single_line_comparison(node))
44
44
 
45
45
  bang = node.method?(:!=) ? '!' : ''
46
- preferred = "#{bang}#{extract_receiver(receiver)}.single_line?"
46
+ dot = receiver.parent.loc.dot.source
47
+ preferred = "#{bang}#{extract_receiver(receiver)}#{dot}single_line?"
47
48
 
48
49
  add_offense(node, message: format(MSG, preferred: preferred)) do |corrector|
49
50
  corrector.replace(node, preferred)
@@ -53,7 +54,7 @@ module RuboCop
53
54
  private
54
55
 
55
56
  def extract_receiver(node)
56
- node = node.receiver if node.send_type? && %i[loc source_range].include?(node.method_name)
57
+ node = node.receiver if node.call_type? && %i[loc source_range].include?(node.method_name)
57
58
  node.source
58
59
  end
59
60
  end
@@ -50,8 +50,6 @@ module RuboCop
50
50
  # end
51
51
  #
52
52
  class StyleDetectedApiUse < Base
53
- include RangeHelp
54
-
55
53
  MSG_FOR_POSITIVE_WITHOUT_NEGATIVE =
56
54
  '`correct_style_detected` method called without ' \
57
55
  'calling a negative `*_style_detected` method.'
@@ -10,14 +10,25 @@ module RuboCop
10
10
  extend FileFinder
11
11
 
12
12
  ALLOWED_CONFIGURATIONS = %w[
13
- Safe SafeAutoCorrect AutoCorrect Severity StyleGuide Details Reference Include Exclude
13
+ Safe SafeAutoCorrect AutoCorrect
14
+ Severity
15
+ StyleGuide
16
+ Details
17
+ Reference References
18
+ Include Exclude
14
19
  ].freeze
15
20
  RESTRICT_ON_SEND = %i[[] fetch].freeze
16
21
  MSG = '`%<name>s` is not defined in the configuration for `%<cop>s` ' \
17
22
  'in `config/default.yml`.'
18
23
  CONFIG_PATH = find_file_upwards('config/default.yml', Dir.pwd)
19
24
  CONFIG = if CONFIG_PATH
20
- ConfigLoader.load_yaml_configuration(CONFIG_PATH)
25
+ begin
26
+ original_debug = ConfigLoader.debug
27
+ ConfigLoader.debug = false
28
+ ConfigLoader.load_yaml_configuration(CONFIG_PATH)
29
+ ensure
30
+ ConfigLoader.debug = original_debug
31
+ end
21
32
  else
22
33
  {}
23
34
  end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module InternalAffairs
6
- # Check for useless `RESTRICT_ON_SEND`.
6
+ # Checks for useless `RESTRICT_ON_SEND`.
7
7
  #
8
8
  # @example
9
9
  # # bad
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'internal_affairs/cop_description'
4
+ require_relative 'internal_affairs/cop_enabled'
4
5
  require_relative 'internal_affairs/create_empty_file'
5
6
  require_relative 'internal_affairs/empty_line_between_expect_offense_and_correction'
6
7
  require_relative 'internal_affairs/example_description'
7
8
  require_relative 'internal_affairs/example_heredoc_delimiter'
8
9
  require_relative 'internal_affairs/inherit_deprecated_cop_class'
9
10
  require_relative 'internal_affairs/lambda_or_proc'
11
+ require_relative 'internal_affairs/location_exists'
10
12
  require_relative 'internal_affairs/location_expression'
11
13
  require_relative 'internal_affairs/location_line_equality_comparison'
12
14
  require_relative 'internal_affairs/method_name_end_with'
@@ -14,9 +16,14 @@ require_relative 'internal_affairs/method_name_equal'
14
16
  require_relative 'internal_affairs/node_destructuring'
15
17
  require_relative 'internal_affairs/node_first_or_last_argument'
16
18
  require_relative 'internal_affairs/node_matcher_directive'
19
+ require_relative 'internal_affairs/node_pattern_groups'
20
+ require_relative 'internal_affairs/node_type_group'
21
+ require_relative 'internal_affairs/node_type_multiple_predicates'
17
22
  require_relative 'internal_affairs/node_type_predicate'
18
23
  require_relative 'internal_affairs/numblock_handler'
19
24
  require_relative 'internal_affairs/offense_location_keyword'
25
+ require_relative 'internal_affairs/on_send_without_on_csend'
26
+ require_relative 'internal_affairs/operator_keyword'
20
27
  require_relative 'internal_affairs/processed_source_buffer_name'
21
28
  require_relative 'internal_affairs/redundant_context_config_parameter'
22
29
  require_relative 'internal_affairs/redundant_described_class_as_subject'
@@ -31,19 +38,3 @@ require_relative 'internal_affairs/style_detected_api_use'
31
38
  require_relative 'internal_affairs/undefined_config'
32
39
  require_relative 'internal_affairs/useless_message_assertion'
33
40
  require_relative 'internal_affairs/useless_restrict_on_send'
34
-
35
- module RuboCop
36
- # Patch in the InternalAffairs specific config values
37
- module InternalAffairs
38
- def self.inject!
39
- path = File.join(ConfigLoader::RUBOCOP_HOME, 'config', 'internal_affairs.yml')
40
- hash = ConfigLoader.load_yaml_configuration(path)
41
- config = Config.new(hash, path)
42
- puts "configuration from #{path}" if ConfigLoader.debug?
43
- config = ConfigLoader.merge_with_default(config, path)
44
- ConfigLoader.instance_variable_set(:@default_configuration, config)
45
- end
46
- end
47
- end
48
-
49
- RuboCop::InternalAffairs.inject!
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Cop
5
5
  module Layout
6
6
  # Bare access modifiers (those not applying to specific methods) should be
7
- # indented as deep as method definitions, or as deep as the class/module
7
+ # indented as deep as method definitions, or as deep as the `class`/`module`
8
8
  # keyword, depending on configuration.
9
9
  #
10
10
  # @example EnforcedStyle: indent (default)
@@ -3,8 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Layout
6
- # Here we check if the arguments on a multi-line method
7
- # definition are aligned.
6
+ # Check that the arguments on a multi-line method call are aligned.
8
7
  #
9
8
  # @example EnforcedStyle: with_first_argument (default)
10
9
  # # good
@@ -142,16 +141,10 @@ module RuboCop
142
141
  end
143
142
 
144
143
  def enforce_hash_argument_with_separator?
145
- return false unless hash_argument_config['Enabled']
146
-
147
144
  RuboCop::Cop::Layout::HashAlignment::SEPARATOR_ALIGNMENT_STYLES.any? do |style|
148
- hash_argument_config[style]&.include?('separator')
145
+ config.for_enabled_cop('Layout/HashAlignment')[style]&.include?('separator')
149
146
  end
150
147
  end
151
-
152
- def hash_argument_config
153
- config.for_cop('Layout/HashAlignment')
154
- end
155
148
  end
156
149
  end
157
150
  end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Layout
6
- # Here we check if the elements of a multi-line array literal are
6
+ # Check that the elements of a multi-line array literal are
7
7
  # aligned.
8
8
  #
9
9
  # @example EnforcedStyle: with_first_element (default)
@@ -40,7 +40,6 @@ module RuboCop
40
40
  #
41
41
  class BeginEndAlignment < Base
42
42
  include EndKeywordAlignment
43
- include RangeHelp
44
43
  extend AutoCorrector
45
44
 
46
45
  MSG = '`end` at %d, %d is not aligned with `%s` at %d, %d.'
@@ -73,6 +73,7 @@ module RuboCop
73
73
  # @!method block_end_align_target?(node, child)
74
74
  def_node_matcher :block_end_align_target?, <<~PATTERN
75
75
  {assignment?
76
+ any_def
76
77
  splat
77
78
  and
78
79
  or
@@ -85,6 +86,7 @@ module RuboCop
85
86
  end
86
87
 
87
88
  alias on_numblock on_block
89
+ alias on_itblock on_block
88
90
 
89
91
  def style_parameter_name
90
92
  'EnforcedStyleAlignWith'
@@ -127,7 +129,6 @@ module RuboCop
127
129
  start_loc,
128
130
  end_loc,
129
131
  do_source_line_column)
130
-
131
132
  error_source_line_column = if style == :start_of_block
132
133
  do_source_line_column
133
134
  else
@@ -189,7 +190,7 @@ module RuboCop
189
190
  # In offense message, we want to show the assignment LHS rather than
190
191
  # the entire assignment.
191
192
  def find_lhs_node(node)
192
- node, = *node while node.op_asgn_type? || node.masgn_type?
193
+ node = node.lhs while node.type?(:op_asgn, :masgn)
193
194
  node
194
195
  end
195
196
 
@@ -43,6 +43,7 @@ module RuboCop
43
43
  end
44
44
 
45
45
  alias on_numblock on_block
46
+ alias on_itblock on_block
46
47
 
47
48
  private
48
49
 
@@ -3,25 +3,30 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Layout
6
- # Checks if the code style follows the ExpectedOrder configuration:
6
+ # Checks if the code style follows the `ExpectedOrder` configuration:
7
7
  #
8
8
  # `Categories` allows us to map macro names into a category.
9
9
  #
10
10
  # Consider an example of code style that covers the following order:
11
11
  #
12
- # * Module inclusion (include, prepend, extend)
12
+ # * Module inclusion (`include`, `prepend`, `extend`)
13
13
  # * Constants
14
- # * Associations (has_one, has_many)
15
- # * Public attribute macros (attr_accessor, attr_writer, attr_reader)
16
- # * Other macros (validates, validate)
14
+ # * Associations (`has_one`, `has_many`)
15
+ # * Public attribute macros (`attr_accessor`, `attr_writer`, `attr_reader`)
16
+ # * Other macros (`validates`, `validate`)
17
17
  # * Public class methods
18
18
  # * Initializer
19
19
  # * Public instance methods
20
- # * Protected attribute macros (attr_accessor, attr_writer, attr_reader)
20
+ # * Protected attribute macros (`attr_accessor`, `attr_writer`, `attr_reader`)
21
21
  # * Protected instance methods
22
- # * Private attribute macros (attr_accessor, attr_writer, attr_reader)
22
+ # * Private attribute macros (`attr_accessor`, `attr_writer`, `attr_reader`)
23
23
  # * Private instance methods
24
24
  #
25
+ # NOTE: Simply enabling the cop with `Enabled: true` will not use
26
+ # the example order shown below.
27
+ # To enforce the order of macros like `attr_reader`,
28
+ # you must define both `ExpectedOrder` *and* `Categories`.
29
+ #
25
30
  # You can configure the following order:
26
31
  #
27
32
  # [source,yaml]
@@ -68,6 +73,36 @@ module RuboCop
68
73
  # - extend
69
74
  # ----
70
75
  #
76
+ # If you only set `ExpectedOrder`
77
+ # without defining `Categories`,
78
+ # macros such as `attr_reader` or `has_many`
79
+ # will not be recognized as part of a category, and their order will not be validated.
80
+ # For example, the following will NOT raise any offenses, even if the order is incorrect:
81
+ #
82
+ # [source,yaml]
83
+ # ----
84
+ # Layout/ClassStructure:
85
+ # Enabled: true
86
+ # ExpectedOrder:
87
+ # - public_attribute_macros
88
+ # - initializer
89
+ # ----
90
+ #
91
+ # To make it work as expected, you must also specify `Categories` like this:
92
+ #
93
+ # [source,yaml]
94
+ # ----
95
+ # Layout/ClassStructure:
96
+ # ExpectedOrder:
97
+ # - public_attribute_macros
98
+ # - initializer
99
+ # Categories:
100
+ # attribute_macros:
101
+ # - attr_reader
102
+ # - attr_writer
103
+ # - attr_accessor
104
+ # ----
105
+ #
71
106
  # @safety
72
107
  # Autocorrection is unsafe because class methods and module inclusion
73
108
  # can behave differently, based on which methods or constants have
@@ -236,7 +271,7 @@ module RuboCop
236
271
 
237
272
  return [] unless class_def
238
273
 
239
- if class_def.def_type? || class_def.send_type?
274
+ if class_def.type?(:def, :send)
240
275
  [class_def]
241
276
  else
242
277
  class_def.children.compact
@@ -289,7 +324,7 @@ module RuboCop
289
324
  def marked_as_private_constant?(node, name)
290
325
  return false unless node.method?(:private_constant)
291
326
 
292
- node.arguments.any? { |arg| (arg.sym_type? || arg.str_type?) && arg.value == name }
327
+ node.arguments.any? { |arg| arg.type?(:sym, :str) && arg.value == name }
293
328
  end
294
329
 
295
330
  def end_position_for(node)
@@ -322,7 +357,7 @@ module RuboCop
322
357
  end
323
358
 
324
359
  def find_heredoc(node)
325
- node.each_node(:str, :dstr, :xstr).find(&:heredoc?)
360
+ node.each_node(:any_str).find(&:heredoc?)
326
361
  end
327
362
 
328
363
  def buffer
@@ -155,13 +155,13 @@ module RuboCop
155
155
  end
156
156
 
157
157
  def all_elements_aligned?(elements)
158
- elements.flat_map do |e|
159
- if e.hash_type?
160
- e.each_child_node.map { |child| child.loc.column }
161
- else
158
+ if elements.first.hash_type?
159
+ elements.first.each_child_node.map { |child| child.loc.column }
160
+ else
161
+ elements.flat_map do |e|
162
162
  e.loc.column
163
163
  end
164
- end.uniq.count == 1
164
+ end.uniq.one?
165
165
  end
166
166
 
167
167
  def first_argument_line(elements)
@@ -48,7 +48,7 @@ module RuboCop
48
48
  def on_send(node)
49
49
  return unless node.def_modifier?
50
50
 
51
- method_def = node.each_descendant(:def, :defs).first
51
+ method_def = node.each_descendant(:any_def).first
52
52
  expr = node.source_range
53
53
 
54
54
  line_start = range_between(expr.begin_pos, method_def.loc.keyword.end_pos)
@@ -120,7 +120,7 @@ module RuboCop
120
120
  end
121
121
 
122
122
  def heredoc?(node)
123
- (node.str_type? || node.dstr_type?) && node.heredoc?
123
+ node.any_str_type? && node.heredoc?
124
124
  end
125
125
 
126
126
  def end_range(node)
@@ -49,7 +49,7 @@ module RuboCop
49
49
  end
50
50
 
51
51
  def on_rescue(node)
52
- return unless node.loc.respond_to?(:else) && node.loc.else
52
+ return unless node.loc?(:else)
53
53
 
54
54
  check_alignment(base_range_of_rescue(node), node.loc.else)
55
55
  end
@@ -92,7 +92,7 @@ module RuboCop
92
92
  case parent.type
93
93
  when :def, :defs then base_for_method_definition(parent)
94
94
  when :kwbegin then parent.loc.begin
95
- when :block
95
+ when :block, :numblock, :itblock
96
96
  assignment_node = assignment_node(parent)
97
97
  if same_line?(parent, assignment_node)
98
98
  assignment_node.source_range
@@ -131,7 +131,7 @@ module RuboCop
131
131
 
132
132
  def next_sibling_parent_empty_or_else?(node)
133
133
  next_sibling = node.right_sibling
134
- return true if next_sibling.nil?
134
+ return true unless next_sibling.is_a?(AST::Node)
135
135
 
136
136
  parent = next_sibling.parent
137
137
 
@@ -145,8 +145,10 @@ module RuboCop
145
145
  next_sibling.if_type? && contains_guard_clause?(next_sibling)
146
146
  end
147
147
 
148
+ # rubocop:disable Metrics/CyclomaticComplexity
148
149
  def last_heredoc_argument(node)
149
150
  n = last_heredoc_argument_node(node)
151
+ n = n.children.first while n.respond_to?(:begin_type?) && n.begin_type?
150
152
 
151
153
  return n if heredoc?(n)
152
154
  return unless n.respond_to?(:arguments)
@@ -158,6 +160,7 @@ module RuboCop
158
160
 
159
161
  last_heredoc_argument(n.receiver) if n.respond_to?(:receiver)
160
162
  end
163
+ # rubocop:enable Metrics/CyclomaticComplexity
161
164
 
162
165
  def last_heredoc_argument_node(node)
163
166
  return node unless node.respond_to?(:if_branch)
@@ -189,7 +192,7 @@ module RuboCop
189
192
  end
190
193
 
191
194
  def offense_location(node)
192
- if node.loc.respond_to?(:end) && node.loc.end
195
+ if node.loc?(:end)
193
196
  node.loc.end
194
197
  else
195
198
  node
@@ -200,7 +203,7 @@ module RuboCop
200
203
  parent = node.parent
201
204
  return false unless parent
202
205
 
203
- parent.begin_type? && parent.single_line?
206
+ parent.begin_type? && same_line?(node, node.right_sibling)
204
207
  end
205
208
 
206
209
  # SimpleCov excludes code from the coverage report by wrapping it in `# :nocov:`:
@@ -22,8 +22,6 @@ module RuboCop
22
22
  # def b
23
23
  # end
24
24
  #
25
- # @example
26
- #
27
25
  # # good
28
26
  # def a
29
27
  # end
@@ -42,8 +40,6 @@ module RuboCop
42
40
  # def b
43
41
  # end
44
42
  #
45
- # @example
46
- #
47
43
  # # good
48
44
  # class A
49
45
  # end
@@ -65,8 +61,6 @@ module RuboCop
65
61
  # def b
66
62
  # end
67
63
  #
68
- # @example
69
- #
70
64
  # # good
71
65
  # module A
72
66
  # end
@@ -82,28 +76,40 @@ module RuboCop
82
76
  # # good
83
77
  # class ErrorA < BaseError; end
84
78
  # class ErrorB < BaseError; end
85
- # class ErrorC < BaseError; end
86
79
  #
87
80
  # # good
88
81
  # class ErrorA < BaseError; end
89
82
  #
90
83
  # class ErrorB < BaseError; end
91
84
  #
92
- # class ErrorC < BaseError; end
85
+ # # good - DefLikeMacros: [memoize]
86
+ # memoize :attribute_a
87
+ # memoize :attribute_b
88
+ #
89
+ # # good
90
+ # memoize :attribute_a
91
+ #
92
+ # memoize :attribute_b
93
93
  #
94
94
  # @example AllowAdjacentOneLineDefs: false
95
95
  #
96
96
  # # bad
97
97
  # class ErrorA < BaseError; end
98
98
  # class ErrorB < BaseError; end
99
- # class ErrorC < BaseError; end
100
99
  #
101
100
  # # good
102
101
  # class ErrorA < BaseError; end
103
102
  #
104
103
  # class ErrorB < BaseError; end
105
104
  #
106
- # class ErrorC < BaseError; end
105
+ # # bad - DefLikeMacros: [memoize]
106
+ # memoize :attribute_a
107
+ # memoize :attribute_b
108
+ #
109
+ # # good
110
+ # memoize :attribute_a
111
+ #
112
+ # memoize :attribute_b
107
113
  #
108
114
  class EmptyLineBetweenDefs < Base
109
115
  include RangeHelp
@@ -162,8 +168,10 @@ module RuboCop
162
168
  private
163
169
 
164
170
  def def_location(correction_node)
165
- if correction_node.block_type?
171
+ if correction_node.any_block_type?
166
172
  correction_node.source_range.join(correction_node.children.first.source_range)
173
+ elsif correction_node.send_type?
174
+ correction_node.source_range
167
175
  else
168
176
  correction_node.loc.keyword.join(correction_node.loc.name)
169
177
  end
@@ -181,12 +189,18 @@ module RuboCop
181
189
  end
182
190
 
183
191
  def macro_candidate?(node)
184
- node.block_type? && node.children.first.macro? &&
185
- empty_line_between_macros.include?(node.children.first.method_name)
192
+ macro_candidate = if node.any_block_type?
193
+ node.send_node
194
+ elsif node.send_type?
195
+ node
196
+ end
197
+ return false unless macro_candidate
198
+
199
+ macro_candidate.macro? && empty_line_between_macros.include?(macro_candidate.method_name)
186
200
  end
187
201
 
188
202
  def method_candidate?(node)
189
- cop_config['EmptyLineBetweenMethodDefs'] && (node.def_type? || node.defs_type?)
203
+ cop_config['EmptyLineBetweenMethodDefs'] && node.any_def_type?
190
204
  end
191
205
 
192
206
  def class_candidate?(node)
@@ -246,7 +260,9 @@ module RuboCop
246
260
  end
247
261
 
248
262
  def def_start(node)
249
- if node.block_type? && node.children.first.send_type?
263
+ node = node.send_node if node.any_block_type?
264
+
265
+ if node.send_type?
250
266
  node.source_range.line
251
267
  else
252
268
  node.loc.keyword.line
@@ -258,11 +274,7 @@ module RuboCop
258
274
  end
259
275
 
260
276
  def end_loc(node)
261
- if (node.def_type? || node.defs_type?) && node.endless?
262
- node.source_range.end
263
- else
264
- node.loc.end
265
- end
277
+ node.source_range.end
266
278
  end
267
279
 
268
280
  def autocorrect_remove_lines(corrector, newline_pos, count)
@@ -283,6 +295,8 @@ module RuboCop
283
295
  case node.type
284
296
  when :def, :defs
285
297
  :method
298
+ when :numblock, :itblock
299
+ :block
286
300
  else
287
301
  node.type
288
302
  end