node_query 1.2.0 → 1.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/CHANGELOG.md +10 -0
- data/Gemfile.lock +9 -7
- data/README.md +437 -3
- data/lib/node_query/compiler/attribute.rb +1 -1
- data/lib/node_query/compiler/comparable.rb +10 -3
- data/lib/node_query/compiler/expression.rb +4 -10
- data/lib/node_query/compiler/expression_list.rb +11 -3
- data/lib/node_query/compiler/identifier.rb +1 -1
- data/lib/node_query/compiler/regexp.rb +7 -10
- data/lib/node_query/compiler/selector.rb +13 -4
- data/lib/node_query/compiler/string.rb +19 -0
- data/lib/node_query/compiler.rb +0 -1
- data/lib/node_query/helper.rb +47 -29
- data/lib/node_query/node_rules.rb +174 -0
- data/lib/node_query/version.rb +1 -1
- data/lib/node_query.rb +31 -6
- data/lib/node_query_lexer.rex +2 -5
- data/lib/node_query_lexer.rex.rb +19 -23
- data/lib/node_query_parser.racc.rb +74 -81
- data/lib/node_query_parser.y +1 -2
- data/node_query.gemspec +1 -1
- data/sig/node_query.rbs +4 -2
- metadata +7 -7
- data/lib/node_query/compiler/evaluated_value.rb +0 -50
@@ -22,86 +22,85 @@ class NodeQueryParser < Racc::Parser
|
|
22
22
|
##### State transition tables begin ###
|
23
23
|
|
24
24
|
racc_action_table = [
|
25
|
-
8, 8, 7, 9, 10,
|
25
|
+
8, 8, 7, 9, 10, 36, 12, 5, 6, 16,
|
26
26
|
27, 17, 21, 22, 23, 24, 29, 30, 31, 32,
|
27
|
-
33, 34, 35,
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
nil,
|
27
|
+
33, 34, 35, 8, 16, 8, 7, 40, 36, nil,
|
28
|
+
8, 5, 6, nil, 37, 36, nil, nil, nil, 29,
|
29
|
+
30, 31, 32, 33, 34, 35, 29, 30, 31, 32,
|
30
|
+
33, 34, 35, 8, 7, 8, 7, 8, 7, 5,
|
31
|
+
6, 5, 6, 5, 6, 8, 7, nil, nil, nil,
|
32
|
+
nil, 5, 6 ]
|
33
33
|
|
34
34
|
racc_action_check = [
|
35
35
|
24, 0, 0, 1, 2, 24, 5, 0, 0, 8,
|
36
36
|
24, 9, 16, 19, 20, 21, 24, 24, 24, 24,
|
37
|
-
24, 24, 24,
|
38
|
-
|
39
|
-
27, 27, 27, 27, 27, 27,
|
40
|
-
|
41
|
-
|
42
|
-
nil,
|
37
|
+
24, 24, 24, 27, 23, 3, 3, 38, 27, nil,
|
38
|
+
39, 3, 3, nil, 27, 39, nil, nil, nil, 27,
|
39
|
+
27, 27, 27, 27, 27, 27, 39, 39, 39, 39,
|
40
|
+
39, 39, 39, 6, 6, 7, 7, 10, 10, 6,
|
41
|
+
6, 7, 7, 10, 10, 12, 12, nil, nil, nil,
|
42
|
+
nil, 12, 12 ]
|
43
43
|
|
44
44
|
racc_action_pointer = [
|
45
|
-
-2, 3, 2,
|
46
|
-
|
47
|
-
2, -2, nil,
|
48
|
-
nil, nil, nil, nil, nil, nil, nil, nil,
|
49
|
-
|
45
|
+
-2, 3, 2, 22, nil, -9, 50, 52, -2, 11,
|
46
|
+
54, nil, 62, nil, nil, nil, 6, nil, nil, -3,
|
47
|
+
2, -2, nil, 13, -3, nil, nil, 20, nil, nil,
|
48
|
+
nil, nil, nil, nil, nil, nil, nil, nil, 13, 27,
|
49
|
+
nil, nil ]
|
50
50
|
|
51
51
|
racc_action_default = [
|
52
|
-
-
|
53
|
-
-
|
54
|
-
-
|
55
|
-
-20, -21, -22, -23, -24, -25, -26, -
|
56
|
-
-
|
52
|
+
-27, -27, -2, -4, -5, -27, -27, -27, -9, -27,
|
53
|
+
-27, -3, -27, -7, -8, -10, -27, 42, -1, -27,
|
54
|
+
-27, -27, -6, -12, -27, -11, -13, -27, -18, -19,
|
55
|
+
-20, -21, -22, -23, -24, -25, -26, -14, -27, -17,
|
56
|
+
-15, -16 ]
|
57
57
|
|
58
58
|
racc_goto_table = [
|
59
|
-
28,
|
60
|
-
nil, nil,
|
59
|
+
28, 15, 38, 28, 13, 14, 11, 1, 20, 26,
|
60
|
+
19, nil, nil, nil, 41, 28, 25, 18 ]
|
61
61
|
|
62
62
|
racc_goto_check = [
|
63
|
-
4,
|
64
|
-
nil, nil,
|
63
|
+
4, 5, 8, 4, 3, 3, 2, 1, 6, 7,
|
64
|
+
3, nil, nil, nil, 8, 4, 5, 1 ]
|
65
65
|
|
66
66
|
racc_goto_pointer = [
|
67
|
-
nil,
|
67
|
+
nil, 7, 3, -2, -24, -7, -8, -15, -25 ]
|
68
68
|
|
69
69
|
racc_goto_default = [
|
70
|
-
nil, nil, 2, 3, 4, nil, nil,
|
70
|
+
nil, nil, 2, 3, 4, nil, nil, 39, nil ]
|
71
71
|
|
72
72
|
racc_reduce_table = [
|
73
73
|
0, 0, :racc_error,
|
74
|
-
3,
|
75
|
-
1,
|
76
|
-
2,
|
77
|
-
1,
|
78
|
-
1,
|
79
|
-
4,
|
80
|
-
2,
|
81
|
-
2,
|
82
|
-
1,
|
83
|
-
2,
|
84
|
-
4,
|
85
|
-
3,
|
86
|
-
3,
|
87
|
-
4,
|
88
|
-
5,
|
89
|
-
2,
|
90
|
-
1,
|
91
|
-
1,
|
92
|
-
1,
|
93
|
-
1,
|
94
|
-
1,
|
95
|
-
1,
|
96
|
-
1,
|
97
|
-
1,
|
98
|
-
1,
|
99
|
-
1,
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
racc_shift_n = 43
|
74
|
+
3, 27, :_reduce_1,
|
75
|
+
1, 27, :_reduce_2,
|
76
|
+
2, 28, :_reduce_3,
|
77
|
+
1, 28, :_reduce_4,
|
78
|
+
1, 29, :_reduce_5,
|
79
|
+
4, 29, :_reduce_6,
|
80
|
+
2, 29, :_reduce_7,
|
81
|
+
2, 29, :_reduce_8,
|
82
|
+
1, 30, :_reduce_9,
|
83
|
+
2, 30, :_reduce_10,
|
84
|
+
4, 31, :_reduce_11,
|
85
|
+
3, 31, :_reduce_12,
|
86
|
+
3, 32, :_reduce_13,
|
87
|
+
4, 32, :_reduce_14,
|
88
|
+
5, 32, :_reduce_15,
|
89
|
+
2, 34, :_reduce_16,
|
90
|
+
1, 34, :_reduce_17,
|
91
|
+
1, 33, :_reduce_none,
|
92
|
+
1, 33, :_reduce_19,
|
93
|
+
1, 33, :_reduce_20,
|
94
|
+
1, 33, :_reduce_21,
|
95
|
+
1, 33, :_reduce_22,
|
96
|
+
1, 33, :_reduce_23,
|
97
|
+
1, 33, :_reduce_24,
|
98
|
+
1, 33, :_reduce_25,
|
99
|
+
1, 33, :_reduce_26 ]
|
100
|
+
|
101
|
+
racc_reduce_n = 27
|
102
|
+
|
103
|
+
racc_shift_n = 42
|
105
104
|
|
106
105
|
racc_token_table = {
|
107
106
|
false => 0,
|
@@ -123,16 +122,15 @@ racc_token_table = {
|
|
123
122
|
:tCLOSE_SELECTOR => 16,
|
124
123
|
:tOPERATOR => 17,
|
125
124
|
:tARRAY_VALUE => 18,
|
126
|
-
:
|
127
|
-
:
|
128
|
-
:
|
129
|
-
:
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:tSYMBOL => 26 }
|
125
|
+
:tBOOLEAN => 19,
|
126
|
+
:tFLOAT => 20,
|
127
|
+
:tINTEGER => 21,
|
128
|
+
:tNIL => 22,
|
129
|
+
:tREGEXP => 23,
|
130
|
+
:tSTRING => 24,
|
131
|
+
:tSYMBOL => 25 }
|
134
132
|
|
135
|
-
racc_nt_base =
|
133
|
+
racc_nt_base = 26
|
136
134
|
|
137
135
|
racc_use_result_var = false
|
138
136
|
|
@@ -172,7 +170,6 @@ Racc_token_to_s_table = [
|
|
172
170
|
"tCLOSE_SELECTOR",
|
173
171
|
"tOPERATOR",
|
174
172
|
"tARRAY_VALUE",
|
175
|
-
"tDYNAMIC_ATTRIBUTE",
|
176
173
|
"tBOOLEAN",
|
177
174
|
"tFLOAT",
|
178
175
|
"tINTEGER",
|
@@ -267,38 +264,34 @@ end
|
|
267
264
|
# reduce 18 omitted
|
268
265
|
|
269
266
|
def _reduce_19(val, _values)
|
270
|
-
NodeQuery::Compiler::EvaluatedValue.new(value: val[0])
|
271
|
-
end
|
272
|
-
|
273
|
-
def _reduce_20(val, _values)
|
274
267
|
NodeQuery::Compiler::Boolean.new(value: val[0])
|
275
268
|
end
|
276
269
|
|
277
|
-
def
|
270
|
+
def _reduce_20(val, _values)
|
278
271
|
NodeQuery::Compiler::Float.new(value: val[0])
|
279
272
|
end
|
280
273
|
|
281
|
-
def
|
274
|
+
def _reduce_21(val, _values)
|
282
275
|
NodeQuery::Compiler::Integer.new(value: val[0])
|
283
276
|
end
|
284
277
|
|
285
|
-
def
|
278
|
+
def _reduce_22(val, _values)
|
286
279
|
NodeQuery::Compiler::Nil.new(value: val[0])
|
287
280
|
end
|
288
281
|
|
289
|
-
def
|
282
|
+
def _reduce_23(val, _values)
|
290
283
|
NodeQuery::Compiler::Regexp.new(value: val[0])
|
291
284
|
end
|
292
285
|
|
293
|
-
def
|
286
|
+
def _reduce_24(val, _values)
|
294
287
|
NodeQuery::Compiler::String.new(value: val[0])
|
295
288
|
end
|
296
289
|
|
297
|
-
def
|
290
|
+
def _reduce_25(val, _values)
|
298
291
|
NodeQuery::Compiler::Symbol.new(value: val[0])
|
299
292
|
end
|
300
293
|
|
301
|
-
def
|
294
|
+
def _reduce_26(val, _values)
|
302
295
|
NodeQuery::Compiler::Identifier.new(value: val[0])
|
303
296
|
end
|
304
297
|
|
data/lib/node_query_parser.y
CHANGED
@@ -2,7 +2,7 @@ class NodeQueryParser
|
|
2
2
|
options no_result_var
|
3
3
|
token tCOMMA tNODE_TYPE tGOTO_SCOPE tATTRIBUTE tKEY tIDENTIFIER tIDENTIFIER_VALUE tPSEUDO_CLASS tRELATIONSHIP
|
4
4
|
tOPEN_ATTRIBUTE tCLOSE_ATTRIBUTE tOPEN_ARRAY tCLOSE_ARRAY tOPEN_SELECTOR tCLOSE_SELECTOR
|
5
|
-
tOPERATOR tARRAY_VALUE
|
5
|
+
tOPERATOR tARRAY_VALUE tBOOLEAN tFLOAT tINTEGER tNIL tREGEXP tSTRING tSYMBOL
|
6
6
|
rule
|
7
7
|
expression_list
|
8
8
|
: expression tCOMMA expression_list { NodeQuery::Compiler::ExpressionList.new(expression: val[0], rest: val[2]) }
|
@@ -37,7 +37,6 @@ rule
|
|
37
37
|
|
38
38
|
value
|
39
39
|
: basic_selector
|
40
|
-
| tDYNAMIC_ATTRIBUTE { NodeQuery::Compiler::EvaluatedValue.new(value: val[0]) }
|
41
40
|
| tBOOLEAN { NodeQuery::Compiler::Boolean.new(value: val[0]) }
|
42
41
|
| tFLOAT { NodeQuery::Compiler::Float.new(value: val[0]) }
|
43
42
|
| tINTEGER { NodeQuery::Compiler::Integer.new(value: val[0])}
|
data/node_query.gemspec
CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.require_paths = ["lib"]
|
30
30
|
|
31
31
|
# Uncomment to register a new dependency of your gem
|
32
|
-
spec.add_dependency "activesupport"
|
32
|
+
spec.add_dependency "activesupport", "< 7.0.0"
|
33
33
|
|
34
34
|
# For more information and examples about making a new gem, check out our
|
35
35
|
# guide at: https://bundler.io/guides/creating_gem.html
|
data/sig/node_query.rbs
CHANGED
@@ -5,7 +5,9 @@ class NodeQuery[T]
|
|
5
5
|
|
6
6
|
def self.adapter: () -> NodeQuery::Adapter
|
7
7
|
|
8
|
-
def initialize: (
|
8
|
+
def initialize: (nqlOrRues: String | Hash) -> NodeQuery
|
9
9
|
|
10
|
-
def
|
10
|
+
def query_nodes: (node: T, including_self: boolean) -> Array[T]
|
11
|
+
|
12
|
+
def match_node?: (node: T) -> boolean
|
11
13
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: node_query
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.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: 2022-
|
11
|
+
date: 2022-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "<"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 7.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 7.0.0
|
27
27
|
description: ast node query language
|
28
28
|
email:
|
29
29
|
- flyerhzm@gmail.com
|
@@ -47,7 +47,6 @@ files:
|
|
47
47
|
- lib/node_query/compiler/basic_selector.rb
|
48
48
|
- lib/node_query/compiler/boolean.rb
|
49
49
|
- lib/node_query/compiler/comparable.rb
|
50
|
-
- lib/node_query/compiler/evaluated_value.rb
|
51
50
|
- lib/node_query/compiler/expression.rb
|
52
51
|
- lib/node_query/compiler/expression_list.rb
|
53
52
|
- lib/node_query/compiler/float.rb
|
@@ -61,6 +60,7 @@ files:
|
|
61
60
|
- lib/node_query/compiler/string.rb
|
62
61
|
- lib/node_query/compiler/symbol.rb
|
63
62
|
- lib/node_query/helper.rb
|
63
|
+
- lib/node_query/node_rules.rb
|
64
64
|
- lib/node_query/parser_adapter.rb
|
65
65
|
- lib/node_query/version.rb
|
66
66
|
- lib/node_query_lexer.rex
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module NodeQuery::Compiler
|
4
|
-
# EvaluatedValue represents a ruby dynamic attribute.
|
5
|
-
# e.g. code is <code>{ a: a }</code>, query is <code>'.hash > .pair[key={{value}}]'</code>,
|
6
|
-
# <code>{{value}}</code> is the dynamic attribute.
|
7
|
-
class EvaluatedValue
|
8
|
-
include Comparable
|
9
|
-
|
10
|
-
attr_accessor :base_node
|
11
|
-
|
12
|
-
# Initialize an EvaluatedValue.
|
13
|
-
# @param value [String] the dynamic attribute value
|
14
|
-
def initialize(value:)
|
15
|
-
@value = value
|
16
|
-
end
|
17
|
-
|
18
|
-
# Get the actual value of a node.
|
19
|
-
# @param node [Node] the node
|
20
|
-
# @return [String] if node is a {Node}, return the node source code, otherwise return the node itself.
|
21
|
-
def actual_value(node)
|
22
|
-
if node.is_a?(::Parser::AST::Node)
|
23
|
-
NodeQuery.adapter.get_source(node)
|
24
|
-
else
|
25
|
-
node
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
# Get the expected value.
|
30
|
-
# @return [String] Query the node by @value from base_node, if the node is a {Node}, return the node source code, otherwise return the node itself.
|
31
|
-
def expected_value
|
32
|
-
node = NodeQuery::Helper.get_target_node(base_node, @value)
|
33
|
-
if node.is_a?(::Parser::AST::Node)
|
34
|
-
NodeQuery.adapter.get_source(node)
|
35
|
-
else
|
36
|
-
node
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Get valid operators.
|
41
|
-
# @return [Array] valid operators
|
42
|
-
def valid_operators
|
43
|
-
SIMPLE_VALID_OPERATORS
|
44
|
-
end
|
45
|
-
|
46
|
-
def to_s
|
47
|
-
"{{#{@value}}}"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|