rubocop 1.71.0 → 1.71.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
  3. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -1
  4. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +1 -1
  5. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
  6. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
  7. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +229 -0
  8. data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
  9. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +1 -0
  10. data/lib/rubocop/cop/internal_affairs.rb +2 -0
  11. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -1
  12. data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
  13. data/lib/rubocop/cop/layout/class_structure.rb +2 -2
  14. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  15. data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
  16. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +7 -11
  17. data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
  18. data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -1
  19. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
  20. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +1 -1
  21. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +2 -2
  22. data/lib/rubocop/cop/layout/redundant_line_break.rb +6 -5
  23. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +1 -1
  24. data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
  25. data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
  26. data/lib/rubocop/cop/layout/space_after_comma.rb +1 -1
  27. data/lib/rubocop/cop/layout/space_after_semicolon.rb +1 -1
  28. data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
  29. data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
  30. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
  31. data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -3
  32. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
  33. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
  34. data/lib/rubocop/cop/lint/constant_reassignment.rb +2 -6
  35. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  36. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
  37. data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
  38. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -1
  39. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  40. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  41. data/lib/rubocop/cop/lint/missing_super.rb +2 -2
  42. data/lib/rubocop/cop/lint/nested_method_definition.rb +3 -3
  43. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  44. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
  45. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +1 -1
  46. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -5
  47. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  48. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
  49. data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
  50. data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
  51. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +1 -1
  52. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -1
  53. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  54. data/lib/rubocop/cop/lint/unreachable_loop.rb +1 -1
  55. data/lib/rubocop/cop/lint/useless_access_modifier.rb +4 -4
  56. data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
  57. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2 -2
  58. data/lib/rubocop/cop/lint/void.rb +2 -7
  59. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  60. data/lib/rubocop/cop/metrics/module_length.rb +1 -1
  61. data/lib/rubocop/cop/mixin/check_line_breakable.rb +5 -5
  62. data/lib/rubocop/cop/mixin/comments_help.rb +1 -1
  63. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +4 -4
  64. data/lib/rubocop/cop/mixin/hash_subset.rb +19 -1
  65. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
  66. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +22 -8
  67. data/lib/rubocop/cop/mixin/string_help.rb +1 -1
  68. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -1
  69. data/lib/rubocop/cop/naming/block_forwarding.rb +18 -14
  70. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +3 -3
  71. data/lib/rubocop/cop/style/access_modifier_declarations.rb +2 -4
  72. data/lib/rubocop/cop/style/arguments_forwarding.rb +38 -19
  73. data/lib/rubocop/cop/style/block_delimiters.rb +1 -1
  74. data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
  75. data/lib/rubocop/cop/style/combinable_defined.rb +1 -1
  76. data/lib/rubocop/cop/style/combinable_loops.rb +2 -2
  77. data/lib/rubocop/cop/style/concat_array_literals.rb +1 -1
  78. data/lib/rubocop/cop/style/conditional_assignment.rb +3 -3
  79. data/lib/rubocop/cop/style/documentation.rb +1 -1
  80. data/lib/rubocop/cop/style/double_negation.rb +3 -3
  81. data/lib/rubocop/cop/style/each_with_object.rb +2 -3
  82. data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
  83. data/lib/rubocop/cop/style/explicit_block_argument.rb +15 -2
  84. data/lib/rubocop/cop/style/hash_each_methods.rb +2 -5
  85. data/lib/rubocop/cop/style/hash_except.rb +15 -0
  86. data/lib/rubocop/cop/style/hash_slice.rb +15 -0
  87. data/lib/rubocop/cop/style/hash_syntax.rb +1 -1
  88. data/lib/rubocop/cop/style/identical_conditional_branches.rb +22 -3
  89. data/lib/rubocop/cop/style/if_unless_modifier.rb +3 -3
  90. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +1 -1
  91. data/lib/rubocop/cop/style/if_with_semicolon.rb +2 -2
  92. data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
  93. data/lib/rubocop/cop/style/inverse_methods.rb +6 -6
  94. data/lib/rubocop/cop/style/it_assignment.rb +1 -1
  95. data/lib/rubocop/cop/style/keyword_parameters_order.rb +1 -1
  96. data/lib/rubocop/cop/style/map_into_array.rb +1 -1
  97. data/lib/rubocop/cop/style/map_to_hash.rb +1 -1
  98. data/lib/rubocop/cop/style/map_to_set.rb +1 -1
  99. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +10 -13
  100. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  101. data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
  102. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
  103. data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
  104. data/lib/rubocop/cop/style/negated_if_else_condition.rb +1 -1
  105. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
  106. data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
  107. data/lib/rubocop/cop/style/parallel_assignment.rb +1 -5
  108. data/lib/rubocop/cop/style/parentheses_around_condition.rb +2 -2
  109. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  110. data/lib/rubocop/cop/style/proc.rb +1 -2
  111. data/lib/rubocop/cop/style/redundant_begin.rb +1 -1
  112. data/lib/rubocop/cop/style/redundant_condition.rb +2 -2
  113. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +6 -10
  114. data/lib/rubocop/cop/style/redundant_each.rb +1 -1
  115. data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
  116. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  117. data/lib/rubocop/cop/style/redundant_parentheses.rb +6 -6
  118. data/lib/rubocop/cop/style/redundant_self_assignment.rb +12 -27
  119. data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
  120. data/lib/rubocop/cop/style/redundant_string_escape.rb +2 -2
  121. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  122. data/lib/rubocop/cop/style/safe_navigation.rb +1 -1
  123. data/lib/rubocop/cop/style/semicolon.rb +1 -1
  124. data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
  125. data/lib/rubocop/cop/style/sole_nested_conditional.rb +1 -1
  126. data/lib/rubocop/cop/style/string_concatenation.rb +1 -1
  127. data/lib/rubocop/cop/style/string_literals.rb +1 -1
  128. data/lib/rubocop/cop/style/super_arguments.rb +4 -4
  129. data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
  130. data/lib/rubocop/cop/style/top_level_method_definition.rb +1 -1
  131. data/lib/rubocop/cop/style/while_until_modifier.rb +0 -1
  132. data/lib/rubocop/cop/style/yoda_expression.rb +1 -1
  133. data/lib/rubocop/cop/util.rb +2 -2
  134. data/lib/rubocop/cop/variable_force/variable.rb +14 -2
  135. data/lib/rubocop/cop/variable_force/variable_table.rb +3 -3
  136. data/lib/rubocop/rspec/support.rb +1 -2
  137. data/lib/rubocop/version.rb +1 -1
  138. metadata +9 -6
  139. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
