rubocop-ast 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d213ca265b42f0b66394057ee01a4a4573a28da98e7fc8caf52b5396fe098381
4
- data.tar.gz: 3a351df6a7f11cfdad47b7844eb0c0d9860e11e7fdd65f5e1405b1f0978081be
3
+ metadata.gz: 918c6017183db74497fc68166973904312bac7583f7752c2e55d1829574cb248
4
+ data.tar.gz: 1d04eb24fcbaec96b4bf0f17694018c31034fce4b3d81a9446ca98b3085e05a4
5
5
  SHA512:
6
- metadata.gz: 1771b173896909ca2e9b68acf312c7b73e2e7308f834fc6d79871bd84b5012622e8727ab3e0cf98ca985cab32a70e65c83b174ff1bf42a59bba942720625b198
7
- data.tar.gz: 57539ef58f3fc0722220759e4875524b43f9cd89a919d47429327f2ab3eaa2cfb0b35d9e275b05ac683f4f860bf5ac1986619fc16aa71c5a6b80ff2797683fa0
6
+ metadata.gz: 54f6882ebf057c76a9c97212a62b295d03baea85ec7c44e606b412e74edce01b6c4bba93dfafa341756009a8bfa2352c4b2b3b22bdbf689dac08ddd9395a9aff
7
+ data.tar.gz: '08e60b802e83dba688bf1a31be417f9880b640194cf3b966849dd2c211de5a1f3797c8a37be3f2d3aa466d6c994b10c31277b0ed3dc708b12fe1c2f7a0f15552'
data/README.md CHANGED
@@ -35,8 +35,9 @@ See the [docs site](https://docs.rubocop.org/rubocop-ast) for more details.
35
35
 
36
36
  ### Parser compatibility switches
37
37
 
38
- The main `RuboCop` gem uses [legacy AST output from parser](https://github.com/whitequark/parser/#usage).
39
- This gem is meant to be compatible with all settings. For example, to have `-> { ... }` emitted
38
+ This gem, by default, uses most [legacy AST output from parser](https://github.com/whitequark/parser/#usage), except for `emit_forward_arg` which is set to `true`.
39
+
40
+ The main `RuboCop` gem uses these defaults (and is currently only compatible with these), but this gem can be used separately from `RuboCop` and is meant to be compatible with all settings. For example, to have `-> { ... }` emitted
40
41
  as `LambdaNode` instead of `SendNode`:
41
42
 
42
43
  ```ruby
@@ -4,6 +4,7 @@ require 'parser'
4
4
  require 'forwardable'
5
5
  require 'set'
6
6
 
7
+ require_relative 'ast/ext/range'
7
8
  require_relative 'ast/node_pattern'
8
9
  require_relative 'ast/sexp'
9
10
  require_relative 'ast/node'
@@ -41,12 +42,12 @@ require_relative 'ast/node/int_node'
41
42
  require_relative 'ast/node/keyword_splat_node'
42
43
  require_relative 'ast/node/lambda_node'
43
44
  require_relative 'ast/node/module_node'
45
+ require_relative 'ast/node/next_node'
44
46
  require_relative 'ast/node/or_node'
45
47
  require_relative 'ast/node/pair_node'
46
48
  require_relative 'ast/node/range_node'
47
49
  require_relative 'ast/node/regexp_node'
48
50
  require_relative 'ast/node/resbody_node'
49
- require_relative 'ast/node/retry_node'
50
51
  require_relative 'ast/node/return_node'
51
52
  require_relative 'ast/node/self_class_node'
52
53
  require_relative 'ast/node/send_node'
@@ -14,6 +14,8 @@ module RuboCop
14
14
  # parser = Parser::Ruby25.new(builder)
15
15
  # root_node = parser.parse(buffer)
16
16
  class Builder < Parser::Builders::Default
17
+ self.emit_forward_arg = true
18
+
17
19
  NODE_MAP = {
18
20
  and: AndNode,
19
21
  alias: AliasNode,
@@ -42,11 +44,11 @@ module RuboCop
42
44
  kwsplat: KeywordSplatNode,
43
45
  lambda: LambdaNode,
44
46
  module: ModuleNode,
47
+ next: NextNode,
45
48
  or: OrNode,
46
49
  pair: PairNode,
47
50
  regexp: RegexpNode,
48
51
  resbody: ResbodyNode,
49
- retry: RetryNode,
50
52
  return: ReturnNode,
51
53
  csend: SendNode,
52
54
  send: SendNode,
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module AST
5
+ module Ext
6
+ # Extensions to Parser::AST::Range
7
+ module Range
8
+ # @return [Range] the range of line numbers for the node
9
+ # If `exclude_end` is `true`, then the range will be exclusive.
10
+ #
11
+ # Assume that `node` corresponds to the following array literal:
12
+ #
13
+ # [
14
+ # :foo,
15
+ # :bar
16
+ # ]
17
+ #
18
+ # node.loc.begin.line_span # => 1..1
19
+ # node.loc.expression.line_span(exclude_end: true) # => 1...4
20
+ def line_span(exclude_end: false)
21
+ ::Range.new(first_line, last_line, exclude_end)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ ::Parser::Source::Range.include ::RuboCop::AST::Ext::Range
@@ -6,12 +6,7 @@ module RuboCop
6
6
  # plain node when the builder constructs the AST, making its methods
7
7
  # available to all `break` nodes within RuboCop.
8
8
  class BreakNode < Node
9
- include MethodDispatchNode
10
- include ParameterizedNode
11
-
12
- def arguments
13
- []
14
- end
9
+ include ParameterizedNode::WrappedArguments
15
10
  end
16
11
  end
17
12
  end
@@ -16,12 +16,10 @@ module RuboCop
16
16
  end
17
17
 
18
18
  # @deprecated Use `in_pattern_branches.each`
19
- def each_in_pattern
19
+ def each_in_pattern(&block)
20
20
  return in_pattern_branches.to_enum(__method__) unless block_given?
21
21
 
22
- in_pattern_branches.each do |condition|
23
- yield condition
24
- end
22
+ in_pattern_branches.each(&block)
25
23
 
26
24
  self
27
25
  end
@@ -16,12 +16,10 @@ module RuboCop
16
16
  end
17
17
 
18
18
  # @deprecated Use `when_branches.each`
19
- def each_when
19
+ def each_when(&block)
20
20
  return when_branches.to_enum(__method__) unless block_given?
21
21
 
22
- when_branches.each do |condition|
23
- yield condition
24
- end
22
+ when_branches.each(&block)
25
23
 
26
24
  self
27
25
  end
@@ -33,6 +31,16 @@ module RuboCop
33
31
  node_parts[1...-1]
34
32
  end
35
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 when branches
37
+ # and the else (if any). Note that these bodies could be nil.
38
+ def branches
39
+ bodies = when_branches.map(&:body)
40
+ bodies.push(else_branch) if else?
41
+ bodies
42
+ end
43
+
36
44
  # Returns the else branch of the `case` statement, if any.
37
45
  #
38
46
  # @return [Node] the else branch node of the `case` statement
@@ -12,6 +12,8 @@ module RuboCop
12
12
  def node_parts
13
13
  [nil, :defined?, *to_a]
14
14
  end
15
+
16
+ alias arguments children
15
17
  end
16
18
  end
17
19
  end
@@ -6,6 +6,7 @@ module RuboCop
6
6
  # node when the builder constructs the AST, making its methods available to
7
7
  # all `float` nodes within RuboCop.
8
8
  class FloatNode < Node
9
+ include BasicLiteralNode
9
10
  include NumericNode
10
11
  end
11
12
  end
@@ -56,12 +56,10 @@ module RuboCop
56
56
  #
57
57
  # @return [self] if a block is given
58
58
  # @return [Enumerator] if no block is given
59
- def each_key
59
+ def each_key(&block)
60
60
  return pairs.map(&:key).to_enum unless block_given?
61
61
 
62
- pairs.map(&:key).each do |key|
63
- yield key
64
- end
62
+ pairs.map(&:key).each(&block)
65
63
 
66
64
  self
67
65
  end
@@ -82,12 +80,10 @@ module RuboCop
82
80
  #
83
81
  # @return [self] if a block is given
84
82
  # @return [Enumerator] if no block is given
85
- def each_value
83
+ def each_value(&block)
86
84
  return pairs.map(&:value).to_enum unless block_given?
87
85
 
88
- pairs.map(&:value).each do |value|
89
- yield value
90
- end
86
+ pairs.map(&:value).each(&block)
91
87
 
92
88
  self
93
89
  end
@@ -147,7 +147,7 @@ module RuboCop
147
147
  def branches
148
148
  branches = [if_branch]
149
149
 
150
- return branches unless else_branch
150
+ return branches unless else?
151
151
 
152
152
  other_branches = if elsif_conditional?
153
153
  else_branch.branches
@@ -158,12 +158,10 @@ module RuboCop
158
158
  end
159
159
 
160
160
  # @deprecated Use `branches.each`
161
- def each_branch
161
+ def each_branch(&block)
162
162
  return branches.to_enum(__method__) unless block_given?
163
163
 
164
- branches.each do |branch|
165
- yield branch
166
- end
164
+ branches.each(&block)
167
165
  end
168
166
  end
169
167
  end
@@ -17,7 +17,7 @@ module RuboCop
17
17
  # The main RuboCop runs in legacy mode; this node is only used
18
18
  # if user `AST::Builder.modernize` or `AST::Builder.emit_index=true`
19
19
  class IndexNode < Node
20
- include ParameterizedNode
20
+ include ParameterizedNode::RestArguments
21
21
  include MethodDispatchNode
22
22
 
23
23
  # For similarity with legacy mode
@@ -35,11 +35,13 @@ module RuboCop
35
35
  :[]
36
36
  end
37
37
 
38
+ private
39
+
38
40
  # An array containing the arguments of the dispatched method.
39
41
  #
40
42
  # @return [Array<Node>] the arguments of the dispatched method
41
- def arguments
42
- node_parts[1..-1]
43
+ def first_argument_index
44
+ 1
43
45
  end
44
46
  end
45
47
  end
@@ -19,7 +19,7 @@ module RuboCop
19
19
  # The main RuboCop runs in legacy mode; this node is only used
20
20
  # if user `AST::Builder.modernize` or `AST::Builder.emit_index=true`
21
21
  class IndexasgnNode < Node
22
- include ParameterizedNode
22
+ include ParameterizedNode::RestArguments
23
23
  include MethodDispatchNode
24
24
 
25
25
  # For similarity with legacy mode
@@ -37,11 +37,13 @@ module RuboCop
37
37
  :[]=
38
38
  end
39
39
 
40
+ private
41
+
40
42
  # An array containing the arguments of the dispatched method.
41
43
  #
42
44
  # @return [Array<Node>] the arguments of the dispatched method
43
- def arguments
44
- node_parts[1..-1]
45
+ def first_argument_index
46
+ 1
45
47
  end
46
48
  end
47
49
  end
@@ -6,6 +6,7 @@ module RuboCop
6
6
  # node when the builder constructs the AST, making its methods available to
7
7
  # all `int` nodes within RuboCop.
8
8
  class IntNode < Node
9
+ include BasicLiteralNode
9
10
  include NumericNode
10
11
  end
11
12
  end
@@ -21,7 +21,7 @@ module RuboCop
21
21
  # The main RuboCop runs in legacy mode; this node is only used
22
22
  # if user `AST::Builder.modernize` or `AST::Builder.emit_lambda=true`
23
23
  class LambdaNode < Node
24
- include ParameterizedNode
24
+ include ParameterizedNode::RestArguments
25
25
  include MethodDispatchNode
26
26
 
27
27
  # For similarity with legacy mode
@@ -44,14 +44,21 @@ module RuboCop
44
44
  false
45
45
  end
46
46
 
47
+ # For similarity with legacy mode
48
+ def receiver
49
+ nil
50
+ end
51
+
47
52
  # For similarity with legacy mode
48
53
  def method_name
49
54
  :lambda
50
55
  end
51
56
 
57
+ private
58
+
52
59
  # For similarity with legacy mode
53
- def arguments
54
- []
60
+ def first_argument_index
61
+ 2
55
62
  end
56
63
  end
57
64
  end
@@ -26,13 +26,6 @@ module RuboCop
26
26
  node_parts[1]
27
27
  end
28
28
 
29
- # An array containing the arguments of the dispatched method.
30
- #
31
- # @return [Array<Node>] the arguments of the dispatched method
32
- def arguments
33
- node_parts[2..-1]
34
- end
35
-
36
29
  # The `block` node associated with this method dispatch, if any.
37
30
  #
38
31
  # @return [BlockNode, nil] the `block` node associated with this method
@@ -2,6 +2,8 @@
2
2
 
3
3
  module RuboCop
4
4
  module AST
5
+ # Requires implementing `arguments`.
6
+ #
5
7
  # Common functionality for nodes that are parameterized:
6
8
  # `send`, `super`, `zsuper`, `def`, `defs`
7
9
  # and (modern only): `index`, `indexasgn`, `lambda`
@@ -57,6 +59,59 @@ module RuboCop
57
59
  arguments? &&
58
60
  (last_argument.block_pass_type? || last_argument.blockarg_type?)
59
61
  end
62
+
63
+ # A specialized `ParameterizedNode` for node that have a single child
64
+ # containing either `nil`, an argument, or a `begin` node with all the
65
+ # arguments
66
+ module WrappedArguments
67
+ include ParameterizedNode
68
+ # @return [Array] The arguments of the node.
69
+ def arguments
70
+ first = children.first
71
+ if first&.begin_type?
72
+ first.children
73
+ else
74
+ children
75
+ end
76
+ end
77
+ end
78
+
79
+ # A specialized `ParameterizedNode`.
80
+ # Requires implementing `first_argument_index`
81
+ # Implements `arguments` as `children[first_argument_index..-1]`
82
+ # and optimizes other calls
83
+ module RestArguments
84
+ include ParameterizedNode
85
+ # @return [Array] arguments, if any
86
+ def arguments
87
+ children[first_argument_index..-1]
88
+ end
89
+
90
+ # A shorthand for getting the first argument of the node.
91
+ # Equivalent to `arguments.first`.
92
+ #
93
+ # @return [Node, nil] the first argument of the node,
94
+ # or `nil` if there are no arguments
95
+ def first_argument
96
+ children[first_argument_index]
97
+ end
98
+
99
+ # A shorthand for getting the last argument of the node.
100
+ # Equivalent to `arguments.last`.
101
+ #
102
+ # @return [Node, nil] the last argument of the node,
103
+ # or `nil` if there are no arguments
104
+ def last_argument
105
+ children[-1] if arguments?
106
+ end
107
+
108
+ # Checks whether this node has any arguments.
109
+ #
110
+ # @return [Boolean] whether this node has any arguments
111
+ def arguments?
112
+ children.size > first_argument_index
113
+ end
114
+ end
60
115
  end
61
116
  end
62
117
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module AST
5
+ # A node extension for `next` nodes. This will be used in place of a
6
+ # plain node when the builder constructs the AST, making its methods
7
+ # available to all `next` nodes within RuboCop.
8
+ class NextNode < Node
9
+ include ParameterizedNode::WrappedArguments
10
+ end
11
+ end
12
+ end
@@ -32,7 +32,7 @@ module RuboCop
32
32
  #
33
33
  # @param [Boolean] with_spacing whether to include spacing
34
34
  # @return [String] the delimiter of the `pair`
35
- def delimiter(with_spacing = false)
35
+ def delimiter(*deprecated, with_spacing: deprecated.first)
36
36
  if with_spacing
37
37
  hash_rocket? ? SPACED_HASH_ROCKET : SPACED_COLON
38
38
  else
@@ -44,7 +44,7 @@ module RuboCop
44
44
  #
45
45
  # @param [Boolean] with_spacing whether to include spacing
46
46
  # @return [String] the inverse delimiter of the `pair`
47
- def inverse_delimiter(with_spacing = false)
47
+ def inverse_delimiter(*deprecated, with_spacing: deprecated.first)
48
48
  if with_spacing
49
49
  hash_rocket? ? SPACED_COLON : SPACED_HASH_ROCKET
50
50
  else
@@ -6,19 +6,7 @@ module RuboCop
6
6
  # plain node when the builder constructs the AST, making its methods
7
7
  # available to all `return` nodes within RuboCop.
8
8
  class ReturnNode < Node
9
- include MethodDispatchNode
10
- include ParameterizedNode
11
-
12
- # Returns the arguments of the `return`.
13
- #
14
- # @return [Array] The arguments of the `return`.
15
- def arguments
16
- if node_parts.one? && node_parts.first.begin_type?
17
- node_parts.first.children
18
- else
19
- node_parts
20
- end
21
- end
9
+ include ParameterizedNode::WrappedArguments
22
10
  end
23
11
  end
24
12
  end
@@ -6,13 +6,19 @@ module RuboCop
6
6
  # node when the builder constructs the AST, making its methods available
7
7
  # to all `send` nodes within RuboCop.
8
8
  class SendNode < Node
9
- include ParameterizedNode
9
+ include ParameterizedNode::RestArguments
10
10
  include MethodDispatchNode
11
11
 
12
12
  def_node_matcher :attribute_accessor?, <<~PATTERN
13
13
  [(send nil? ${:attr_reader :attr_writer :attr_accessor :attr} $...)
14
14
  (_ _ _ _ ...)]
15
15
  PATTERN
16
+
17
+ private
18
+
19
+ def first_argument_index
20
+ 2
21
+ end
16
22
  end
17
23
  end
18
24
  end
@@ -16,6 +16,8 @@ module RuboCop
16
16
  def node_parts
17
17
  [nil, :super, *to_a]
18
18
  end
19
+
20
+ alias arguments children
19
21
  end
20
22
  end
21
23
  end
@@ -14,12 +14,10 @@ module RuboCop
14
14
  end
15
15
 
16
16
  # @deprecated Use `conditions.each`
17
- def each_condition
17
+ def each_condition(&block)
18
18
  return conditions.to_enum(__method__) unless block_given?
19
19
 
20
- conditions.each do |condition|
21
- yield condition
22
- end
20
+ conditions.each(&block)
23
21
 
24
22
  self
25
23
  end
@@ -16,6 +16,8 @@ module RuboCop
16
16
  def node_parts
17
17
  [nil, :yield, *to_a]
18
18
  end
19
+
20
+ alias arguments children
19
21
  end
20
22
  end
21
23
  end
@@ -99,6 +99,7 @@ module RuboCop
99
99
  # # These arguments can be patterns themselves, in
100
100
  # # which case a matcher responding to === will be
101
101
  # # passed.
102
+ # '# comment' # comments are accepted at the end of lines
102
103
  #
103
104
  # You can nest arbitrarily deep:
104
105
  #
@@ -122,6 +123,8 @@ module RuboCop
122
123
  class Compiler
123
124
  SYMBOL = %r{:(?:[\w+@*/?!<>=~|%^-]+|\[\]=?)}.freeze
124
125
  IDENTIFIER = /[a-zA-Z_][a-zA-Z0-9_-]*/.freeze
126
+ COMMENT = /#\s.*$/.freeze
127
+
125
128
  META = Regexp.union(
126
129
  %w"( ) { } [ ] $< < > $... $ ! ^ ` ... + * ?"
127
130
  ).freeze
@@ -455,7 +458,6 @@ module RuboCop
455
458
  [0..Float::INFINITY, 'true']
456
459
  end
457
460
 
458
- # rubocop:disable Metrics/AbcSize
459
461
  # rubocop:disable Metrics/MethodLength
460
462
  def compile_any_order(capture_all = nil)
461
463
  rest = capture_rest = nil
@@ -475,7 +477,6 @@ module RuboCop
475
477
  end
476
478
  end
477
479
  # rubocop:enable Metrics/MethodLength
478
- # rubocop:enable Metrics/AbcSize
479
480
 
480
481
  def insure_same_captures(enum, what)
481
482
  return to_enum __method__, enum, what unless block_given?
@@ -790,7 +791,7 @@ module RuboCop
790
791
  end
791
792
 
792
793
  def self.tokens(pattern)
793
- pattern.scan(TOKEN).grep_v(ONLY_SEPARATOR)
794
+ pattern.gsub(COMMENT, '').scan(TOKEN).grep_v(ONLY_SEPARATOR)
794
795
  end
795
796
 
796
797
  # This method minimizes the closure for our method
@@ -72,23 +72,23 @@ module RuboCop
72
72
  end
73
73
 
74
74
  # @deprecated Use `comments.each`
75
- def each_comment
76
- comments.each { |comment| yield comment }
75
+ def each_comment(&block)
76
+ comments.each(&block)
77
77
  end
78
78
 
79
- # @deprecated Use `comments.find`
80
- def find_comment
81
- comments.find { |comment| yield comment }
79
+ # @deprecated Use `comment_at_line`, `each_comment_in_lines`, or `comments.find`
80
+ def find_comment(&block)
81
+ comments.find(&block)
82
82
  end
83
83
 
84
84
  # @deprecated Use `tokens.each`
85
- def each_token
86
- tokens.each { |token| yield token }
85
+ def each_token(&block)
86
+ tokens.each(&block)
87
87
  end
88
88
 
89
89
  # @deprecated Use `tokens.find`
90
- def find_token
91
- tokens.find { |token| yield token }
90
+ def find_token(&block)
91
+ tokens.find(&block)
92
92
  end
93
93
 
94
94
  def file_path
@@ -99,22 +99,39 @@ module RuboCop
99
99
  ast.nil?
100
100
  end
101
101
 
102
+ # @return [Comment, nil] the comment at that line, if any.
103
+ def comment_at_line(line)
104
+ comment_index[line]
105
+ end
106
+
102
107
  # @return [Boolean] if the given line number has a comment.
103
108
  def line_with_comment?(line)
104
- comment_lines.include?(line)
109
+ comment_index.include?(line)
110
+ end
111
+
112
+ # Enumerates on the comments contained with the given `line_range`
113
+ def each_comment_in_lines(line_range)
114
+ return to_enum(:each_comment_in_lines, line_range) unless block_given?
115
+
116
+ line_range.each do |line|
117
+ if (comment = comment_index[line])
118
+ yield comment
119
+ end
120
+ end
105
121
  end
106
122
 
107
123
  # @return [Boolean] if any of the lines in the given `source_range` has a comment.
124
+ # Consider using `each_comment_in_lines` instead
108
125
  def contains_comment?(source_range)
109
- (source_range.line..source_range.last_line).any? do |line|
110
- line_with_comment?(line)
111
- end
126
+ each_comment_in_lines(source_range.line..source_range.last_line).any?
112
127
  end
113
128
  # @deprecated use contains_comment?
114
129
  alias commented? contains_comment?
115
130
 
131
+ # @deprecated Use `each_comment_in_lines`
132
+ # Should have been called `comments_before_or_at_line`. Doubtful it has of any valid use.
116
133
  def comments_before_line(line)
117
- comments.select { |c| c.location.line <= line }
134
+ each_comment_in_lines(0..line).to_a
118
135
  end
119
136
 
120
137
  def start_with?(string)
@@ -144,8 +161,10 @@ module RuboCop
144
161
 
145
162
  private
146
163
 
147
- def comment_lines
148
- @comment_lines ||= comments.map { |c| c.location.line }
164
+ def comment_index
165
+ @comment_index ||= {}.tap do |hash|
166
+ comments.each { |c| hash[c.location.line] = c }
167
+ end
149
168
  end
150
169
 
151
170
  def parse(source, ruby_version)
@@ -156,6 +175,9 @@ module RuboCop
156
175
  @buffer.source = source
157
176
  rescue EncodingError => e
158
177
  @parser_error = e
178
+ @ast = nil
179
+ @comments = []
180
+ @tokens = []
159
181
  return
160
182
  end
161
183
 
@@ -165,13 +187,15 @@ module RuboCop
165
187
  def tokenize(parser)
166
188
  begin
167
189
  ast, comments, tokens = parser.tokenize(@buffer)
168
-
169
- ast.respond_to?(:complete!) && ast.complete!
190
+ ast ||= nil # force `false` to `nil`, see https://github.com/whitequark/parser/pull/722
170
191
  rescue Parser::SyntaxError
171
192
  # All errors are in diagnostics. No need to handle exception.
193
+ comments = []
194
+ tokens = []
172
195
  end
173
196
 
174
- tokens = tokens.map { |t| Token.from_parser_token(t) } if tokens
197
+ ast&.complete!
198
+ tokens.map! { |t| Token.from_parser_token(t) }
175
199
 
176
200
  [ast, comments, tokens]
177
201
  end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module AST
5
5
  module Version
6
- STRING = '0.2.0'
6
+ STRING = '0.3.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: 0.2.0
4
+ version: 0.3.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: 2020-07-19 00:00:00.000000000 Z
13
+ date: 2020-08-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: parser
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 2.7.0.1
21
+ version: 2.7.1.4
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: 2.7.0.1
28
+ version: 2.7.1.4
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: bundler
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -59,6 +59,7 @@ files:
59
59
  - lib/rubocop-ast.rb
60
60
  - lib/rubocop/ast.rb
61
61
  - lib/rubocop/ast/builder.rb
62
+ - lib/rubocop/ast/ext/range.rb
62
63
  - lib/rubocop/ast/node.rb
63
64
  - lib/rubocop/ast/node/alias_node.rb
64
65
  - lib/rubocop/ast/node/and_node.rb
@@ -94,12 +95,12 @@ files:
94
95
  - lib/rubocop/ast/node/mixin/parameterized_node.rb
95
96
  - lib/rubocop/ast/node/mixin/predicate_operator_node.rb
96
97
  - lib/rubocop/ast/node/module_node.rb
98
+ - lib/rubocop/ast/node/next_node.rb
97
99
  - lib/rubocop/ast/node/or_node.rb
98
100
  - lib/rubocop/ast/node/pair_node.rb
99
101
  - lib/rubocop/ast/node/range_node.rb
100
102
  - lib/rubocop/ast/node/regexp_node.rb
101
103
  - lib/rubocop/ast/node/resbody_node.rb
102
- - lib/rubocop/ast/node/retry_node.rb
103
104
  - lib/rubocop/ast/node/return_node.rb
104
105
  - lib/rubocop/ast/node/self_class_node.rb
105
106
  - lib/rubocop/ast/node/send_node.rb
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module AST
5
- # A node extension for `retry` nodes. This will be used in place of a
6
- # plain node when the builder constructs the AST, making its methods
7
- # available to all `retry` nodes within RuboCop.
8
- class RetryNode < Node
9
- include MethodDispatchNode
10
- include ParameterizedNode
11
-
12
- def arguments
13
- []
14
- end
15
- end
16
- end
17
- end