rubocop-ast 0.1.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 +4 -4
- data/README.md +9 -5
- data/lib/rubocop/ast.rb +2 -1
- data/lib/rubocop/ast/builder.rb +3 -1
- data/lib/rubocop/ast/ext/range.rb +28 -0
- data/lib/rubocop/ast/node.rb +23 -6
- data/lib/rubocop/ast/node/array_node.rb +2 -8
- data/lib/rubocop/ast/node/break_node.rb +1 -6
- data/lib/rubocop/ast/node/case_match_node.rb +3 -9
- data/lib/rubocop/ast/node/case_node.rb +13 -9
- data/lib/rubocop/ast/node/def_node.rb +4 -23
- data/lib/rubocop/ast/node/defined_node.rb +2 -0
- data/lib/rubocop/ast/node/float_node.rb +1 -0
- data/lib/rubocop/ast/node/hash_node.rb +21 -8
- data/lib/rubocop/ast/node/if_node.rb +7 -14
- data/lib/rubocop/ast/node/index_node.rb +5 -3
- data/lib/rubocop/ast/node/indexasgn_node.rb +5 -3
- data/lib/rubocop/ast/node/int_node.rb +1 -0
- data/lib/rubocop/ast/node/lambda_node.rb +10 -3
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -7
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +55 -0
- data/lib/rubocop/ast/node/next_node.rb +12 -0
- data/lib/rubocop/ast/node/pair_node.rb +2 -2
- data/lib/rubocop/ast/node/return_node.rb +1 -13
- data/lib/rubocop/ast/node/send_node.rb +7 -1
- data/lib/rubocop/ast/node/super_node.rb +2 -0
- data/lib/rubocop/ast/node/when_node.rb +3 -9
- data/lib/rubocop/ast/node/yield_node.rb +2 -0
- data/lib/rubocop/ast/node_pattern.rb +99 -86
- data/lib/rubocop/ast/processed_source.rb +54 -16
- data/lib/rubocop/ast/traversal.rb +1 -1
- data/lib/rubocop/ast/version.rb +1 -1
- metadata +9 -8
- data/lib/rubocop/ast/node/retry_node.rb +0 -17
@@ -71,20 +71,24 @@ module RuboCop
|
|
71
71
|
Digest::SHA1.hexdigest(@raw_source)
|
72
72
|
end
|
73
73
|
|
74
|
-
|
75
|
-
|
74
|
+
# @deprecated Use `comments.each`
|
75
|
+
def each_comment(&block)
|
76
|
+
comments.each(&block)
|
76
77
|
end
|
77
78
|
|
78
|
-
|
79
|
-
|
79
|
+
# @deprecated Use `comment_at_line`, `each_comment_in_lines`, or `comments.find`
|
80
|
+
def find_comment(&block)
|
81
|
+
comments.find(&block)
|
80
82
|
end
|
81
83
|
|
82
|
-
|
83
|
-
|
84
|
+
# @deprecated Use `tokens.each`
|
85
|
+
def each_token(&block)
|
86
|
+
tokens.each(&block)
|
84
87
|
end
|
85
88
|
|
86
|
-
|
87
|
-
|
89
|
+
# @deprecated Use `tokens.find`
|
90
|
+
def find_token(&block)
|
91
|
+
tokens.find(&block)
|
88
92
|
end
|
89
93
|
|
90
94
|
def file_path
|
@@ -95,12 +99,39 @@ module RuboCop
|
|
95
99
|
ast.nil?
|
96
100
|
end
|
97
101
|
|
98
|
-
|
99
|
-
|
102
|
+
# @return [Comment, nil] the comment at that line, if any.
|
103
|
+
def comment_at_line(line)
|
104
|
+
comment_index[line]
|
100
105
|
end
|
101
106
|
|
107
|
+
# @return [Boolean] if the given line number has a comment.
|
108
|
+
def line_with_comment?(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
|
121
|
+
end
|
122
|
+
|
123
|
+
# @return [Boolean] if any of the lines in the given `source_range` has a comment.
|
124
|
+
# Consider using `each_comment_in_lines` instead
|
125
|
+
def contains_comment?(source_range)
|
126
|
+
each_comment_in_lines(source_range.line..source_range.last_line).any?
|
127
|
+
end
|
128
|
+
# @deprecated use contains_comment?
|
129
|
+
alias commented? contains_comment?
|
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.
|
102
133
|
def comments_before_line(line)
|
103
|
-
|
134
|
+
each_comment_in_lines(0..line).to_a
|
104
135
|
end
|
105
136
|
|
106
137
|
def start_with?(string)
|
@@ -130,8 +161,10 @@ module RuboCop
|
|
130
161
|
|
131
162
|
private
|
132
163
|
|
133
|
-
def
|
134
|
-
@
|
164
|
+
def comment_index
|
165
|
+
@comment_index ||= {}.tap do |hash|
|
166
|
+
comments.each { |c| hash[c.location.line] = c }
|
167
|
+
end
|
135
168
|
end
|
136
169
|
|
137
170
|
def parse(source, ruby_version)
|
@@ -142,6 +175,9 @@ module RuboCop
|
|
142
175
|
@buffer.source = source
|
143
176
|
rescue EncodingError => e
|
144
177
|
@parser_error = e
|
178
|
+
@ast = nil
|
179
|
+
@comments = []
|
180
|
+
@tokens = []
|
145
181
|
return
|
146
182
|
end
|
147
183
|
|
@@ -151,13 +187,15 @@ module RuboCop
|
|
151
187
|
def tokenize(parser)
|
152
188
|
begin
|
153
189
|
ast, comments, tokens = parser.tokenize(@buffer)
|
154
|
-
|
155
|
-
ast.respond_to?(:complete!) && ast.complete!
|
190
|
+
ast ||= nil # force `false` to `nil`, see https://github.com/whitequark/parser/pull/722
|
156
191
|
rescue Parser::SyntaxError
|
157
192
|
# All errors are in diagnostics. No need to handle exception.
|
193
|
+
comments = []
|
194
|
+
tokens = []
|
158
195
|
end
|
159
196
|
|
160
|
-
|
197
|
+
ast&.complete!
|
198
|
+
tokens.map! { |t| Token.from_parser_token(t) }
|
161
199
|
|
162
200
|
[ast, comments, tokens]
|
163
201
|
end
|
@@ -34,7 +34,7 @@ module RuboCop
|
|
34
34
|
match_with_lvasgn begin kwbegin return
|
35
35
|
in_match match_alt
|
36
36
|
match_as array_pattern array_pattern_with_tail
|
37
|
-
hash_pattern const_pattern
|
37
|
+
hash_pattern const_pattern find_pattern
|
38
38
|
index indexasgn].freeze
|
39
39
|
SECOND_CHILD_ONLY = %i[lvasgn ivasgn cvasgn gvasgn optarg kwarg
|
40
40
|
kwoptarg].freeze
|
data/lib/rubocop/ast/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-ast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
8
8
|
- Jonas Arvidsson
|
9
9
|
- Yuji Nakayama
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-
|
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.
|
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.
|
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
|
@@ -125,7 +126,7 @@ metadata:
|
|
125
126
|
source_code_uri: https://github.com/rubocop-hq/rubocop-ast/
|
126
127
|
documentation_uri: https://docs.rubocop.org/rubocop-ast/
|
127
128
|
bug_tracker_uri: https://github.com/rubocop-hq/rubocop-ast/issues
|
128
|
-
post_install_message:
|
129
|
+
post_install_message:
|
129
130
|
rdoc_options: []
|
130
131
|
require_paths:
|
131
132
|
- lib
|
@@ -141,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
142
|
version: '0'
|
142
143
|
requirements: []
|
143
144
|
rubygems_version: 3.1.2
|
144
|
-
signing_key:
|
145
|
+
signing_key:
|
145
146
|
specification_version: 4
|
146
147
|
summary: RuboCop tools to deal with Ruby code AST.
|
147
148
|
test_files: []
|
@@ -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
|