node_query 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|