rubocop-ast 1.4.2 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b2fc7baac2fa613e95c79a9de02f42586585a1aaf0821a77f25ada657e653448
4
- data.tar.gz: d16431779a8cc2f5b795fe112de79a6e3628103b3e79fbea7213a8f9fa8da35e
3
+ metadata.gz: 9c8abd574665322b04af26974900562ce6224cdccb59fc1d8926971e39f0503f
4
+ data.tar.gz: 87096e43215bc016c8afc66194a93dc22567960e3bfebfaa99468e8736e35b36
5
5
  SHA512:
6
- metadata.gz: 2d3cb6e72ed495bae000b28312de6955cfce4eb0aa2a77af7fcb352bc9ea7b2fdb60e74a1b7e1f0ef70169dc6863e1536421606db3b0f197055263b4c3458158
7
- data.tar.gz: e9a57e796da77a05151a8c14974aba9737f409761ba48562bd848ad26c1a1c30ae0016ed821e1630d85757583e8e17ffccaa820f9e3f06b9fafa62f939ec9c6c
6
+ metadata.gz: 6a92317d5065b2b344c0130eaf37e77a410f4e0652cc30b9724ed44f0de05173213418bf9fd990b52de44e437547e90c0c6198f237c37ad8c8f99c9f4d0f2d9a
7
+ data.tar.gz: 9a304655d736e46e9f2f8a2094e4f0ac5ed7bcd1aa0ad19b16ad954f3b4d170d965203b24552478505454ac1f38650a393c8a0aede4c9412c083259756bf9ea1
data/lib/rubocop/ast.rb CHANGED
@@ -53,6 +53,7 @@ require_relative 'ast/node/forward_args_node'
53
53
  require_relative 'ast/node/float_node'
54
54
  require_relative 'ast/node/hash_node'
55
55
  require_relative 'ast/node/if_node'
56
+ require_relative 'ast/node/in_pattern_node'
56
57
  require_relative 'ast/node/index_node'
57
58
  require_relative 'ast/node/indexasgn_node'
58
59
  require_relative 'ast/node/int_node'
@@ -49,6 +49,7 @@ module RuboCop
49
49
  float: FloatNode,
50
50
  hash: HashNode,
51
51
  if: IfNode,
52
+ in_pattern: InPatternNode,
52
53
  int: IntNode,
53
54
  index: IndexNode,
54
55
  indexasgn: IndexasgnNode,
@@ -24,13 +24,26 @@ module RuboCop
24
24
  self
25
25
  end
26
26
 
27
- # Returns an array of all the when branches in the `case` statement.
27
+ # Returns an array of all the `in` pattern branches in the `case` statement.
28
28
  #
29
- # @return [Array<Node>] an array of `in_pattern` nodes
29
+ # @return [Array<InPatternNode>] an array of `in_pattern` nodes
30
30
  def in_pattern_branches
31
31
  node_parts[1...-1]
32
32
  end
33
33
 
34
+ # Returns an array of all the when branches in the `case` statement.
35
+ #
36
+ # @return [Array<Node, nil>] an array of the bodies of the `in` branches
37
+ # and the `else` (if any). Note that these bodies could be nil.
38
+ def branches
39
+ bodies = in_pattern_branches.map(&:body)
40
+ if else?
41
+ # `empty-else` node sets nil because it has no body.
42
+ else_branch.empty_else_type? ? bodies.push(nil) : bodies.push(else_branch)
43
+ end
44
+ bodies
45
+ end
46
+
34
47
  # Returns the else branch of the `case` statement, if any.
35
48
  #