@@ -123,7 +123,7 @@ module RuboCop
123
123
  end
124
124
 
125
125
  def call_like?(node)
126
- node.call_type? || node.zsuper_type? || node.super_type?
126
+ node.type?(:call, :zsuper, :super)
127
127
  end
128
128
 
129
129
  def insert_argument(node, corrector, block_name)
@@ -135,7 +135,13 @@ module RuboCop
135
135
  end
136
136
 
137
137
  def correct_call_node(node, corrector, block_name)
138
- corrector.insert_after(node, "(&#{block_name})")
138
+ new_arguments = if node.zsuper_type?
139
+ args = build_new_arguments_for_zsuper(node) << "&#{block_name}"
140
+ args.join(', ')
141
+ else
142
+ "&#{block_name}"
143
+ end
144
+ corrector.insert_after(node, "(#{new_arguments})")
139
145
  return unless node.parenthesized?
140
146
 
141
147
  args_begin = Util.args_begin(node)
@@ -144,6 +150,13 @@ module RuboCop
144
150
  corrector.remove(range)
145
151
  end
146
152
 
153
+ def build_new_arguments_for_zsuper(node)
154
+ def_node = node.each_ancestor(:def, :defs).first
155
+ def_node.arguments.map do |arg|
156
+ arg.optarg_type? ? arg.node_parts[0] : arg.source
157
+ end
158
+ end
159
+
147
160
  def block_body_range(block_node, send_node)
148
161
  range_between(send_node.source_range.end_pos, block_node.loc.end.end_pos)
149
162
  end
@@ -44,7 +44,7 @@ module RuboCop
44
44
 
45
45
  # @!method kv_each(node)
46
46
  def_node_matcher :kv_each, <<~PATTERN
47
- ({block numblock} $(call (call _ ${:keys :values}) :each) ...)
47
+ (any_block $(call (call _ ${:keys :values}) :each) ...)
48
48
  PATTERN
