rubocop-ast 1.24.1 → 1.29.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/builder.rb +71 -70
- data/lib/rubocop/ast/ext/range.rb +2 -2
- data/lib/rubocop/ast/node/csend_node.rb +2 -2
- data/lib/rubocop/ast/node/keyword_splat_node.rb +10 -3
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +17 -6
- data/lib/rubocop/ast/node.rb +8 -2
- data/lib/rubocop/ast/node_pattern/compiler/atom_subcompiler.rb +1 -1
- data/lib/rubocop/ast/node_pattern/compiler/debug.rb +1 -1
- data/lib/rubocop/ast/node_pattern/node.rb +4 -0
- data/lib/rubocop/ast/node_pattern/parser.racc.rb +1 -1
- data/lib/rubocop/ast/node_pattern/with_meta.rb +3 -4
- data/lib/rubocop/ast/processed_source.rb +4 -1
- data/lib/rubocop/ast/version.rb +1 -1
- metadata +5 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b08ce67ff41a6d40d8385735fe36ebe6fd90513f3cbafbd21afa4f9393a66f9a
|
4
|
+
data.tar.gz: 24e6a84531e66531bcf5c358cfbed40815d1fd3f1d91e598a5b884a1971bb3c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20a8ea979cb2335691b7b39c9986962edc2fe61667e712187e3904e2a984fc3327b38034eca64028a362724964e982d053a093432d3f7994edae592cd8f6fb83
|
7
|
+
data.tar.gz: 59ab4c65c59d3407224147391e8b253c930da8add826c50553b433039057865aa1211d13e90061bb4e3a40ebb97184ea8d5698f3b4f5d0ff7c3c343d14a566bd
|
data/lib/rubocop/ast/builder.rb
CHANGED
@@ -19,76 +19,77 @@ module RuboCop
|
|
19
19
|
|
20
20
|
# @api private
|
21
21
|
NODE_MAP = {
|
22
|
-
and:
|
23
|
-
and_asgn:
|
24
|
-
alias:
|
25
|
-
arg:
|
26
|
-
blockarg:
|
27
|
-
forward_arg:
|
28
|
-
kwarg:
|
29
|
-
kwoptarg:
|
30
|
-
kwrestarg:
|
31
|
-
optarg:
|
32
|
-
restarg:
|
33
|
-
shadowarg:
|
34
|
-
args:
|
35
|
-
array:
|
36
|
-
lvasgn:
|
37
|
-
ivasgn:
|
38
|
-
cvasgn:
|
39
|
-
gvasgn:
|
40
|
-
block:
|
41
|
-
numblock:
|
42
|
-
break:
|
43
|
-
case_match:
|
44
|
-
casgn:
|
45
|
-
case:
|
46
|
-
class:
|
47
|
-
const:
|
48
|
-
def:
|
49
|
-
defined?:
|
50
|
-
defs:
|
51
|
-
dstr:
|
52
|
-
ensure:
|
53
|
-
for:
|
54
|
-
forward_args:
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
22
|
+
and: AndNode,
|
23
|
+
and_asgn: AndAsgnNode,
|
24
|
+
alias: AliasNode,
|
25
|
+
arg: ArgNode,
|
26
|
+
blockarg: ArgNode,
|
27
|
+
forward_arg: ArgNode,
|
28
|
+
kwarg: ArgNode,
|
29
|
+
kwoptarg: ArgNode,
|
30
|
+
kwrestarg: ArgNode,
|
31
|
+
optarg: ArgNode,
|
32
|
+
restarg: ArgNode,
|
33
|
+
shadowarg: ArgNode,
|
34
|
+
args: ArgsNode,
|
35
|
+
array: ArrayNode,
|
36
|
+
lvasgn: AsgnNode,
|
37
|
+
ivasgn: AsgnNode,
|
38
|
+
cvasgn: AsgnNode,
|
39
|
+
gvasgn: AsgnNode,
|
40
|
+
block: BlockNode,
|
41
|
+
numblock: BlockNode,
|
42
|
+
break: BreakNode,
|
43
|
+
case_match: CaseMatchNode,
|
44
|
+
casgn: CasgnNode,
|
45
|
+
case: CaseNode,
|
46
|
+
class: ClassNode,
|
47
|
+
const: ConstNode,
|
48
|
+
def: DefNode,
|
49
|
+
defined?: DefinedNode,
|
50
|
+
defs: DefNode,
|
51
|
+
dstr: DstrNode,
|
52
|
+
ensure: EnsureNode,
|
53
|
+
for: ForNode,
|
54
|
+
forward_args: ForwardArgsNode,
|
55
|
+
forwarded_kwrestarg: KeywordSplatNode,
|
56
|
+
float: FloatNode,
|
57
|
+
hash: HashNode,
|
58
|
+
if: IfNode,
|
59
|
+
in_pattern: InPatternNode,
|
60
|
+
int: IntNode,
|
61
|
+
index: IndexNode,
|
62
|
+
indexasgn: IndexasgnNode,
|
63
|
+
irange: RangeNode,
|
64
|
+
erange: RangeNode,
|
65
|
+
kwargs: HashNode,
|
66
|
+
kwsplat: KeywordSplatNode,
|
67
|
+
lambda: LambdaNode,
|
68
|
+
module: ModuleNode,
|
69
|
+
next: NextNode,
|
70
|
+
op_asgn: OpAsgnNode,
|
71
|
+
or_asgn: OrAsgnNode,
|
72
|
+
or: OrNode,
|
73
|
+
pair: PairNode,
|
74
|
+
procarg0: Procarg0Node,
|
75
|
+
regexp: RegexpNode,
|
76
|
+
rescue: RescueNode,
|
77
|
+
resbody: ResbodyNode,
|
78
|
+
return: ReturnNode,
|
79
|
+
csend: CsendNode,
|
80
|
+
send: SendNode,
|
81
|
+
str: StrNode,
|
82
|
+
xstr: StrNode,
|
83
|
+
sclass: SelfClassNode,
|
84
|
+
super: SuperNode,
|
85
|
+
zsuper: SuperNode,
|
86
|
+
sym: SymbolNode,
|
87
|
+
until: UntilNode,
|
88
|
+
until_post: UntilNode,
|
89
|
+
when: WhenNode,
|
90
|
+
while: WhileNode,
|
91
|
+
while_post: WhileNode,
|
92
|
+
yield: YieldNode
|
92
93
|
}.freeze
|
93
94
|
|
94
95
|
# Generates {Node} from the given information.
|
@@ -15,8 +15,8 @@ module RuboCop
|
|
15
15
|
# :bar
|
16
16
|
# ]
|
17
17
|
#
|
18
|
-
# node.loc.begin.line_span
|
19
|
-
# node.
|
18
|
+
# node.loc.begin.line_span # => 1..1
|
19
|
+
# node.source_range.line_span(exclude_end: true) # => 1...4
|
20
20
|
def line_span(exclude_end: false)
|
21
21
|
::Range.new(first_line, last_line, exclude_end)
|
22
22
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
module RuboCop
|
4
4
|
module AST
|
5
|
-
# A node extension for `
|
5
|
+
# A node extension for `csend` nodes. This will be used in place of a plain
|
6
6
|
# node when the builder constructs the AST, making its methods available
|
7
|
-
# to all `
|
7
|
+
# to all `csend` nodes within RuboCop.
|
8
8
|
class CsendNode < SendNode
|
9
9
|
def send_type?
|
10
10
|
false
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
module RuboCop
|
4
4
|
module AST
|
5
|
-
# A node extension for `kwsplat` nodes. This will be used in
|
6
|
-
# plain
|
7
|
-
#
|
5
|
+
# A node extension for `kwsplat` and `forwarded_kwrestarg` nodes. This will be used in
|
6
|
+
# place of a plain node when the builder constructs the AST, making its methods available to
|
7
|
+
# all `kwsplat` and `forwarded_kwrestarg` nodes within RuboCop.
|
8
8
|
class KeywordSplatNode < Node
|
9
9
|
include HashElementNode
|
10
10
|
|
@@ -41,6 +41,13 @@ module RuboCop
|
|
41
41
|
def node_parts
|
42
42
|
[self, self]
|
43
43
|
end
|
44
|
+
|
45
|
+
# This provides `forwarded_kwrestarg` node to return true to be compatible with `kwsplat` node.
|
46
|
+
#
|
47
|
+
# @return [true]
|
48
|
+
def kwsplat_type?
|
49
|
+
true
|
50
|
+
end
|
44
51
|
end
|
45
52
|
end
|
46
53
|
end
|
@@ -5,7 +5,7 @@ module RuboCop
|
|
5
5
|
# Common functionality for nodes that are a kind of method dispatch:
|
6
6
|
# `send`, `csend`, `super`, `zsuper`, `yield`, `defined?`,
|
7
7
|
# and (modern only): `index`, `indexasgn`, `lambda`
|
8
|
-
module MethodDispatchNode
|
8
|
+
module MethodDispatchNode # rubocop:disable Metrics/ModuleLength
|
9
9
|
extend NodePattern::Macros
|
10
10
|
include MethodIdentifierPredicates
|
11
11
|
|
@@ -28,6 +28,17 @@ module RuboCop
|
|
28
28
|
node_parts[1]
|
29
29
|
end
|
30
30
|
|
31
|
+
# The source range for the method name or keyword that dispatches this call.
|
32
|
+
#
|
33
|
+
# @return [Parser::Source::Range] the source range for the method name or keyword
|
34
|
+
def selector
|
35
|
+
if loc.respond_to? :keyword
|
36
|
+
loc.keyword
|
37
|
+
else
|
38
|
+
loc.selector
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
31
42
|
# The `block` or `numblock` node associated with this method dispatch, if any.
|
32
43
|
#
|
33
44
|
# @return [BlockNode, nil] the `block` or `numblock` node associated with this method
|
@@ -147,7 +158,7 @@ module RuboCop
|
|
147
158
|
#
|
148
159
|
# @return [Boolean] whether the method is the implicit form of `#call`
|
149
160
|
def implicit_call?
|
150
|
-
method?(:call) && !
|
161
|
+
method?(:call) && !selector
|
151
162
|
end
|
152
163
|
|
153
164
|
# Whether this method dispatch has an explicit block.
|
@@ -222,9 +233,9 @@ module RuboCop
|
|
222
233
|
#
|
223
234
|
# @return [Boolean] whether this method is a unary operation
|
224
235
|
def unary_operation?
|
225
|
-
return false unless
|
236
|
+
return false unless selector
|
226
237
|
|
227
|
-
operator_method? && loc.expression.begin_pos ==
|
238
|
+
operator_method? && loc.expression.begin_pos == selector.begin_pos
|
228
239
|
end
|
229
240
|
|
230
241
|
# Checks whether this is a binary operation.
|
@@ -235,9 +246,9 @@ module RuboCop
|
|
235
246
|
#
|
236
247
|
# @return [Boolean] whether this method is a binary operation
|
237
248
|
def binary_operation?
|
238
|
-
return false unless
|
249
|
+
return false unless selector
|
239
250
|
|
240
|
-
operator_method? && loc.expression.begin_pos !=
|
251
|
+
operator_method? && loc.expression.begin_pos != selector.begin_pos
|
241
252
|
end
|
242
253
|
|
243
254
|
private
|
data/lib/rubocop/ast/node.rb
CHANGED
@@ -510,8 +510,14 @@ module RuboCop
|
|
510
510
|
|
511
511
|
# @!method class_constructor?(node = self)
|
512
512
|
def_node_matcher :class_constructor?, <<~PATTERN
|
513
|
-
{
|
514
|
-
|
513
|
+
{
|
514
|
+
(send #global_const?({:Class :Module :Struct}) :new ...)
|
515
|
+
(send #global_const?(:Data) :define ...)
|
516
|
+
({block numblock} {
|
517
|
+
(send #global_const?({:Class :Module :Struct}) :new ...)
|
518
|
+
(send #global_const?(:Data) :define ...)
|
519
|
+
} ...)
|
520
|
+
}
|
515
521
|
PATTERN
|
516
522
|
|
517
523
|
# @deprecated Use `:class_constructor?`
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
47
47
|
# @return [String] a Rainbow colorized version of ruby
|
48
48
|
def colorize(color_scheme = COLOR_SCHEME)
|
49
49
|
map = color_map(color_scheme)
|
50
|
-
ast.
|
50
|
+
ast.source_range.source_buffer.source.chars.map.with_index do |char, i|
|
51
51
|
Rainbow(char).color(map[i])
|
52
52
|
end.join
|
53
53
|
end
|
@@ -48,12 +48,12 @@ module RuboCop
|
|
48
48
|
|
49
49
|
def emit_unary_op(type, operator_t = nil, *children)
|
50
50
|
children[-1] = children[-1].first if children[-1].is_a?(Array) # token?
|
51
|
-
map = source_map(children.first.
|
51
|
+
map = source_map(children.first.source_range, operator_t: operator_t)
|
52
52
|
n(type, children, map)
|
53
53
|
end
|
54
54
|
|
55
55
|
def emit_list(type, begin_t, children, end_t)
|
56
|
-
expr = children.first.
|
56
|
+
expr = children.first.source_range.join(children.last.source_range)
|
57
57
|
map = source_map(expr, begin_t: begin_t, end_t: end_t)
|
58
58
|
n(type, children, map)
|
59
59
|
end
|
@@ -79,8 +79,7 @@ module RuboCop
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def join_exprs(left_expr, right_expr)
|
82
|
-
left_expr.
|
83
|
-
.join(right_expr.loc.expression)
|
82
|
+
left_expr.source_range.join(right_expr.source_range)
|
84
83
|
end
|
85
84
|
|
86
85
|
def source_map(token_or_range, begin_t: nil, end_t: nil, operator_t: nil, selector_t: nil)
|
@@ -27,7 +27,7 @@ module RuboCop
|
|
27
27
|
# Defaults source encoding to UTF-8, regardless of the encoding it has
|
28
28
|
# been read with, which could be non-utf8 depending on the default
|
29
29
|
# external encoding.
|
30
|
-
source.force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
|
30
|
+
(+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
|
31
31
|
|
32
32
|
@raw_source = source
|
33
33
|
@path = path
|
@@ -265,6 +265,9 @@ module RuboCop
|
|
265
265
|
when 3.2
|
266
266
|
require 'parser/ruby32'
|
267
267
|
Parser::Ruby32
|
268
|
+
when 3.3
|
269
|
+
require 'parser/ruby33'
|
270
|
+
Parser::Ruby33
|
268
271
|
else
|
269
272
|
raise ArgumentError,
|
270
273
|
"RuboCop found unknown Ruby version: #{ruby_version.inspect}"
|
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.29.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: 2023-06-01 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: parser
|
@@ -18,34 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 3.
|
21
|
+
version: 3.2.1.0
|
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.
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: bundler
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - ">="
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: 1.15.0
|
36
|
-
- - "<"
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
version: '3.0'
|
39
|
-
type: :development
|
40
|
-
prerelease: false
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 1.15.0
|
46
|
-
- - "<"
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '3.0'
|
28
|
+
version: 3.2.1.0
|
49
29
|
description: " RuboCop's Node and NodePattern classes.\n"
|
50
30
|
email: rubocop@googlegroups.com
|
51
31
|
executables: []
|
@@ -176,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
156
|
- !ruby/object:Gem::Version
|
177
157
|
version: '0'
|
178
158
|
requirements: []
|
179
|
-
rubygems_version: 3.
|
159
|
+
rubygems_version: 3.4.1
|
180
160
|
signing_key:
|
181
161
|
specification_version: 4
|
182
162
|
summary: RuboCop tools to deal with Ruby code AST.
|