rubocop-ast 1.29.0 → 1.31.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/lib/rubocop/ast/node/block_node.rb +18 -0
- data/lib/rubocop/ast/node/if_node.rb +1 -1
- data/lib/rubocop/ast/node.rb +2 -2
- data/lib/rubocop/ast/node_pattern/lexer.rex.rb +1 -2
- data/lib/rubocop/ast/node_pattern/node.rb +2 -2
- data/lib/rubocop/ast/node_pattern/parser.racc.rb +4 -2
- data/lib/rubocop/ast/processed_source.rb +81 -53
- data/lib/rubocop/ast/token.rb +1 -1
- data/lib/rubocop/ast/traversal.rb +1 -1
- data/lib/rubocop/ast/version.rb +1 -1
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e155ad03b7e113e566024f6e7618bd143831a7bcf238aa5d263eccd66d511bf1
|
4
|
+
data.tar.gz: ab734ac50a5888e3623b87f79824c489fe2406ae60e885092a000ecdabd52438
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a939ed43023a1cd7b408331f54d33c2ce03e3adbb6f43ee4ef1916da3455a5372c2d1560a4d88f30e64d37255656d93cfaf6d6ba08617b247e6af4c8d9a9c0d8
|
7
|
+
data.tar.gz: 697372a43782fb445340e3738ae88fd68710e85fb8dd75d8a7045056073750842339397435beb0a84a006315df99bba002bee438bc5074450b1eecf368c91eee
|
@@ -21,6 +21,24 @@ module RuboCop
|
|
21
21
|
node_parts[0]
|
22
22
|
end
|
23
23
|
|
24
|
+
# A shorthand for getting the first argument of this block.
|
25
|
+
# Equivalent to `arguments.first`.
|
26
|
+
#
|
27
|
+
# @return [Node, nil] the first argument of this block,
|
28
|
+
# or `nil` if there are no arguments
|
29
|
+
def first_argument
|
30
|
+
arguments[0]
|
31
|
+
end
|
32
|
+
|
33
|
+
# A shorthand for getting the last argument of this block.
|
34
|
+
# Equivalent to `arguments.last`.
|
35
|
+
#
|
36
|
+
# @return [Node, nil] the last argument of this block,
|
37
|
+
# or `nil` if there are no arguments
|
38
|
+
def last_argument
|
39
|
+
arguments[-1]
|
40
|
+
end
|
41
|
+
|
24
42
|
# The arguments of this block.
|
25
43
|
# Note that if the block has destructured arguments, `arguments` will
|
26
44
|
# return a `mlhs` node, whereas `argument_list` will return only
|
data/lib/rubocop/ast/node.rb
CHANGED
@@ -326,13 +326,13 @@ module RuboCop
|
|
326
326
|
# what class or module is this method/constant/etc definition in?
|
327
327
|
# returns nil if answer cannot be determined
|
328
328
|
ancestors = each_ancestor(:class, :module, :sclass, :casgn, :block)
|
329
|
-
result = ancestors.
|
329
|
+
result = ancestors.filter_map do |ancestor|
|
330
330
|
parent_module_name_part(ancestor) do |full_name|
|
331
331
|
return nil unless full_name
|
332
332
|
|
333
333
|
full_name
|
334
334
|
end
|
335
|
-
end.
|
335
|
+
end.reverse.join('::')
|
336
336
|
result.empty? ? 'Object' : result
|
337
337
|
end
|
338
338
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# encoding: UTF-8
|
3
3
|
#--
|
4
4
|
# This file is automatically generated. Do not modify it.
|
5
|
-
# Generated by: oedipus_lex version 2.6.
|
5
|
+
# Generated by: oedipus_lex version 2.6.2.
|
6
6
|
# Source: lib/rubocop/ast/node_pattern/lexer.rex
|
7
7
|
#++
|
8
8
|
|
@@ -70,7 +70,6 @@ class RuboCop::AST::NodePattern::LexerRex
|
|
70
70
|
yield
|
71
71
|
end
|
72
72
|
|
73
|
-
|
74
73
|
##
|
75
74
|
# The current scanner class. Must be overridden in subclasses.
|
76
75
|
|
@@ -207,7 +207,7 @@ module RuboCop
|
|
207
207
|
include ForbidInSeqHead
|
208
208
|
|
209
209
|
def arity
|
210
|
-
min, max = children.map
|
210
|
+
min, max = children.map { |child| child.arity_range.minmax }.transpose.map(&:sum)
|
211
211
|
min == max ? min || 0 : min..max # NOTE: || 0 for empty case, where min == max == nil.
|
212
212
|
end
|
213
213
|
|
@@ -223,7 +223,7 @@ module RuboCop
|
|
223
223
|
# Node class for `{ ... }`
|
224
224
|
class Union < Node
|
225
225
|
def arity
|
226
|
-
minima, maxima = children.map
|
226
|
+
minima, maxima = children.map { |child| child.arity_range.minmax }.transpose
|
227
227
|
min = minima.min
|
228
228
|
max = maxima.max
|
229
229
|
min == max ? min : min..max
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# DO NOT MODIFY!!!!
|
4
|
-
# This file is automatically generated by Racc 1.
|
5
|
-
# from Racc grammar file "".
|
4
|
+
# This file is automatically generated by Racc 1.7.3
|
5
|
+
# from Racc grammar file "parser.y".
|
6
6
|
#
|
7
7
|
|
8
8
|
require 'racc/parser.rb'
|
@@ -239,6 +239,7 @@ Racc_arg = [
|
|
239
239
|
racc_shift_n,
|
240
240
|
racc_reduce_n,
|
241
241
|
racc_use_result_var ]
|
242
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
242
243
|
|
243
244
|
Racc_token_to_s_table = [
|
244
245
|
"$end",
|
@@ -289,6 +290,7 @@ Racc_token_to_s_table = [
|
|
289
290
|
"opt_rest",
|
290
291
|
"rest",
|
291
292
|
"arg_list" ]
|
293
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
292
294
|
|
293
295
|
Racc_debug_parser = false
|
294
296
|
|
@@ -15,15 +15,23 @@ module RuboCop
|
|
15
15
|
INVALID_LEVELS = %i[error fatal].freeze
|
16
16
|
private_constant :INVALID_LEVELS
|
17
17
|
|
18
|
+
PARSER_ENGINES = %i[parser_whitequark parser_prism].freeze
|
19
|
+
private_constant :PARSER_ENGINES
|
20
|
+
|
18
21
|
attr_reader :path, :buffer, :ast, :comments, :tokens, :diagnostics,
|
19
|
-
:parser_error, :raw_source, :ruby_version
|
22
|
+
:parser_error, :raw_source, :ruby_version, :parser_engine
|
20
23
|
|
21
|
-
def self.from_file(path, ruby_version)
|
24
|
+
def self.from_file(path, ruby_version, parser_engine: :parser_whitequark)
|
22
25
|
file = File.read(path, mode: 'rb')
|
23
|
-
new(file, ruby_version, path)
|
26
|
+
new(file, ruby_version, path, parser_engine: parser_engine)
|
24
27
|
end
|
25
28
|
|
26
|
-
def initialize(source, ruby_version, path = nil)
|
29
|
+
def initialize(source, ruby_version, path = nil, parser_engine: :parser_whitequark)
|
30
|
+
unless PARSER_ENGINES.include?(parser_engine)
|
31
|
+
raise ArgumentError, 'The keyword argument `parser_engine` accepts ' \
|
32
|
+
"`parser` or `parser_prism`, but `#{parser_engine}` was passed."
|
33
|
+
end
|
34
|
+
|
27
35
|
# Defaults source encoding to UTF-8, regardless of the encoding it has
|
28
36
|
# been read with, which could be non-utf8 depending on the default
|
29
37
|
# external encoding.
|
@@ -33,9 +41,10 @@ module RuboCop
|
|
33
41
|
@path = path
|
34
42
|
@diagnostics = []
|
35
43
|
@ruby_version = ruby_version
|
44
|
+
@parser_engine = parser_engine
|
36
45
|
@parser_error = nil
|
37
46
|
|
38
|
-
parse(source, ruby_version)
|
47
|
+
parse(source, ruby_version, parser_engine)
|
39
48
|
end
|
40
49
|
|
41
50
|
def ast_with_comments
|
@@ -193,7 +202,7 @@ module RuboCop
|
|
193
202
|
end
|
194
203
|
end
|
195
204
|
|
196
|
-
def parse(source, ruby_version)
|
205
|
+
def parse(source, ruby_version, parser_engine)
|
197
206
|
buffer_name = @path || STRING_SOURCE_NAME
|
198
207
|
@buffer = Parser::Source::Buffer.new(buffer_name, 1)
|
199
208
|
|
@@ -207,7 +216,7 @@ module RuboCop
|
|
207
216
|
return
|
208
217
|
end
|
209
218
|
|
210
|
-
@ast, @comments, @tokens = tokenize(create_parser(ruby_version))
|
219
|
+
@ast, @comments, @tokens = tokenize(create_parser(ruby_version, parser_engine))
|
211
220
|
end
|
212
221
|
|
213
222
|
def tokenize(parser)
|
@@ -227,58 +236,77 @@ module RuboCop
|
|
227
236
|
end
|
228
237
|
|
229
238
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
230
|
-
def parser_class(ruby_version)
|
231
|
-
case
|
232
|
-
when
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
239
|
+
def parser_class(ruby_version, parser_engine)
|
240
|
+
case parser_engine
|
241
|
+
when :parser_whitequark
|
242
|
+
case ruby_version
|
243
|
+
when 1.9
|
244
|
+
require 'parser/ruby19'
|
245
|
+
Parser::Ruby19
|
246
|
+
when 2.0
|
247
|
+
require 'parser/ruby20'
|
248
|
+
Parser::Ruby20
|
249
|
+
when 2.1
|
250
|
+
require 'parser/ruby21'
|
251
|
+
Parser::Ruby21
|
252
|
+
when 2.2
|
253
|
+
require 'parser/ruby22'
|
254
|
+
Parser::Ruby22
|
255
|
+
when 2.3
|
256
|
+
require 'parser/ruby23'
|
257
|
+
Parser::Ruby23
|
258
|
+
when 2.4
|
259
|
+
require 'parser/ruby24'
|
260
|
+
Parser::Ruby24
|
261
|
+
when 2.5
|
262
|
+
require 'parser/ruby25'
|
263
|
+
Parser::Ruby25
|
264
|
+
when 2.6
|
265
|
+
require 'parser/ruby26'
|
266
|
+
Parser::Ruby26
|
267
|
+
when 2.7
|
268
|
+
require 'parser/ruby27'
|
269
|
+
Parser::Ruby27
|
270
|
+
when 2.8, 3.0
|
271
|
+
require 'parser/ruby30'
|
272
|
+
Parser::Ruby30
|
273
|
+
when 3.1
|
274
|
+
require 'parser/ruby31'
|
275
|
+
Parser::Ruby31
|
276
|
+
when 3.2
|
277
|
+
require 'parser/ruby32'
|
278
|
+
Parser::Ruby32
|
279
|
+
when 3.3
|
280
|
+
require 'parser/ruby33'
|
281
|
+
Parser::Ruby33
|
282
|
+
when 3.4
|
283
|
+
require 'parser/ruby34'
|
284
|
+
Parser::Ruby34
|
285
|
+
else
|
286
|
+
raise ArgumentError, "RuboCop found unknown Ruby version: #{ruby_version.inspect}"
|
287
|
+
end
|
288
|
+
when :parser_prism
|
289
|
+
require 'prism'
|
290
|
+
|
291
|
+
case ruby_version
|
292
|
+
when 3.3
|
293
|
+
require 'prism/translation/parser33'
|
294
|
+
Prism::Translation::Parser33
|
295
|
+
when 3.4
|
296
|
+
require 'prism/translation/parser34'
|
297
|
+
Prism::Translation::Parser34
|
298
|
+
else
|
299
|
+
raise ArgumentError, 'RuboCop supports target Ruby versions 3.3 and above with Prism. ' \
|
300
|
+
"Specified target Ruby version: #{ruby_version.inspect}"
|
301
|
+
end
|
274
302
|
end
|
275
303
|
end
|
276
304
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
277
305
|
|
278
|
-
def create_parser(ruby_version)
|
306
|
+
def create_parser(ruby_version, parser_engine)
|
279
307
|
builder = RuboCop::AST::Builder.new
|
280
308
|
|
281
|
-
parser_class(ruby_version).new(builder).tap do |parser|
|
309
|
+
parser_class(ruby_version, parser_engine).new(builder).tap do |parser|
|
282
310
|
# On JRuby there's a risk that we hang in tokenize() if we
|
283
311
|
# don't set the all errors as fatal flag. The problem is caused by a bug
|
284
312
|
# in Racc that is discussed in issue #93 of the whitequark/parser
|
data/lib/rubocop/ast/token.rb
CHANGED
data/lib/rubocop/ast/version.rb
CHANGED
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
|
+
version: 1.31.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:
|
13
|
+
date: 2024-02-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: parser
|
@@ -18,14 +18,28 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 3.
|
21
|
+
version: 3.3.0.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: 3.
|
28
|
+
version: 3.3.0.4
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: prism
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.24.0
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.24.0
|
29
43
|
description: " RuboCop's Node and NodePattern classes.\n"
|
30
44
|
email: rubocop@googlegroups.com
|
31
45
|
executables: []
|
@@ -149,14 +163,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
149
163
|
requirements:
|
150
164
|
- - ">="
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: 2.
|
166
|
+
version: 2.7.0
|
153
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
168
|
requirements:
|
155
169
|
- - ">="
|
156
170
|
- !ruby/object:Gem::Version
|
157
171
|
version: '0'
|
158
172
|
requirements: []
|
159
|
-
rubygems_version: 3.
|
173
|
+
rubygems_version: 3.3.7
|
160
174
|
signing_key:
|
161
175
|
specification_version: 4
|
162
176
|
summary: RuboCop tools to deal with Ruby code AST.
|