49
49
 
50
50
  # @!method each_arguments(node)
@@ -162,10 +162,7 @@ module RuboCop
162
162
 
163
163
  def use_array_converter_method_as_preceding?(node)
164
164
  return false unless (preceding_method = node.children.first.children.first)
165
- unless preceding_method.call_type? ||
166
- preceding_method.block_type? || preceding_method.numblock_type?
167
- return false
168
- end
165
+ return false unless preceding_method.type?(:call, :any_block)
169
166
 
170
167
  ARRAY_CONVERTER_METHODS.include?(preceding_method.method_name)
171
168
  end
@@ -32,6 +32,21 @@ module RuboCop
32
32
  # {foo: 1, bar: 2, baz: 3}.select {|k, v| !%i[bar].include?(k) }
33
33
  # {foo: 1, bar: 2, baz: 3}.filter {|k, v| !%i[bar].include?(k) }
34
34
  #
35
+ # # good
36
+ # {foo: 1, bar: 2, baz: 3}.except(:bar)
37
+ #
38
+ # @example AllCops:ActiveSupportExtensionsEnabled: false (default)
39
+ #
40
+ # # good
41
+ # {foo: 1, bar: 2, baz: 3}.reject {|k, v| !%i[bar].exclude?(k) }
42
+ # {foo: 1, bar: 2, baz: 3}.select {|k, v| %i[bar].exclude?(k) }
43
+ #
44
+ # # good
45
+ # {foo: 1, bar: 2, baz: 3}.reject {|k, v| k.in?(%i[bar]) }
46
+ # {foo: 1, bar: 2, baz: 3}.select {|k, v| !k.in?(%i[bar]) }
47
+ #
48
+ # @example AllCops:ActiveSupportExtensionsEnabled: true
49
+ #
35
50
  # # bad
36
51
  # {foo: 1, bar: 2, baz: 3}.reject {|k, v| !%i[bar].exclude?(k) }
37
52
  # {foo: 1, bar: 2, baz: 3}.select {|k, v| %i[bar].exclude?(k) }
@@ -32,6 +32,21 @@ module RuboCop
32
32
  # {foo: 1, bar: 2, baz: 3}.reject {|k, v| !%i[bar].include?(k) }
33
33
  # {foo: 1, bar: 2, baz: 3}.filter {|k, v| %i[bar].include?(k) }
34
34
  #
35
+ # # good
36
+ # {foo: 1, bar: 2, baz: 3}.slice(:bar)
37
+ #
38
+ # @example AllCops:ActiveSupportExtensionsEnabled: false (default)
39
+ #
40
+ # # good
41
+ # {foo: 1, bar: 2, baz: 3}.select {|k, v| !%i[bar].exclude?(k) }
42
+ # {foo: 1, bar: 2, baz: 3}.reject {|k, v| %i[bar].exclude?(k) }
43
+ #
44
+ # # good
45
+ # {foo: 1, bar: 2, baz: 3}.select {|k, v| k.in?(%i[bar]) }
46
+ # {foo: 1, bar: 2, baz: 3}.reject {|k, v| !k.in?(%i[bar]) }
47
+ #
48
+ # @example AllCops:ActiveSupportExtensionsEnabled: true
49
+ #
35
50
  # # bad
36
51
  # {foo: 1, bar: 2, baz: 3}.select {|k, v| !%i[bar].exclude?(k) }
37
52
  # {foo: 1, bar: 2, baz: 3}.reject {|k, v| %i[bar].exclude?(k) }
@@ -209,7 +209,7 @@ module RuboCop
209
209
  end
210
210
 
211
211
  def word_symbol_pair?(pair)
212
- return false unless pair.key.sym_type? || pair.key.dsym_type?
212
+ return false unless pair.key.type?(:sym, :dsym)
213
213
 
214
214
  acceptable_19_syntax_symbol?(pair.key.source)
215
215
  end
@@ -203,17 +203,36 @@ module RuboCop
203
203
  corrector.remove(range)
204
204
  next if inserted_expression
205
205
 
206
- if insert_position == :after_condition
207
- corrector.insert_after(node, "\n#{expression.source}")
206
+ if node.parent&.assignment?
207
+ correct_assignment(corrector, node, expression, insert_position)
208
208
  else
