parser_node_ext 0.7.0 → 0.9.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/CHANGELOG.md +8 -0
- data/Gemfile.lock +1 -1
- data/lib/parser_node_ext/version.rb +1 -1
- data/lib/parser_node_ext.rb +32 -6
- data/sig/parser_node_ext.rbs +4 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fb070ea09b73310d3bb9acdcae0cbc06c6e3120b7d1bd69de94045c48cabcfa
|
4
|
+
data.tar.gz: 4014d1088f929cb56e5865b11500f58242263685ba64a140b29d9f9166fdeaf6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77c947f3bfc188aef814ec8214cf46af0d76d7aabe9c5c99af2c63c7838073bf9c8cd3bdae71e248238cb5c16690d71e91afefc9f23ce791284a46eac7957946
|
7
|
+
data.tar.gz: 5afac291cda433af31d1965c023fcc0662cf07e6cdd6c80a9932b23f2851978b501b09fa0a61b128e325bc7eb714d1e5efb09024ac06c802bade0656715e01cf
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.9.0 (2023-02-01)
|
4
|
+
|
5
|
+
* Support pattern match nodes, `case_match`, `in_pattern`, `hash_pattern`, `array_pattern`, `find_pattern`, `match_pattern`, `match_pattern_p`, `match_var`, `match_as`, `pin`, `match_rest`, `if_guard` and `unless_guard`
|
6
|
+
|
7
|
+
## 0.8.0 (2023-01-30)
|
8
|
+
|
9
|
+
* Support `numblock` node
|
10
|
+
|
3
11
|
## 0.7.0 (2023-01-28)
|
4
12
|
|
5
13
|
* Support `elements` for `array` node
|
data/Gemfile.lock
CHANGED
data/lib/parser_node_ext.rb
CHANGED
@@ -11,10 +11,13 @@ module ParserNodeExt
|
|
11
11
|
TYPE_CHILDREN = {
|
12
12
|
and: %i[left_value right_value],
|
13
13
|
arg: %i[name],
|
14
|
+
array: %i[elements],
|
15
|
+
array_pattern: %i[elements],
|
14
16
|
begin: %i[body],
|
15
17
|
block: %i[caller arguments body],
|
16
18
|
blockarg: %i[name],
|
17
19
|
case: %i[expression when_statements else_statement],
|
20
|
+
case_match: %i[expression in_statements else_statement],
|
18
21
|
const: %i[parent_const name],
|
19
22
|
class: %i[name parent_class body],
|
20
23
|
csend: %i[receiver message arguments],
|
@@ -24,26 +27,38 @@ module ParserNodeExt
|
|
24
27
|
defined?: %i[arguments],
|
25
28
|
defs: %i[self name arguments body],
|
26
29
|
false: [],
|
30
|
+
find_pattern: %i[elements],
|
27
31
|
float: %i[value],
|
28
32
|
hash: %i[pairs],
|
33
|
+
hash_pattern: %i[pairs],
|
29
34
|
if: %i[expression if_statement else_statement],
|
35
|
+
if_guard: %i[expression],
|
30
36
|
int: %i[value],
|
37
|
+
in_pattern: %i[expression guard body],
|
31
38
|
ivasgn: %i[left_value right_value],
|
32
39
|
ivar: %i[name],
|
33
40
|
lvar: %i[name],
|
34
41
|
lvasgn: %i[left_value right_value],
|
35
42
|
masgn: %i[left_value right_value],
|
43
|
+
match_as: %i[key value],
|
44
|
+
match_pattern: %i[left_value right_value],
|
45
|
+
match_pattern_p: %i[left_value right_value],
|
46
|
+
match_rest: %i[variable],
|
47
|
+
match_var: %i[name],
|
36
48
|
module: %i[name body],
|
37
49
|
nil: [],
|
50
|
+
numblock: %i[caller arguments_count body],
|
38
51
|
or: %i[left_value right_value],
|
39
52
|
or_asgn: %i[left_value right_value],
|
40
53
|
pair: %i[key value],
|
54
|
+
pin: %i[variable],
|
41
55
|
restarg: %i[name],
|
42
56
|
send: %i[receiver message arguments],
|
43
57
|
str: %i[value],
|
44
58
|
super: %i[arguments],
|
45
59
|
sym: %i[value],
|
46
60
|
true: [],
|
61
|
+
unless_guard: %i[expression],
|
47
62
|
when: %i[expression body],
|
48
63
|
zsuper: []
|
49
64
|
}
|
@@ -134,7 +149,7 @@ module ParserNodeExt
|
|
134
149
|
end
|
135
150
|
|
136
151
|
# Get body of node.
|
137
|
-
# It supports :begin, :block, :class, :def, :defs
|
152
|
+
# It supports :begin, :block, :class, :def, :defs, :module, :numblock node.
|
138
153
|
# @example
|
139
154
|
# node # s(:block, s(:send, s(:const, nil, :RSpec), :configure), s(:args, s(:arg, :config)), s(:send, nil, :include, s(:const, s(:const, nil, :EmailSpec), :Helpers)))
|
140
155
|
# node.body # [s(:send, nil, :include, s(:const, s(:const, nil, :EmailSpec), :Helpers))]
|
@@ -148,7 +163,7 @@ module ParserNodeExt
|
|
148
163
|
return [] if children[1].nil?
|
149
164
|
|
150
165
|
:begin == children[1].type ? children[1].body : children[1..-1]
|
151
|
-
when :def, :block, :class, :module
|
166
|
+
when :def, :block, :class, :module, :numblock, :in_pattern
|
152
167
|
return [] if children[2].nil?
|
153
168
|
|
154
169
|
:begin == children[2].type ? children[2].body : children[2..-1]
|
@@ -172,6 +187,17 @@ module ParserNodeExt
|
|
172
187
|
end
|
173
188
|
end
|
174
189
|
|
190
|
+
# Get in statements of case_match node.
|
191
|
+
# @return [Array<Parser::AST::Node>] in statements of case node.
|
192
|
+
# @raise [MethodNotSupported] if calls on other node.
|
193
|
+
def in_statements
|
194
|
+
if :case_match == type
|
195
|
+
children[1...-1]
|
196
|
+
else
|
197
|
+
raise MethodNotSupported, "in_statements is not supported for #{self}"
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
175
201
|
# Get else statement of case node.
|
176
202
|
# @return [Parser::AST::Node] else statement of case node.
|
177
203
|
# @raise [MethodNotSupported] if calls on other node.
|
@@ -179,25 +205,25 @@ module ParserNodeExt
|
|
179
205
|
children[-1]
|
180
206
|
end
|
181
207
|
|
182
|
-
# Get elements of array node.
|
208
|
+
# Get elements of :array and :array_pattern node.
|
183
209
|
# @return [Array<Parser::AST::Node>] elements of array node.
|
184
210
|
# @raise [MethodNotSupported] if calls on other node.
|
185
211
|
def elements
|
186
|
-
if
|
212
|
+
if %i[array array_pattern find_pattern].include?(type)
|
187
213
|
children
|
188
214
|
else
|
189
215
|
raise MethodNotSupported, "elements is not supported for #{self}"
|
190
216
|
end
|
191
217
|
end
|
192
218
|
|
193
|
-
# Get pairs of :hash node.
|
219
|
+
# Get pairs of :hash and :hash_pattern node.
|
194
220
|
# @example
|
195
221
|
# node # s(:hash, s(:pair, s(:sym, :foo), s(:sym, :bar)), s(:pair, s(:str, "foo"), s(:str, "bar")))
|
196
222
|
# node.pairs # [s(:pair, s(:sym, :foo), s(:sym, :bar)), s(:pair, s(:str, "foo"), s(:str, "bar"))]
|
197
223
|
# @return [Array<Parser::AST::Node>] pairs of node.
|
198
224
|
# @raise [MethodNotSupported] if calls on other node.
|
199
225
|
def pairs
|
200
|
-
if
|
226
|
+
if %i[hash hash_pattern].include?(type)
|
201
227
|
children
|
202
228
|
else
|
203
229
|
raise MethodNotSupported, "pairs is not supported for #{self}"
|
data/sig/parser_node_ext.rbs
CHANGED
@@ -3,13 +3,16 @@ module ParserNodeExt
|
|
3
3
|
# See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
4
4
|
|
5
5
|
def arguments: () -> Array[Parser::AST::Node]
|
6
|
+
def arguments_count: () -> Integer
|
6
7
|
def body: () -> Array[Parser::AST::Node]
|
7
8
|
def caller: () -> Parser::AST::Node
|
8
9
|
def elements: () -> Array[Parser::AST::Node]
|
9
10
|
def else_statement: () -> Parser::AST::Node
|
10
11
|
def expression: () -> Parser::AST::Node
|
11
12
|
def if_statement: () -> Parser::AST::Node
|
13
|
+
def in_statements: () -> Array[Parser::AST::Node]
|
12
14
|
def key: () -> Parser::AST::Node
|
15
|
+
def guard: () -> Parser::AST::Node
|
13
16
|
def left_value: () -> Parser::AST::Node | Symbol
|
14
17
|
def message: () -> Symbol
|
15
18
|
def name: () -> Parser::AST::Node | Symbol
|
@@ -19,6 +22,7 @@ module ParserNodeExt
|
|
19
22
|
def right_value: () -> Parser::AST::Node
|
20
23
|
def self: () -> Parser::AST::Node
|
21
24
|
def value: () -> Parser::AST::Node
|
25
|
+
def variable: () -> Parser::AST::Node
|
22
26
|
def when_statements: () -> Array[Parser::AST::Node]
|
23
27
|
|
24
28
|
def to_hash: () -> Hash
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parser_node_ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01
|
11
|
+
date: 2023-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|