36
49
  # @return [Node] the else branch node of the `case` statement
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module AST
5
+ # A node extension for `in` nodes. This will be used in place of a plain
6
+ # node when the builder constructs the AST, making its methods available
7
+ # to all `in` nodes within RuboCop.
8
+ class InPatternNode < Node
9
+ # Returns a node of the pattern in the `in` branch.
10
+ #
11
+ # @return [Node] a pattern node
12
+ def pattern
13
+ node_parts.first
14
+ end
15
+
16
+ # Returns the index of the `in` branch within the `case` statement.
17
+ #
18
+ # @return [Integer] the index of the `in` branch
19
+ def branch_index
20
+ parent.in_pattern_branches.index(self)
21
+ end
22
+
23
+ # Checks whether the `in` node has a `then` keyword.
24
+ #
25
+ # @return [Boolean] whether the `in` node has a `then` keyword
26
+ def then?
27
+ loc.begin&.is?('then')
28
+ end
29
+
30
+ # Returns the body of the `in` node.
31
+ #
32
+ # @return [Node, nil] the body of the `in` node
33
+ def body
34
+ node_parts[-1]
35
+ end
36
+ end
37
+ end
38
+ end
@@ -165,16 +165,34 @@ module RuboCop
165
165
  ARITHMETIC_OPERATORS.include?(method_name)
166
166
  end
167
167
 
168
- # Checks if this node is part of a chain of `def` modifiers.
168
+ # Checks if this node is part of a chain of `def` or `defs` modifiers.
169
169
  #
170
170
  # @example
171
171
  #
172
172
  # private def foo; end
173
173
  #
174
- # @return [Boolean] whether the dispatched method is a `def` modifier
175
- def def_modifier?
176
- send_type? &&
177
- adjacent_def_modifier? || each_child_node(:send).any?(&:def_modifier?)
174
+ # @return wether the `def|defs` node is a modifier or not.
175
+ # See also `def_modifier` that returns the node or `nil`
176
+ def def_modifier?(node = self)
177
+ !!def_modifier(node)
178
+ end
179
+
180
+ # Checks if this node is part of a chain of `def` or `defs` modifiers.
181
+ #
182
+ # @example
183
+ #
184
+ # private def foo; end
185
+ #
186
+ # @return [Node | nil] returns the `def|defs` node this is a modifier for,
187
+ # or `nil` if it isn't a def modifier
188
+ def def_modifier(node = self)
189
+ arg = node.children[2]
190
+
191
+ return unless node.send_type? && node.receiver.nil? && arg.is_a?(::AST::Node)
192
+
193
+ return arg if arg.def_type? || arg.defs_type?
194
+
195
+ def_modifier(arg)
178
196
  end
179
197
 
180
198
  # Checks whether this is a lambda. Some versions of parser parses
@@ -347,7 +347,7 @@ module RuboCop
347
347
  def compile_loop_advance(to = '+=1')
348
348
  # The `#{@cur_child_var} ||` is just to avoid unused variable warning
349
349
  "(#{@cur_child_var} = #{@seq_var}.children[#{@cur_index_var} #{to}]; " \
350
- "#{@cur_child_var} || true)"
350
+ "#{@cur_child_var} || true)"
351
351
  end
352
352
 
353
353
  def compile_loop(term)
@@ -52,7 +52,7 @@ module RuboCop
52
52
 
53
53
  detail = node.loc&.expression&.source || node.to_s
54
54
  raise NodePattern::Invalid, 'parse error, expected unary node pattern ' \
55
- "but got expression matching multiple elements: #{detail}"
55
+ "but got expression matching multiple elements: #{detail}"
56
56
  end
57
57
 
58
58
  # Overrides Racc::Parser's method:
@@ -236,6 +236,9 @@ module RuboCop
236
236
  when 2.8, 3.0
237
237
  require 'parser/ruby30'
238
238
  Parser::Ruby30
239
+ when 3.1
240
+ require 'parser/ruby31'
241
+ Parser::Ruby31
239
242
  else
240
243
  raise ArgumentError,
241
244
  "RuboCop found unknown Ruby version: #{ruby_version.inspect}"
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module AST
5
5
  module Version
6
- STRING = '1.4.2'
6
+ STRING = '1.8.0'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-ast
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-05-02 00:00:00.000000000 Z
13
+ date: 2021-07-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: parser
@@ -82,6 +82,7 @@ files:
82
82
  - lib/rubocop/ast/node/forward_args_node.rb
83
83
  - lib/rubocop/ast/node/hash_node.rb
84
84
  - lib/rubocop/ast/node/if_node.rb
85
+ - lib/rubocop/ast/node/in_pattern_node.rb
85
86
  - lib/rubocop/ast/node/index_node.rb
86
87
  - lib/rubocop/ast/node/indexasgn_node.rb
87
88
  - lib/rubocop/ast/node/int_node.rb