209
- corrector.insert_before(node, "#{expression.source}\n")
209
+ correct_no_assignment(corrector, node, expression, insert_position)
210
210
  end
211
+
211
212
  inserted_expression = true
212
213
  end
213
214
  end
214
215
  end
215
216
  # rubocop:enable Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
216
217
 
218
+ def correct_assignment(corrector, node, expression, insert_position)
219
+ if insert_position == :after_condition
220
+ assignment = node.parent.source_range.with(end_pos: node.source_range.begin_pos)
221
+ corrector.remove(assignment)
222
+ corrector.insert_after(node, "\n#{assignment.source}#{expression.source}")
223
+ else
224
+ corrector.insert_before(node.parent, "#{expression.source}\n")
225
+ end
226
+ end
227
+
228
+ def correct_no_assignment(corrector, node, expression, insert_position)
229
+ if insert_position == :after_condition
230
+ corrector.insert_after(node, "\n#{expression.source}")
231
+ else
232
+ corrector.insert_before(node, "#{expression.source}\n")
233
+ end
234
+ end
235
+
217
236
  def last_child_of_parent?(node)
218
237
  return true unless (parent = node.parent)
219
238
 
@@ -103,7 +103,7 @@ module RuboCop
103
103
 
104
104
  def defined_argument_is_undefined?(if_node, defined_node)
105
105
  defined_argument = defined_node.first_argument
106
- return false unless defined_argument.lvar_type? || defined_argument.send_type?
106
+ return false unless defined_argument.type?(:lvar, :send)
107
107
 
108
108
  if_node.left_siblings.none? do |sibling|
109
109
  sibling.respond_to?(:lvasgn_type?) && sibling.lvasgn_type? &&
@@ -112,11 +112,11 @@ module RuboCop
112
112
  end
113
113
 
114
114
  def pattern_matching_nodes(condition)
115
- if condition.match_pattern_type? || condition.match_pattern_p_type?
115
+ if condition.type?(:match_pattern, :match_pattern_p)
116
116
  [condition]
117
117
  else
118
118
  condition.each_descendant.select do |node|
119
- node.match_pattern_type? || node.match_pattern_p_type?
119
+ node.type?(:match_pattern, :match_pattern_p)
120
120
  end
121
121
  end
122
122
  end
@@ -67,7 +67,7 @@ module RuboCop
67
67
 
68
68
  # @!method if_with_boolean_literal_branches?(node)
69
69
  def_node_matcher :if_with_boolean_literal_branches?, <<~PATTERN
