rubocop-ast 1.9.1 → 1.13.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 +4 -4
- data/lib/rubocop/ast/builder.rb +8 -0
- data/lib/rubocop/ast/node/and_asgn_node.rb +17 -0
- data/lib/rubocop/ast/node/asgn_node.rb +24 -0
- data/lib/rubocop/ast/node/casgn_node.rb +31 -0
- data/lib/rubocop/ast/node/const_node.rb +0 -4
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +3 -3
- data/lib/rubocop/ast/node/op_asgn_node.rb +36 -0
- data/lib/rubocop/ast/node/or_asgn_node.rb +17 -0
- data/lib/rubocop/ast/node.rb +5 -5
- data/lib/rubocop/ast/node_pattern/lexer.rex.rb +1 -1
- data/lib/rubocop/ast/node_pattern/node.rb +1 -1
- data/lib/rubocop/ast/version.rb +1 -1
- data/lib/rubocop/ast.rb +5 -0
- metadata +11 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3a3081c514303a8fb2f6ac3e4616da1d5f41ac4bd21d63407f9281534443385
|
4
|
+
data.tar.gz: dabd9d626ee4dd67946126b81f1a8852da16bb561caaabc91fa4b89648186fa6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f678e9d3b6da22c1be2861fd023121c50b161dfff5986ed14f49199c251bb041a2d2c3e93cacb86c9368dd71f8ed7575620984eeb54e65eaf183f062ffa11dee
|
7
|
+
data.tar.gz: 948888c0e83bca6acf73b06a0e5030bab2fde65cafa6366c6a3054cb07eca722d938f28a8b1e1bb226c8f48c9bb483b9d66704d432fdc87e23a4d2461809bb38
|
data/README.md
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# RuboCop AST
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/rubocop-ast)
|
4
|
-
[](https://codeclimate.com/github/rubocop
|
6
|
-
[](https://codeclimate.com/github/rubocop
|
4
|
+
[](https://github.com/rubocop/rubocop-ast/actions?query=workflow%3ACI)
|
5
|
+
[](https://codeclimate.com/github/rubocop/rubocop-ast/test_coverage)
|
6
|
+
[](https://codeclimate.com/github/rubocop/rubocop-ast/maintainability)
|
7
7
|
|
8
|
-
Contains the classes needed by [RuboCop](https://github.com/rubocop
|
8
|
+
Contains the classes needed by [RuboCop](https://github.com/rubocop/rubocop) to deal with Ruby's AST, in particular:
|
9
9
|
|
10
10
|
* `RuboCop::AST::Node` ([doc](docs/modules/ROOT/pages/node_types.adoc))
|
11
11
|
* `RuboCop::AST::NodePattern` ([doc](docs/modules/ROOT/pages/node_pattern.adoc))
|
data/lib/rubocop/ast/builder.rb
CHANGED
@@ -20,6 +20,7 @@ module RuboCop
|
|
20
20
|
# @api private
|
21
21
|
NODE_MAP = {
|
22
22
|
and: AndNode,
|
23
|
+
and_asgn: AndAsgnNode,
|
23
24
|
alias: AliasNode,
|
24
25
|
arg: ArgNode,
|
25
26
|
blockarg: ArgNode,
|
@@ -32,10 +33,15 @@ module RuboCop
|
|
32
33
|
shadowarg: ArgNode,
|
33
34
|
args: ArgsNode,
|
34
35
|
array: ArrayNode,
|
36
|
+
lvasgn: AsgnNode,
|
37
|
+
ivasgn: AsgnNode,
|
38
|
+
cvasgn: AsgnNode,
|
39
|
+
gvasgn: AsgnNode,
|
35
40
|
block: BlockNode,
|
36
41
|
numblock: BlockNode,
|
37
42
|
break: BreakNode,
|
38
43
|
case_match: CaseMatchNode,
|
44
|
+
casgn: CasgnNode,
|
39
45
|
case: CaseNode,
|
40
46
|
class: ClassNode,
|
41
47
|
const: ConstNode,
|
@@ -60,6 +66,8 @@ module RuboCop
|
|
60
66
|
lambda: LambdaNode,
|
61
67
|
module: ModuleNode,
|
62
68
|
next: NextNode,
|
69
|
+
op_asgn: OpAsgnNode,
|
70
|
+
or_asgn: OrAsgnNode,
|
63
71
|
or: OrNode,
|
64
72
|
pair: PairNode,
|
65
73
|
procarg0: Procarg0Node,
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module AST
|
5
|
+
# A node extension for `op_asgn` nodes.
|
6
|
+
# This will be used in place of a plain node when the builder constructs
|
7
|
+
# the AST, making its methods available to all assignment nodes within RuboCop.
|
8
|
+
class AndAsgnNode < OpAsgnNode
|
9
|
+
# The operator being used for assignment as a symbol.
|
10
|
+
#
|
11
|
+
# @return [Symbol] the assignment operator
|
12
|
+
def operator
|
13
|
+
:'&&'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module AST
|
5
|
+
# A node extension for `lvasgn`, `ivasgn`, `cvasgn`, and `gvasgn` nodes.
|
6
|
+
# This will be used in place of a plain node when the builder constructs
|
7
|
+
# the AST, making its methods available to all assignment nodes within RuboCop.
|
8
|
+
class AsgnNode < Node
|
9
|
+
# The name of the variable being assigned as a symbol.
|
10
|
+
#
|
11
|
+
# @return [Symbol] the name of the variable being assigned
|
12
|
+
def name
|
13
|
+
node_parts[0]
|
14
|
+
end
|
15
|
+
|
16
|
+
# The expression being assigned to the variable.
|
17
|
+
#
|
18
|
+
# @return [Node] the expression being assigned.
|
19
|
+
def expression
|
20
|
+
node_parts[1]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module AST
|
5
|
+
# A node extension for `casgn` nodes.
|
6
|
+
# This will be used in place of a plain node when the builder constructs
|
7
|
+
# the AST, making its methods available to all assignment nodes within RuboCop.
|
8
|
+
class CasgnNode < Node
|
9
|
+
# The namespace of the constant being assigned.
|
10
|
+
#
|
11
|
+
# @return [Node, nil] the node associated with the scope (e.g. cbase, const, ...)
|
12
|
+
def namespace
|
13
|
+
node_parts[0]
|
14
|
+
end
|
15
|
+
|
16
|
+
# The name of the variable being assigned as a symbol.
|
17
|
+
#
|
18
|
+
# @return [Symbol] the name of the variable being assigned
|
19
|
+
def name
|
20
|
+
node_parts[1]
|
21
|
+
end
|
22
|
+
|
23
|
+
# The expression being assigned to the variable.
|
24
|
+
#
|
25
|
+
# @return [Node] the expression being assigned.
|
26
|
+
def expression
|
27
|
+
node_parts[2]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -4,8 +4,6 @@ module RuboCop
|
|
4
4
|
module AST
|
5
5
|
# A node extension for `const` nodes.
|
6
6
|
class ConstNode < Node
|
7
|
-
# The `send` node associated with this block.
|
8
|
-
#
|
9
7
|
# @return [Node, nil] the node associated with the scope (e.g. cbase, const, ...)
|
10
8
|
def namespace
|
11
9
|
children[0]
|
@@ -16,8 +14,6 @@ module RuboCop
|
|
16
14
|
children[1]
|
17
15
|
end
|
18
16
|
|
19
|
-
# The body of this block.
|
20
|
-
#
|
21
17
|
# @return [Boolean] if the constant is a Module / Class, according to the standard convention.
|
22
18
|
# Note: some classes might have uppercase in which case this method
|
23
19
|
# returns false
|
@@ -28,9 +28,9 @@ module RuboCop
|
|
28
28
|
node_parts[1]
|
29
29
|
end
|
30
30
|
|
31
|
-
# The `block` node associated with this method dispatch, if any.
|
31
|
+
# The `block` or `numblock` node associated with this method dispatch, if any.
|
32
32
|
#
|
33
|
-
# @return [BlockNode, nil] the `block` node associated with this method
|
33
|
+
# @return [BlockNode, nil] the `block` or `numblock` node associated with this method
|
34
34
|
# call or `nil`
|
35
35
|
def block_node
|
36
36
|
parent if block_literal?
|
@@ -154,7 +154,7 @@ module RuboCop
|
|
154
154
|
#
|
155
155
|
# @return [Boolean] whether the dispatched method has a block
|
156
156
|
def block_literal?
|
157
|
-
parent&.block_type? && eql?(parent.send_node)
|
157
|
+
(parent&.block_type? || parent&.numblock_type?) && eql?(parent.send_node)
|
158
158
|
end
|
159
159
|
|
160
160
|
# Checks whether this node is an arithmetic operation
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module AST
|
5
|
+
# A node extension for `op_asgn` nodes.
|
6
|
+
# This will be used in place of a plain node when the builder constructs
|
7
|
+
# the AST, making its methods available to all assignment nodes within RuboCop.
|
8
|
+
class OpAsgnNode < Node
|
9
|
+
# @return [AsgnNode] the assignment node
|
10
|
+
def assignment_node
|
11
|
+
node_parts[0]
|
12
|
+
end
|
13
|
+
|
14
|
+
# The name of the variable being assigned as a symbol.
|
15
|
+
#
|
16
|
+
# @return [Symbol] the name of the variable being assigned
|
17
|
+
def name
|
18
|
+
assignment_node.name
|
19
|
+
end
|
20
|
+
|
21
|
+
# The operator being used for assignment as a symbol.
|
22
|
+
#
|
23
|
+
# @return [Symbol] the assignment operator
|
24
|
+
def operator
|
25
|
+
node_parts[1]
|
26
|
+
end
|
27
|
+
|
28
|
+
# The expression being assigned to the variable.
|
29
|
+
#
|
30
|
+
# @return [Node] the expression being assigned.
|
31
|
+
def expression
|
32
|
+
node_parts.last
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module AST
|
5
|
+
# A node extension for `op_asgn` nodes.
|
6
|
+
# This will be used in place of a plain node when the builder constructs
|
7
|
+
# the AST, making its methods available to all assignment nodes within RuboCop.
|
8
|
+
class OrAsgnNode < OpAsgnNode
|
9
|
+
# The operator being used for assignment as a symbol.
|
10
|
+
#
|
11
|
+
# @return [Symbol] the assignment operator
|
12
|
+
def operator
|
13
|
+
:'||'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/rubocop/ast/node.rb
CHANGED
@@ -425,7 +425,7 @@ module RuboCop
|
|
425
425
|
end
|
426
426
|
|
427
427
|
def keyword?
|
428
|
-
return true if special_keyword? || send_type? && prefix_not?
|
428
|
+
return true if special_keyword? || (send_type? && prefix_not?)
|
429
429
|
return false unless KEYWORDS.include?(type)
|
430
430
|
|
431
431
|
!OPERATOR_KEYWORDS.include?(type) || loc.operator.is?(type.to_s)
|
@@ -464,7 +464,7 @@ module RuboCop
|
|
464
464
|
end
|
465
465
|
|
466
466
|
def numeric_type?
|
467
|
-
int_type? || float_type?
|
467
|
+
int_type? || float_type? || rational_type? || complex_type?
|
468
468
|
end
|
469
469
|
|
470
470
|
def range_type?
|
@@ -507,20 +507,20 @@ module RuboCop
|
|
507
507
|
# @deprecated Use `:class_constructor?`
|
508
508
|
# @!method struct_constructor?(node = self)
|
509
509
|
def_node_matcher :struct_constructor?, <<~PATTERN
|
510
|
-
(block (send #global_const?(:Struct) :new ...) _ $_)
|
510
|
+
({block numblock} (send #global_const?(:Struct) :new ...) _ $_)
|
511
511
|
PATTERN
|
512
512
|
|
513
513
|
# @!method class_definition?(node = self)
|
514
514
|
def_node_matcher :class_definition?, <<~PATTERN
|
515
515
|
{(class _ _ $_)
|
516
516
|
(sclass _ $_)
|
517
|
-
(block (send #global_const?({:Struct :Class}) :new ...) _ $_)}
|
517
|
+
({block numblock} (send #global_const?({:Struct :Class}) :new ...) _ $_)}
|
518
518
|
PATTERN
|
519
519
|
|
520
520
|
# @!method module_definition?(node = self)
|
521
521
|
def_node_matcher :module_definition?, <<~PATTERN
|
522
522
|
{(module _ $_)
|
523
|
-
(block (send #global_const?(:Module) :new ...) _ $_)}
|
523
|
+
({block numblock} (send #global_const?(:Module) :new ...) _ $_)}
|
524
524
|
PATTERN
|
525
525
|
|
526
526
|
# Some expressions are evaluated for their value, some for their side
|
@@ -54,7 +54,7 @@ module RuboCop
|
|
54
54
|
children_nodes.sum(&:nb_captures)
|
55
55
|
end
|
56
56
|
|
57
|
-
# @return [Boolean] returns
|
57
|
+
# @return [Boolean] returns whether it matches a variable number of elements
|
58
58
|
def variadic?
|
59
59
|
arity.is_a?(Range)
|
60
60
|
end
|
data/lib/rubocop/ast/version.rb
CHANGED
data/lib/rubocop/ast.rb
CHANGED
@@ -39,10 +39,12 @@ require_relative 'ast/node/and_node'
|
|
39
39
|
require_relative 'ast/node/arg_node'
|
40
40
|
require_relative 'ast/node/args_node'
|
41
41
|
require_relative 'ast/node/array_node'
|
42
|
+
require_relative 'ast/node/asgn_node'
|
42
43
|
require_relative 'ast/node/block_node'
|
43
44
|
require_relative 'ast/node/break_node'
|
44
45
|
require_relative 'ast/node/case_match_node'
|
45
46
|
require_relative 'ast/node/case_node'
|
47
|
+
require_relative 'ast/node/casgn_node'
|
46
48
|
require_relative 'ast/node/class_node'
|
47
49
|
require_relative 'ast/node/const_node'
|
48
50
|
require_relative 'ast/node/def_node'
|
@@ -61,6 +63,9 @@ require_relative 'ast/node/keyword_splat_node'
|
|
61
63
|
require_relative 'ast/node/lambda_node'
|
62
64
|
require_relative 'ast/node/module_node'
|
63
65
|
require_relative 'ast/node/next_node'
|
66
|
+
require_relative 'ast/node/op_asgn_node'
|
67
|
+
require_relative 'ast/node/and_asgn_node'
|
68
|
+
require_relative 'ast/node/or_asgn_node'
|
64
69
|
require_relative 'ast/node/or_node'
|
65
70
|
require_relative 'ast/node/pair_node'
|
66
71
|
require_relative 'ast/node/procarg0_node'
|
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.13.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-
|
13
|
+
date: 2021-11-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: parser
|
@@ -63,14 +63,17 @@ files:
|
|
63
63
|
- lib/rubocop/ast/ext/range_min_max.rb
|
64
64
|
- lib/rubocop/ast/node.rb
|
65
65
|
- lib/rubocop/ast/node/alias_node.rb
|
66
|
+
- lib/rubocop/ast/node/and_asgn_node.rb
|
66
67
|
- lib/rubocop/ast/node/and_node.rb
|
67
68
|
- lib/rubocop/ast/node/arg_node.rb
|
68
69
|
- lib/rubocop/ast/node/args_node.rb
|
69
70
|
- lib/rubocop/ast/node/array_node.rb
|
71
|
+
- lib/rubocop/ast/node/asgn_node.rb
|
70
72
|
- lib/rubocop/ast/node/block_node.rb
|
71
73
|
- lib/rubocop/ast/node/break_node.rb
|
72
74
|
- lib/rubocop/ast/node/case_match_node.rb
|
73
75
|
- lib/rubocop/ast/node/case_node.rb
|
76
|
+
- lib/rubocop/ast/node/casgn_node.rb
|
74
77
|
- lib/rubocop/ast/node/class_node.rb
|
75
78
|
- lib/rubocop/ast/node/const_node.rb
|
76
79
|
- lib/rubocop/ast/node/def_node.rb
|
@@ -102,6 +105,8 @@ files:
|
|
102
105
|
- lib/rubocop/ast/node/mixin/predicate_operator_node.rb
|
103
106
|
- lib/rubocop/ast/node/module_node.rb
|
104
107
|
- lib/rubocop/ast/node/next_node.rb
|
108
|
+
- lib/rubocop/ast/node/op_asgn_node.rb
|
109
|
+
- lib/rubocop/ast/node/or_asgn_node.rb
|
105
110
|
- lib/rubocop/ast/node/or_node.rb
|
106
111
|
- lib/rubocop/ast/node/pair_node.rb
|
107
112
|
- lib/rubocop/ast/node/procarg0_node.rb
|
@@ -145,15 +150,15 @@ files:
|
|
145
150
|
- lib/rubocop/ast/token.rb
|
146
151
|
- lib/rubocop/ast/traversal.rb
|
147
152
|
- lib/rubocop/ast/version.rb
|
148
|
-
homepage: https://github.com/rubocop
|
153
|
+
homepage: https://github.com/rubocop/rubocop-ast
|
149
154
|
licenses:
|
150
155
|
- MIT
|
151
156
|
metadata:
|
152
157
|
homepage_uri: https://www.rubocop.org/
|
153
|
-
changelog_uri: https://github.com/rubocop
|
154
|
-
source_code_uri: https://github.com/rubocop
|
158
|
+
changelog_uri: https://github.com/rubocop/rubocop-ast/blob/master/CHANGELOG.md
|
159
|
+
source_code_uri: https://github.com/rubocop/rubocop-ast/
|
155
160
|
documentation_uri: https://docs.rubocop.org/rubocop-ast/
|
156
|
-
bug_tracker_uri: https://github.com/rubocop
|
161
|
+
bug_tracker_uri: https://github.com/rubocop/rubocop-ast/issues
|
157
162
|
post_install_message:
|
158
163
|
rdoc_options: []
|
159
164
|
require_paths:
|