70
- (if #return_boolean_value? {(true) (false) | (false) (true)})
70
+ (if #return_boolean_value? <true false>)
71
71
  PATTERN
72
72
  # @!method double_negative?(node)
73
73
  def_node_matcher :double_negative?, '(send (send _ :!) :!)'
@@ -42,7 +42,7 @@ module RuboCop
42
42
  def message(node)
43
43
  template = if require_newline?(node)
44
44
  MSG_NEWLINE
45
- elsif node.else_branch&.if_type? || node.else_branch&.begin_type? ||
45
+ elsif node.else_branch&.type?(:if, :begin) ||
46
46
  use_masgn_or_block_in_branches?(node)
47
47
  MSG_IF_ELSE
48
48
  else
@@ -66,7 +66,7 @@ module RuboCop
66
66
 
67
67
  def use_masgn_or_block_in_branches?(node)
68
68
  node.branches.compact.any? do |branch|
69
- branch.masgn_type? || branch.block_type? || branch.numblock_type?
69
+ branch.type?(:masgn, :any_block)
70
70
  end
71
71
  end
72
72
 
@@ -68,7 +68,7 @@ module RuboCop
68
68
  end
69
69
 
70
70
  def autocorrect(corrector, node)
71
- if node.while_post_type? || node.until_post_type?
71
+ if node.type?(:while_post, :until_post)
72
72
  replace_begin_end_with_modifier(corrector, node)
73
73
  elsif node.modifier_form?
74
74
  replace_source(corrector, node.source_range, modifier_replacement(node))
@@ -60,18 +60,18 @@ module RuboCop
60
60
  def_node_matcher :inverse_candidate?, <<~PATTERN
61
61
  {
62
62
  (send $(call $(...) $_ $...) :!)
63
- (send ({block numblock} $(call $(...) $_) $...) :!)
63
+ (send (any_block $(call $(...) $_) $...) :!)
64
64
  (send (begin $(call $(...) $_ $...)) :!)
65
65
  }
66
66
  PATTERN
67
67
 
68
68
  # @!method inverse_block?(node)
69
69
  def_node_matcher :inverse_block?, <<~PATTERN
70
- ({block numblock} $(call (...) $_) ... { $(call ... :!)
71
- $(send (...) {:!= :!~} ...)
72
- (begin ... $(call ... :!))
73
- (begin ... $(send (...) {:!= :!~} ...))
74
- })
70
+ (any_block $(call (...) $_) ... { $(call ... :!)
71
+ $(send (...) {:!= :!~} ...)
72
+ (begin ... $(call ... :!))
73
+ (begin ... $(send (...) {:!= :!~} ...))
74
+ })
75
75
  PATTERN
76
76
 
77
77
  def on_send(node)
@@ -26,7 +26,7 @@ module RuboCop
26
26
 
27
27
  def on_lvasgn(node)
28
28
  return unless node.name == :it
29
- return unless node.each_ancestor(:block, :numblock).any?
29
+ return unless node.each_ancestor(:any_block).any?
30
30
 
31
31
  add_offense(node.loc.name)
32
32
  end
@@ -57,7 +57,7 @@ module RuboCop
57
57
 
58
58
  def append_newline_to_last_kwoptarg(arguments, corrector)
59
59
  last_argument = arguments.last
60
- return if last_argument.kwrestarg_type? || last_argument.blockarg_type?
60
+ return if last_argument.type?(:kwrestarg, :blockarg)
61
61
 
62
62
  last_kwoptarg = arguments.reverse.find(&:kwoptarg_type?)
63
63
  corrector.insert_after(last_kwoptarg, "\n") unless arguments.parent.block_type?
@@ -72,7 +72,7 @@ module RuboCop
72
72
  def_node_matcher :each_block_with_push?, <<-PATTERN
73
73
  [
74
74
  ^({begin kwbegin block} ...)
75
- ({block numblock} (send !{nil? self} :each) _
75
+ (any_block (send !{nil? self} :each) _
76
76
  (send (lvar _) {:<< :push :append} #suitable_argument_node?))
77
77
  ]
78
78
  PATTERN
@@ -40,7 +40,7 @@ module RuboCop
40
40
  # @!method map_to_h(node)
41
41
  def_node_matcher :map_to_h, <<~PATTERN
42
42
  {
43
- $(call ({block numblock} $(call _ {:map :collect}) ...) :to_h)
43
+ $(call (any_block $(call _ {:map :collect}) ...) :to_h)
44
44
  $(call $(call _ {:map :collect} (block_pass sym)) :to_h)
45
45
  }
46
46
  PATTERN
@@ -33,7 +33,7 @@ module RuboCop
33
33
  # @!method map_to_set?(node)
34
34
  def_node_matcher :map_to_set?, <<~PATTERN
35
35
  {
36
- $(call ({block numblock} $(call _ {:map :collect}) ...) :to_set)
36
+ $(call (any_block $(call _ {:map :collect}) ...) :to_set)
37
37
  $(call $(call _ {:map :collect} (block_pass sym)) :to_set)
38
38
  }
39
39
  PATTERN
@@ -111,9 +111,7 @@ module RuboCop
111
111
  parent = node.parent&.block_type? ? node.parent.parent : node.parent
112
112
  return false unless parent
113
113
 
114
- parent.pair_type? ||
115
- parent.array_type? ||
116
- parent.range_type? ||
114
+ parent.type?(:pair, :array, :range) ||
117
115
  splat?(parent) ||
118
116
  ternary_if?(parent)
119
117
  end
@@ -128,14 +126,14 @@ module RuboCop
128
126
  end
129
127
 
130
128
  def call_in_optional_arguments?(node)
131
- node.parent && (node.parent.optarg_type? || node.parent.kwoptarg_type?)
129
+ node.parent&.type?(:optarg, :kwoptarg)
132
130
  end
133
131
 
134
132
  def call_in_single_line_inheritance?(node)
135
133
  node.parent&.class_type? && node.parent.single_line?
136
134
  end
137
135
 
138
- # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
136
+ # rubocop:disable Metrics/PerceivedComplexity
139
137
  def call_with_ambiguous_arguments?(node)
140
138
  call_with_braced_block?(node) ||
141
139
  call_in_argument_with_block?(node) ||
@@ -144,33 +142,32 @@ module RuboCop
144
142
  hash_literal_in_arguments?(node) ||
145
143
  ambiguous_range_argument?(node) ||
146
144
  node.descendants.any? do |n|
147
- n.forwarded_args_type? || n.block_type? || n.numblock_type? ||
145
+ n.type?(:forwarded_args, :any_block) ||
148
146
  ambiguous_literal?(n) || logical_operator?(n)
149
147
  end
150
148
  end
151
- # rubocop:enable Metrics/AbcSize, Metrics/PerceivedComplexity
149
+ # rubocop:enable Metrics/PerceivedComplexity
152
150
 
153
151
  def call_with_braced_block?(node)
154
- (node.call_type? || node.super_type?) && node.block_node&.braces?
152
+ node.type?(:call, :super) && node.block_node&.braces?
155
153
  end
156
154
 
157
155
  def call_in_argument_with_block?(node)
158
156
  parent = node.parent&.block_type? && node.parent.parent
159
157
  return false unless parent
160
158
 
161
- parent.call_type? || parent.super_type? || parent.yield_type?
159
+ parent.type?(:call, :super, :yield)
162
160
  end
163
161
 
164
162
  def call_as_argument_or_chain?(node)
165
- node.parent &&
166
- (node.parent.call_type? || node.parent.super_type? || node.parent.yield_type?) &&
163
+ node.parent&.type?(:call, :super, :yield) &&
167
164
  !assigned_before?(node.parent, node)
168
165
  end
169
166
 
170
167
  def call_in_match_pattern?(node)
171
168
  return false unless (parent = node.parent)
172
169
 
173
- parent.match_pattern_type? || parent.match_pattern_p_type?
170
+ parent.type?(:match_pattern, :match_pattern_p)
174
171
  end
175
172
 
176
173
  def hash_literal_in_arguments?(node)
@@ -205,7 +202,7 @@ module RuboCop
205
202
  end
206
203
 
207
204
  def splat?(node)
208
- node.splat_type? || node.kwsplat_type? || node.block_pass_type?
205
+ node.type?(:splat, :kwsplat, :block_pass)
209
206
  end
210
207
 
211
208
  def ternary_if?(node)
@@ -40,10 +40,8 @@ module RuboCop
40
40
  def on_send(node)
41
41
  return if ignored_node?(node)
42
42
 
43
- receiver = node.receiver
44
-
45
- return unless (receiver&.block_type? || receiver&.numblock_type?) &&
46
- receiver.loc.end.is?('end')
43
+ return unless (receiver = node.receiver)
44
+ return unless receiver.any_block_type? && receiver.loc.end.is?('end')
47
45
 
48
46
  range = range_between(receiver.loc.end.begin_pos, node.source_range.end_pos)
49
47
 
@@ -168,7 +168,7 @@ module RuboCop
168
168
 
169
169
  def anonymous_arguments?(node)
170
170
  return true if node.arguments.any? do |arg|
171
- arg.forward_arg_type? || arg.restarg_type? || arg.kwrestarg_type?
171
+ arg.type?(:forward_arg, :restarg, :kwrestarg)
172
172
  end
173
173
  return false unless (last_argument = node.last_argument)
174
174
 
@@ -31,7 +31,7 @@ module RuboCop
31
31
  node.send_node.each_node(:send, :csend) do |send_node|
32
32
  receiver = send_node.receiver
33
33
 
34
- next unless (receiver&.block_type? || receiver&.numblock_type?) && receiver&.multiline?
34
+ next unless receiver&.any_block_type? && receiver.multiline?
35
35
 
36
36
  range = range_between(receiver.loc.end.begin_pos, node.send_node.source_range.end_pos)
37
37
 
@@ -197,7 +197,7 @@ module RuboCop
197
197
  end
198
198
 
199
199
  def frozen_regexp_or_range_literals?(node)
200
- target_ruby_version >= 3.0 && (node.regexp_type? || node.range_type?)
200
+ target_ruby_version >= 3.0 && node.type?(:regexp, :range)
201
201
  end
202
202
 
203
203
  def requires_parentheses?(node)
@@ -74,7 +74,7 @@ module RuboCop
74
74
  end
75
75
 
76
76
  def unwrap_begin_nodes(node)
77
- node = node.children.first while node && (node.begin_type? || node.kwbegin_type?)
77
+ node = node.children.first while node&.type?(:begin, :kwbegin)
78
78
 
79
79
  node
80
80
  end
@@ -35,7 +35,7 @@ module RuboCop
35
35
  def on_send(node)
36
36
  return unless node.parenthesized?
37
37
 
38
- node.each_child_node(:send, :csend) do |nested|
38
+ node.each_child_node(:call) do |nested|
39
39
  next if allowed_omission?(nested)
40
40
 
41
41
  message = format(MSG, source: nested.source)
@@ -61,7 +61,7 @@ module RuboCop
61
61
  def custom_class_or_module_definition?(node)
62
62
  parent = node.parent
63
63
 
64
- (parent.class_type? || parent.module_type?) && node.left_siblings.empty?
64
+ parent.type?(:class, :module) && node.left_siblings.empty?
65
65
  end
66
66
  end
67
67
  end
@@ -69,11 +69,7 @@ module RuboCop
69
69
  elements = Array(node).compact
70
70
 
71
71
  # Account for edge case of `Constant::CONSTANT`
72
- !node.array_type? || return_of_method_call?(node) || elements.any?(&:splat_type?)
73
- end
74
-
75
- def return_of_method_call?(node)
76
- node.block_type? || node.send_type?
72
+ !node.array_type? || elements.any?(&:splat_type?)
77
73
  end
78
74
 
79
75
  def assignment_corrector(node, rhs, order)
@@ -94,8 +94,8 @@ module RuboCop
94
94
  end
95
95
 
96
96
  def require_parentheses?(node, condition_body)
97
- return false if !node.while_type? && !node.until_type?
98
- return false if !condition_body.block_type? && !condition_body.numblock_type?
97
+ return false unless node.type?(:while, :until)
98
+ return false unless condition_body.any_block_type?
99
99
 
100
100
  condition_body.send_node.block_literal? && condition_body.keywords?
101
101
  end
@@ -99,7 +99,7 @@ module RuboCop
99
99
  def string_source(node)
100
100
  if node.is_a?(String)
101
101
  node.scrub
102
- elsif node.respond_to?(:type) && (node.str_type? || node.sym_type?)
102
+ elsif node.respond_to?(:type) && node.type?(:str, :sym)
103
103
  node.source
104
104
  end
105
105
  end
@@ -19,8 +19,7 @@ module RuboCop
19
19
  MSG = 'Use `proc` instead of `Proc.new`.'
20
20
 
21
21
  # @!method proc_new?(node)
22
- def_node_matcher :proc_new?,
23
- '({block numblock} $(send (const {nil? cbase} :Proc) :new) ...)'
22
+ def_node_matcher :proc_new?, '(any_block $(send (const {nil? cbase} :Proc) :new) ...)'
24
23
 
25
24
  def on_block(node)
26
25
  proc_new?(node) do |block_method|
@@ -185,7 +185,7 @@ module RuboCop
185
185
  def contain_rescue_or_ensure?(node)
186
186
  first_child = node.children.first
187
187
 
188
- first_child.rescue_type? || first_child.ensure_type?
188
+ first_child.type?(:rescue, :ensure)
189
189
  end
190
190
 
191
191
  def valid_context_using_only_begin?(node)
@@ -157,7 +157,7 @@ module RuboCop
157
157
  end
158
158
 
159
159
  def asgn_type?(node)
160
- node.lvasgn_type? || node.ivasgn_type? || node.cvasgn_type? || node.gvasgn_type?
160
+ node.type?(:lvasgn, :ivasgn, :cvasgn, :gvasgn)
161
161
  end
162
162
 
163
163
  def branches_have_method?(node)
@@ -184,7 +184,7 @@ module RuboCop
184
184
  return false unless argument.hash_type?
185
185
  return false unless (node = argument.children.first)
186
186
 
187
- node.kwsplat_type? || node.forwarded_kwrestarg_type?
187
+ node.type?(:kwsplat, :forwarded_kwrestarg)
188
188
  end
189
189
 
190
190
  def if_source(if_branch, arithmetic_operation)
@@ -25,11 +25,11 @@ module RuboCop
25
25
  MSG = 'Remove the redundant double splat and braces, use keyword arguments directly.'
26
26
  MERGE_METHODS = %i[merge merge!].freeze
27
27
 
28
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
28
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
29
29
  def on_hash(node)
30
30
  return if node.pairs.empty? || node.pairs.any?(&:hash_rocket?)
31
31
  return unless (parent = node.parent)
32
- return unless parent.call_type? || parent.kwsplat_type?
32
+ return unless parent.type?(:call, :kwsplat)
33
33
  return unless mergeable?(parent)
34
34
  return unless (kwsplat = node.each_ancestor(:kwsplat).first)
35
35
  return if !node.braces? || allowed_double_splat_receiver?(kwsplat)
@@ -38,13 +38,13 @@ module RuboCop
38
38
  autocorrect(corrector, node, kwsplat)
39
39
  end
40
40
  end
41
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
41
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
42
42
 
43
43
  private
44
44
 
45
45
  def allowed_double_splat_receiver?(kwsplat)
46
46
  first_child = kwsplat.children.first
47
- return true if first_child.block_type? || first_child.numblock_type?
47
+ return true if first_child.any_block_type?
48
48
  return false unless first_child.call_type?
49
49
 
50
50
  root_receiver = root_receiver(first_child)
@@ -73,7 +73,7 @@ module RuboCop
73
73
  end
74
74
 
75
75
  def select_merge_method_nodes(kwsplat)
76
- extract_send_methods(kwsplat).select do |node|
76
+ kwsplat.each_descendant(:call).select do |node|
77
77
  mergeable?(node)
78
78
  end
79
79
  end
@@ -89,7 +89,7 @@ module RuboCop
89
89
  def autocorrect_merge_methods(corrector, merge_methods, kwsplat)
90
90
  range = range_of_merge_methods(merge_methods)
91
91
 
92
- new_kwsplat_arguments = extract_send_methods(kwsplat).map do |descendant|
92
+ new_kwsplat_arguments = kwsplat.each_descendant(:call).map do |descendant|
93
93
  convert_to_new_arguments(descendant)
94
94
  end
95
95
  new_source = new_kwsplat_arguments.compact.reverse.unshift('').join(', ')
@@ -104,10 +104,6 @@ module RuboCop
104
104
  begin_merge_method.loc.dot.begin.join(end_merge_method.source_range.end)
105
105
  end
106
106
 
107
- def extract_send_methods(kwsplat)
108
- kwsplat.each_descendant(:send, :csend)
109
- end
110
-
111
107
  def convert_to_new_arguments(node)
112
108
  return unless mergeable?(node)
113
109
 
@@ -65,7 +65,7 @@ module RuboCop
65
65
  return if node.last_argument&.block_pass_type?
66
66
 
67
67
  if node.method?(:each) && !node.parent&.block_type?
68
- ancestor_node = node.each_ancestor(:send, :csend).detect do |ancestor|
68
+ ancestor_node = node.each_ancestor(:call).detect do |ancestor|
69
69
  ancestor.receiver == node &&
70
70
  (RESTRICT_ON_SEND.include?(ancestor.method_name) || ancestor.method?(:reverse_each))
71
71
  end
@@ -51,7 +51,7 @@ module RuboCop
51
51
  end
52
52
 
53
53
  def string_message?(message)
54
- message.str_type? || message.dstr_type? || message.xstr_type?
54
+ message.type?(:str, :dstr, :xstr)
55
55
  end
56
56
 
57
57
  def fix_compact(node)
@@ -42,7 +42,7 @@ module RuboCop
42
42
  return true if node.immutable_literal?
43
43
  return true if frozen_string_literal?(node)
44
44
 
45
- target_ruby_version >= 3.0 && (node.regexp_type? || node.range_type?)
45
+ target_ruby_version >= 3.0 && node.type?(:regexp, :range)
46
46
  end
47
47
 
48
48
  def strip_parenthesis(node)