synvert-core 1.2.1 → 1.4.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.
@@ -25,213 +25,116 @@ module Synvert
25
25
  ##### State transition tables begin ###
26
26
 
27
27
  racc_action_table = [
28
- 8, 17, 9, 13, 51, 14, 18, 8, 19, 20,
29
- 22, 51, 43, 24, 41, 26, 8, 27, 18, 43,
30
- 51, 61, 62, 66, 73, 75, 76, 77, 43, 78,
31
- nil, nil, nil, 44, 45, 46, 47, 48, 49, 50,
32
- 44, 45, 46, 47, 48, 49, 50, nil, nil, 44,
33
- 45, 46, 47, 48, 49, 50, 8, nil, nil, nil,
34
- 51, nil, nil, 8, nil, nil, nil, 51, 43, nil,
35
- 8, nil, nil, nil, 51, 43, nil, nil, nil, nil,
36
- nil, nil, 43, nil, nil, nil, nil, nil, nil, 44,
37
- 45, 46, 47, 48, 49, 50, 44, 45, 46, 47,
38
- 48, 49, 50, 44, 45, 46, 47, 48, 49, 50,
39
- 8, nil, nil, nil, 51, nil, nil, 8, nil, nil,
40
- nil, 51, 43, nil, 8, nil, nil, nil, 51, 43,
41
- nil, 59, nil, nil, nil, nil, 43, nil, nil, nil,
42
- nil, nil, nil, 44, 45, 46, 47, 48, 49, 50,
43
- 44, 45, 46, 47, 48, 49, 50, 44, 45, 46,
44
- 47, 48, 49, 50, 8, nil, nil, nil, 51, nil,
45
- nil, 8, nil, nil, nil, 51, 43, nil, 8, 63,
46
- nil, nil, 51, 43, nil, nil, 67, nil, nil, nil,
47
- 43, nil, nil, 69, nil, nil, nil, 44, 45, 46,
48
- 47, 48, 49, 50, 44, 45, 46, 47, 48, 49,
49
- 50, 44, 45, 46, 47, 48, 49, 50, 8, nil,
50
- nil, nil, 51, nil, nil, 8, nil, nil, nil, 51,
51
- 43, nil, 8, 71, nil, nil, nil, 43, 6, 2,
52
- 3, 4, nil, nil, nil, nil, nil, nil, nil, nil,
53
- 5, 44, 45, 46, 47, 48, 49, 50, 44, 45,
54
- 46, 47, 48, 49, 50, 8, nil, nil, nil, 8,
55
- nil, 6, 2, 3, 4, 6, 2, 3, 4, nil,
56
- nil, nil, 8, 5, nil, nil, 8, 5, 6, 2,
57
- 3, 4, 6, 2, 3, 4, nil, nil, nil, 8,
58
- 5, nil, nil, 8, 5, 6, 2, 3, 4, 6,
59
- 2, 3, 4, nil, nil, nil, nil, 5, nil, nil,
60
- nil, 5, 35, 28, 30, 29, 32, 31, 34, 33,
61
- 38, 37, 36 ]
28
+ 7, 7, 6, 8, 10, 34, 14, 4, 5, 15,
29
+ 26, 18, 24, 19, 20, 21, 14, 38, 39, 27,
30
+ 28, 29, 30, 31, 32, 33, 7, 41, 7, 6,
31
+ nil, 34, nil, 7, 4, 5, 26, nil, 34, 35,
32
+ nil, nil, nil, 26, nil, 27, 28, 29, 30, 31,
33
+ 32, 33, 27, 28, 29, 30, 31, 32, 33, 7,
34
+ 6, 7, 6, 7, 6, 4, 5, 4, 5, 4,
35
+ 5 ]
62
36
 
63
37
  racc_action_check = [
64
- 28, 8, 1, 5, 28, 6, 8, 29, 9, 13,
65
- 16, 29, 28, 18, 28, 21, 30, 23, 27, 29,
66
- 30, 37, 38, 43, 64, 66, 68, 70, 30, 72,
67
- nil, nil, nil, 28, 28, 28, 28, 28, 28, 28,
68
- 29, 29, 29, 29, 29, 29, 29, nil, nil, 30,
69
- 30, 30, 30, 30, 30, 30, 31, nil, nil, nil,
70
- 31, nil, nil, 32, nil, nil, nil, 32, 31, nil,
71
- 33, nil, nil, nil, 33, 32, nil, nil, nil, nil,
72
- nil, nil, 33, nil, nil, nil, nil, nil, nil, 31,
73
- 31, 31, 31, 31, 31, 31, 32, 32, 32, 32,
74
- 32, 32, 32, 33, 33, 33, 33, 33, 33, 33,
75
- 34, nil, nil, nil, 34, nil, nil, 35, nil, nil,
76
- nil, 35, 34, nil, 36, nil, nil, nil, 36, 35,
77
- nil, 35, nil, nil, nil, nil, 36, nil, nil, nil,
78
- nil, nil, nil, 34, 34, 34, 34, 34, 34, 34,
79
- 35, 35, 35, 35, 35, 35, 35, 36, 36, 36,
80
- 36, 36, 36, 36, 41, nil, nil, nil, 41, nil,
81
- nil, 59, nil, nil, nil, 59, 41, nil, 61, 41,
82
- nil, nil, 61, 59, nil, nil, 59, nil, nil, nil,
83
- 61, nil, nil, 61, nil, nil, nil, 41, 41, 41,
84
- 41, 41, 41, 41, 59, 59, 59, 59, 59, 59,
85
- 59, 61, 61, 61, 61, 61, 61, 61, 62, nil,
86
- nil, nil, 62, nil, nil, 65, nil, nil, nil, 65,
87
- 62, nil, 0, 62, nil, nil, nil, 65, 0, 0,
88
- 0, 0, nil, nil, nil, nil, nil, nil, nil, nil,
89
- 0, 62, 62, 62, 62, 62, 62, 62, 65, 65,
90
- 65, 65, 65, 65, 65, 2, nil, nil, nil, 3,
91
- nil, 2, 2, 2, 2, 3, 3, 3, 3, nil,
92
- nil, nil, 4, 2, nil, nil, 7, 3, 4, 4,
93
- 4, 4, 7, 7, 7, 7, nil, nil, nil, 14,
94
- 4, nil, nil, 20, 7, 14, 14, 14, 14, 20,
95
- 20, 20, 20, nil, nil, nil, nil, 14, nil, nil,
96
- nil, 20, 24, 24, 24, 24, 24, 24, 24, 24,
97
- 24, 24, 24 ]
38
+ 21, 0, 0, 1, 4, 21, 7, 0, 0, 8,
39
+ 21, 14, 21, 16, 17, 18, 20, 26, 36, 21,
40
+ 21, 21, 21, 21, 21, 21, 24, 38, 2, 2,
41
+ nil, 24, nil, 37, 2, 2, 24, nil, 37, 24,
42
+ nil, nil, nil, 37, nil, 24, 24, 24, 24, 24,
43
+ 24, 24, 37, 37, 37, 37, 37, 37, 37, 5,
44
+ 5, 6, 6, 10, 10, 5, 5, 6, 6, 10,
45
+ 10 ]
98
46
 
99
47
  racc_action_pointer = [
100
- 230, 2, 263, 267, 280, -2, -13, 284, -6, 8,
101
- nil, nil, nil, -12, 297, nil, 3, nil, 9, nil,
102
- 301, -4, nil, 4, 300, nil, nil, 6, -2, 5,
103
- 14, 54, 61, 68, 108, 115, 122, 5, 6, nil,
104
- nil, 162, nil, -11, nil, nil, nil, nil, nil, nil,
105
- nil, nil, nil, nil, nil, nil, nil, nil, nil, 169,
106
- nil, 176, 216, nil, 7, 223, 10, nil, 9, nil,
107
- 10, nil, 12, nil, nil, nil, nil, nil, nil ]
48
+ -1, 3, 26, nil, -12, 57, 59, -4, 9, nil,
49
+ 61, nil, nil, nil, 6, nil, -4, 3, -3, nil,
50
+ 6, -2, nil, nil, 24, nil, -3, nil, nil, nil,
51
+ nil, nil, nil, nil, nil, nil, 3, 31, 14, nil,
52
+ nil, nil ]
108
53
 
109
54
  racc_action_default = [
110
- -43, -43, -43, -43, -43, -43, -43, -7, -11, -43,
111
- -1, -2, -3, -43, -43, -6, -10, -9, -43, 79,
112
- -43, -43, -8, -43, -43, -4, -5, -13, -43, -43,
113
- -43, -43, -43, -43, -43, -43, -43, -43, -43, -12,
114
- -14, -43, -33, -43, -35, -36, -37, -38, -39, -40,
115
- -41, -42, -15, -16, -17, -18, -19, -20, -21, -43,
116
- -22, -43, -43, -23, -43, -32, -43, -24, -43, -25,
117
- -43, -26, -43, -27, -31, -34, -28, -29, -30 ]
55
+ -26, -26, -2, -3, -26, -26, -26, -7, -26, -1,
56
+ -26, -5, -6, -8, -26, 42, -26, -26, -26, -4,
57
+ -10, -26, -9, -11, -26, -16, -26, -18, -19, -20,
58
+ -21, -22, -23, -24, -25, -12, -26, -15, -26, -13,
59
+ -14, -17 ]
118
60
 
119
61
  racc_goto_table = [
120
- 64, 23, 1, nil, 10, 11, 12, nil, nil, 15,
121
- 16, nil, nil, nil, nil, nil, 21, nil, 68, nil,
122
- 70, 72, 25, 7, 74, 7, 7, 7, nil, 39,
123
- 7, nil, nil, nil, nil, nil, nil, 7, nil, nil,
124
- nil, nil, nil, 7, 40, 52, 53, 54, 55, 56,
125
- 57, 58, 60 ]
62
+ 25, 13, 36, 25, 11, 12, 1, 17, 9, 16,
63
+ 23, nil, nil, nil, 22, 40, 25 ]
126
64
 
127
65
  racc_goto_check = [
128
- 6, 4, 1, nil, 1, 1, 1, nil, nil, 1,
129
- 3, nil, nil, nil, nil, nil, 1, nil, 6, nil,
130
- 6, 6, 1, 2, 6, 2, 2, 2, nil, 3,
131
- 2, nil, nil, nil, nil, nil, nil, 2, nil, nil,
132
- nil, nil, nil, 2, 5, 5, 5, 5, 5, 5,
133
- 5, 5, 5 ]
66
+ 3, 4, 7, 3, 2, 2, 1, 5, 1, 2,
67
+ 6, nil, nil, nil, 4, 7, 3 ]
134
68
 
135
69
  racc_goto_pointer = [
136
- nil, 2, 23, 2, -17, 16, -41 ]
70
+ nil, 6, -1, -21, -6, -7, -11, -22 ]
137
71
 
138
72
  racc_goto_default = [
139
- nil, nil, 42, nil, nil, 65, nil ]
73
+ nil, nil, 2, 3, nil, nil, 37, nil ]
140
74
 
141
75
  racc_reduce_table = [
142
76
  0, 0, :racc_error,
143
- 2, 43, :_reduce_1,
144
- 2, 43, :_reduce_2,
145
- 2, 43, :_reduce_3,
146
- 4, 43, :_reduce_4,
147
- 4, 43, :_reduce_5,
148
- 2, 43, :_reduce_6,
149
- 1, 43, :_reduce_7,
150
- 3, 44, :_reduce_8,
151
- 2, 44, :_reduce_9,
152
- 2, 44, :_reduce_10,
153
- 1, 44, :_reduce_11,
154
- 4, 45, :_reduce_12,
155
- 3, 45, :_reduce_13,
156
- 3, 46, :_reduce_14,
157
- 3, 46, :_reduce_15,
158
- 3, 46, :_reduce_16,
159
- 3, 46, :_reduce_17,
160
- 3, 46, :_reduce_18,
161
- 3, 46, :_reduce_19,
162
- 3, 46, :_reduce_20,
163
- 3, 46, :_reduce_21,
164
- 3, 46, :_reduce_22,
165
- 4, 46, :_reduce_23,
166
- 4, 46, :_reduce_24,
167
- 4, 46, :_reduce_25,
168
- 4, 46, :_reduce_26,
169
- 5, 46, :_reduce_27,
170
- 5, 46, :_reduce_28,
171
- 5, 46, :_reduce_29,
172
- 5, 46, :_reduce_30,
173
- 2, 48, :_reduce_31,
174
- 1, 48, :_reduce_32,
175
- 1, 47, :_reduce_none,
176
- 3, 47, :_reduce_34,
177
- 1, 47, :_reduce_35,
178
- 1, 47, :_reduce_36,
179
- 1, 47, :_reduce_37,
180
- 1, 47, :_reduce_38,
181
- 1, 47, :_reduce_39,
182
- 1, 47, :_reduce_40,
183
- 1, 47, :_reduce_41,
184
- 1, 47, :_reduce_42 ]
185
-
186
- racc_reduce_n = 43
187
-
188
- racc_shift_n = 79
77
+ 2, 29, :_reduce_1,
78
+ 1, 29, :_reduce_2,
79
+ 1, 30, :_reduce_3,
80
+ 4, 30, :_reduce_4,
81
+ 2, 30, :_reduce_5,
82
+ 2, 30, :_reduce_6,
83
+ 1, 31, :_reduce_7,
84
+ 2, 31, :_reduce_8,
85
+ 4, 32, :_reduce_9,
86
+ 3, 32, :_reduce_10,
87
+ 3, 33, :_reduce_11,
88
+ 4, 33, :_reduce_12,
89
+ 5, 33, :_reduce_13,
90
+ 2, 35, :_reduce_14,
91
+ 1, 35, :_reduce_15,
92
+ 1, 34, :_reduce_none,
93
+ 3, 34, :_reduce_17,
94
+ 1, 34, :_reduce_18,
95
+ 1, 34, :_reduce_19,
96
+ 1, 34, :_reduce_20,
97
+ 1, 34, :_reduce_21,
98
+ 1, 34, :_reduce_22,
99
+ 1, 34, :_reduce_23,
100
+ 1, 34, :_reduce_24,
101
+ 1, 34, :_reduce_25 ]
102
+
103
+ racc_reduce_n = 26
104
+
105
+ racc_shift_n = 42
189
106
 
190
107
  racc_token_table = {
191
108
  false => 0,
192
109
  :error => 1,
193
110
  :tNODE_TYPE => 2,
194
- :tATTRIBUTE => 3,
195
- :tKEY => 4,
196
- :tIDENTIFIER => 5,
197
- :tIDENTIFIER_VALUE => 6,
198
- :tINDEX => 7,
111
+ :tGOTO_SCOPE => 3,
112
+ :tATTRIBUTE => 4,
113
+ :tKEY => 5,
114
+ :tIDENTIFIER => 6,
115
+ :tIDENTIFIER_VALUE => 7,
199
116
  :tPSEUDO_CLASS => 8,
200
- :tCHILD => 9,
201
- :tSUBSEQUENT_SIBLING => 10,
202
- :tNEXT_SIBLING => 11,
203
- :tOPEN_ATTRIBUTE => 12,
204
- :tCLOSE_ATTRIBUTE => 13,
205
- :tOPEN_DYNAMIC_ATTRIBUTE => 14,
206
- :tCLOSE_DYNAMIC_ATTRIBUTE => 15,
207
- :tOPEN_ARRAY => 16,
208
- :tCLOSE_ARRAY => 17,
209
- :tOPEN_SELECTOR => 18,
210
- :tCLOSE_SELECTOR => 19,
211
- :tOPEN_GOTO_SCOPE => 20,
212
- :tCLOSE_GOTO_SCOPE => 21,
213
- :tEQUAL => 22,
214
- :tNOT_EQUAL => 23,
215
- :tMATCH => 24,
216
- :tNOT_MATCH => 25,
217
- :tGREATER_THAN => 26,
218
- :tGREATER_THAN_OR_EQUAL => 27,
219
- :tLESS_THAN => 28,
220
- :tLESS_THAN_OR_EQUAL => 29,
221
- :tIN => 30,
222
- :tNOT_IN => 31,
223
- :tINCLUDES => 32,
224
- :tARRAY_VALUE => 33,
225
- :tDYNAMIC_ATTRIBUTE => 34,
226
- :tBOOLEAN => 35,
227
- :tFLOAT => 36,
228
- :tINTEGER => 37,
229
- :tNIL => 38,
230
- :tREGEXP => 39,
231
- :tSTRING => 40,
232
- :tSYMBOL => 41 }
233
-
234
- racc_nt_base = 42
117
+ :tRELATIONSHIP => 9,
118
+ :tOPEN_ATTRIBUTE => 10,
119
+ :tCLOSE_ATTRIBUTE => 11,
120
+ :tOPEN_DYNAMIC_ATTRIBUTE => 12,
121
+ :tCLOSE_DYNAMIC_ATTRIBUTE => 13,
122
+ :tOPEN_ARRAY => 14,
123
+ :tCLOSE_ARRAY => 15,
124
+ :tOPEN_SELECTOR => 16,
125
+ :tCLOSE_SELECTOR => 17,
126
+ :tOPERATOR => 18,
127
+ :tARRAY_VALUE => 19,
128
+ :tDYNAMIC_ATTRIBUTE => 20,
129
+ :tBOOLEAN => 21,
130
+ :tFLOAT => 22,
131
+ :tINTEGER => 23,
132
+ :tNIL => 24,
133
+ :tREGEXP => 25,
134
+ :tSTRING => 26,
135
+ :tSYMBOL => 27 }
136
+
137
+ racc_nt_base = 28
235
138
 
236
139
  racc_use_result_var = false
237
140
 
@@ -255,15 +158,13 @@ Racc_token_to_s_table = [
255
158
  "$end",
256
159
  "error",
257
160
  "tNODE_TYPE",
161
+ "tGOTO_SCOPE",
258
162
  "tATTRIBUTE",
259
163
  "tKEY",
260
164
  "tIDENTIFIER",
261
165
  "tIDENTIFIER_VALUE",
262
- "tINDEX",
263
166
  "tPSEUDO_CLASS",
264
- "tCHILD",
265
- "tSUBSEQUENT_SIBLING",
266
- "tNEXT_SIBLING",
167
+ "tRELATIONSHIP",
267
168
  "tOPEN_ATTRIBUTE",
268
169
  "tCLOSE_ATTRIBUTE",
269
170
  "tOPEN_DYNAMIC_ATTRIBUTE",
@@ -272,19 +173,7 @@ Racc_token_to_s_table = [
272
173
  "tCLOSE_ARRAY",
273
174
  "tOPEN_SELECTOR",
274
175
  "tCLOSE_SELECTOR",
275
- "tOPEN_GOTO_SCOPE",
276
- "tCLOSE_GOTO_SCOPE",
277
- "tEQUAL",
278
- "tNOT_EQUAL",
279
- "tMATCH",
280
- "tNOT_MATCH",
281
- "tGREATER_THAN",
282
- "tGREATER_THAN_OR_EQUAL",
283
- "tLESS_THAN",
284
- "tLESS_THAN_OR_EQUAL",
285
- "tIN",
286
- "tNOT_IN",
287
- "tINCLUDES",
176
+ "tOPERATOR",
288
177
  "tARRAY_VALUE",
289
178
  "tDYNAMIC_ATTRIBUTE",
290
179
  "tBOOLEAN",
@@ -297,6 +186,7 @@ Racc_token_to_s_table = [
297
186
  "$start",
298
187
  "expression",
299
188
  "selector",
189
+ "basic_selector",
300
190
  "attribute_list",
301
191
  "attribute",
302
192
  "value",
@@ -309,168 +199,100 @@ Racc_debug_parser = false
309
199
  # reduce 0 omitted
310
200
 
311
201
  def _reduce_1(val, _values)
312
- Compiler::Expression.new(rest: val[1], relationship: :child)
202
+ Compiler::Expression.new(selector: val[0], rest: val[1])
313
203
  end
314
204
 
315
205
  def _reduce_2(val, _values)
316
- Compiler::Expression.new(rest: val[1], relationship: :subsequent_sibling)
206
+ Compiler::Expression.new(selector: val[0])
317
207
  end
318
208
 
319
209
  def _reduce_3(val, _values)
320
- Compiler::Expression.new(rest: val[1], relationship: :next_sibling)
210
+ Compiler::Selector.new(basic_selector: val[0])
321
211
  end
322
212
 
323
213
  def _reduce_4(val, _values)
324
- Compiler::Expression.new(goto_scope: val[1], rest: val[3])
214
+ Compiler::Selector.new(pseudo_class: val[0], pseudo_selector: val[2])
325
215
  end
326
216
 
327
217
  def _reduce_5(val, _values)
328
- Compiler::Expression.new(relationship: val[0].to_sym, rest: val[2])
218
+ Compiler::Selector.new(relationship: val[0], rest: val[1])
329
219
  end
330
220
 
331
221
  def _reduce_6(val, _values)
332
- Compiler::Expression.new(selector: val[0], rest: val[1])
222
+ Compiler::Selector.new(goto_scope: val[0], rest: val[1])
333
223
  end
334
224
 
335
225
  def _reduce_7(val, _values)
336
- Compiler::Expression.new(selector: val[0])
226
+ Compiler::BasicSelector.new(node_type: val[0])
337
227
  end
338
228
 
339
229
  def _reduce_8(val, _values)
340
- Compiler::Selector.new(node_type: val[0], attribute_list: val[1], index: val[2])
230
+ Compiler::BasicSelector.new(node_type: val[0], attribute_list: val[1])
341
231
  end
342
232
 
343
233
  def _reduce_9(val, _values)
344
- Compiler::Selector.new(node_type: val[0], index: val[1])
234
+ Compiler::AttributeList.new(attribute: val[1], rest: val[3])
345
235
  end
346
236
 
347
237
  def _reduce_10(val, _values)
348
- Compiler::Selector.new(node_type: val[0], attribute_list: val[1])
238
+ Compiler::AttributeList.new(attribute: val[1])
349
239
  end
350
240
 
351
241
  def _reduce_11(val, _values)
352
- Compiler::Selector.new(node_type: val[0])
242
+ Compiler::Attribute.new(key: val[0], value: val[2], operator: val[1])
353
243
  end
354
244
 
355
245
  def _reduce_12(val, _values)
356
- Compiler::AttributeList.new(attribute: val[1], rest: val[3])
246
+ Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: val[1])
357
247
  end
358
248
 
359
249
  def _reduce_13(val, _values)
360
- Compiler::AttributeList.new(attribute: val[1])
250
+ Compiler::Attribute.new(key: val[0], value: val[3], operator: val[1])
361
251
  end
362
252
 
363
253
  def _reduce_14(val, _values)
364
- Compiler::Attribute.new(key: val[0], value: val[2], operator: :!=)
365
- end
366
-
367
- def _reduce_15(val, _values)
368
- Compiler::Attribute.new(key: val[0], value: val[2], operator: :!~)
369
- end
370
-
371
- def _reduce_16(val, _values)
372
- Compiler::Attribute.new(key: val[0], value: val[2], operator: :=~)
373
- end
374
-
375
- def _reduce_17(val, _values)
376
- Compiler::Attribute.new(key: val[0], value: val[2], operator: :>=)
377
- end
378
-
379
- def _reduce_18(val, _values)
380
- Compiler::Attribute.new(key: val[0], value: val[2], operator: :>)
381
- end
382
-
383
- def _reduce_19(val, _values)
384
- Compiler::Attribute.new(key: val[0], value: val[2], operator: :<=)
385
- end
386
-
387
- def _reduce_20(val, _values)
388
- Compiler::Attribute.new(key: val[0], value: val[2], operator: :<)
389
- end
390
-
391
- def _reduce_21(val, _values)
392
- Compiler::Attribute.new(key: val[0], value: val[2], operator: :==)
393
- end
394
-
395
- def _reduce_22(val, _values)
396
- Compiler::Attribute.new(key: val[0], value: val[2], operator: :includes)
397
- end
398
-
399
- def _reduce_23(val, _values)
400
- Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: :!=)
401
- end
402
-
403
- def _reduce_24(val, _values)
404
- Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: :==)
405
- end
406
-
407
- def _reduce_25(val, _values)
408
- Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: :not_in)
409
- end
410
-
411
- def _reduce_26(val, _values)
412
- Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: :in)
413
- end
414
-
415
- def _reduce_27(val, _values)
416
- Compiler::Attribute.new(key: val[0], value: val[3], operator: :!=)
417
- end
418
-
419
- def _reduce_28(val, _values)
420
- Compiler::Attribute.new(key: val[0], value: val[3], operator: :==)
421
- end
422
-
423
- def _reduce_29(val, _values)
424
- Compiler::Attribute.new(key: val[0], value: val[3], operator: :not_in)
425
- end
426
-
427
- def _reduce_30(val, _values)
428
- Compiler::Attribute.new(key: val[0], value: val[3], operator: :in)
429
- end
430
-
431
- def _reduce_31(val, _values)
432
254
  Compiler::Array.new(value: val[0], rest: val[1])
433
255
  end
434
256
 
435
- def _reduce_32(val, _values)
257
+ def _reduce_15(val, _values)
436
258
  Compiler::Array.new(value: val[0])
437
259
  end
438
260
 
439
- # reduce 33 omitted
261
+ # reduce 16 omitted
440
262
 
441
- def _reduce_34(val, _values)
263
+ def _reduce_17(val, _values)
442
264
  Compiler::DynamicAttribute.new(value: val[1])
443
265
  end
444
266
 
445
- def _reduce_35(val, _values)
267
+ def _reduce_18(val, _values)
446
268
  Compiler::Boolean.new(value: val[0])
447
269
  end
448
270
 
449
- def _reduce_36(val, _values)
271
+ def _reduce_19(val, _values)
450
272
  Compiler::Float.new(value: val[0])
451
273
  end
452
274
 
453
- def _reduce_37(val, _values)
275
+ def _reduce_20(val, _values)
454
276
  Compiler::Integer.new(value: val[0])
455
277
  end
456
278
 
457
- def _reduce_38(val, _values)
279
+ def _reduce_21(val, _values)
458
280
  Compiler::Nil.new(value: val[0])
459
281
  end
460
282
 
461
- def _reduce_39(val, _values)
283
+ def _reduce_22(val, _values)
462
284
  Compiler::Regexp.new(value: val[0])
463
285
  end
464
286
 
465
- def _reduce_40(val, _values)
287
+ def _reduce_23(val, _values)
466
288
  Compiler::String.new(value: val[0])
467
289
  end
468
290
 
469
- def _reduce_41(val, _values)
291
+ def _reduce_24(val, _values)
470
292
  Compiler::Symbol.new(value: val[0])
471
293
  end
472
294
 
473
- def _reduce_42(val, _values)
295
+ def _reduce_25(val, _values)
474
296
  Compiler::Identifier.new(value: val[0])
475
297
  end
476
298
 
@@ -1,58 +1,39 @@
1
1
  class Synvert::Core::NodeQuery::Parser
2
2
  options no_result_var
3
- token tNODE_TYPE tATTRIBUTE tKEY tIDENTIFIER tIDENTIFIER_VALUE tINDEX tPSEUDO_CLASS
4
- tCHILD tSUBSEQUENT_SIBLING tNEXT_SIBLING
3
+ token tNODE_TYPE tGOTO_SCOPE tATTRIBUTE tKEY tIDENTIFIER tIDENTIFIER_VALUE tPSEUDO_CLASS tRELATIONSHIP
5
4
  tOPEN_ATTRIBUTE tCLOSE_ATTRIBUTE tOPEN_DYNAMIC_ATTRIBUTE tCLOSE_DYNAMIC_ATTRIBUTE
6
- tOPEN_ARRAY tCLOSE_ARRAY tOPEN_SELECTOR tCLOSE_SELECTOR tOPEN_GOTO_SCOPE tCLOSE_GOTO_SCOPE
7
- tEQUAL tNOT_EQUAL tMATCH tNOT_MATCH tGREATER_THAN tGREATER_THAN_OR_EQUAL tLESS_THAN tLESS_THAN_OR_EQUAL tIN tNOT_IN tINCLUDES
8
- tARRAY_VALUE tDYNAMIC_ATTRIBUTE tBOOLEAN tFLOAT tINTEGER tNIL tREGEXP tSTRING tSYMBOL
5
+ tOPEN_ARRAY tCLOSE_ARRAY tOPEN_SELECTOR tCLOSE_SELECTOR
6
+ tOPERATOR tARRAY_VALUE tDYNAMIC_ATTRIBUTE tBOOLEAN tFLOAT tINTEGER tNIL tREGEXP tSTRING tSYMBOL
9
7
  rule
10
8
  expression
11
- : tCHILD expression { Compiler::Expression.new(rest: val[1], relationship: :child) }
12
- | tSUBSEQUENT_SIBLING expression { Compiler::Expression.new(rest: val[1], relationship: :subsequent_sibling) }
13
- | tNEXT_SIBLING expression { Compiler::Expression.new(rest: val[1], relationship: :next_sibling) }
14
- | tOPEN_GOTO_SCOPE tIDENTIFIER tCLOSE_GOTO_SCOPE expression { Compiler::Expression.new(goto_scope: val[1], rest: val[3]) }
15
- | tPSEUDO_CLASS tOPEN_SELECTOR expression tCLOSE_SELECTOR { Compiler::Expression.new(relationship: val[0].to_sym, rest: val[2]) }
16
- | selector expression { Compiler::Expression.new(selector: val[0], rest: val[1]) }
9
+ : selector expression { Compiler::Expression.new(selector: val[0], rest: val[1]) }
17
10
  | selector { Compiler::Expression.new(selector: val[0]) }
18
11
 
19
12
  selector
20
- : tNODE_TYPE attribute_list tINDEX { Compiler::Selector.new(node_type: val[0], attribute_list: val[1], index: val[2]) }
21
- | tNODE_TYPE tINDEX { Compiler::Selector.new(node_type: val[0], index: val[1]) }
22
- | tNODE_TYPE attribute_list { Compiler::Selector.new(node_type: val[0], attribute_list: val[1]) }
23
- | tNODE_TYPE { Compiler::Selector.new(node_type: val[0]) }
24
- ;
13
+ : basic_selector { Compiler::Selector.new(basic_selector: val[0]) }
14
+ | tPSEUDO_CLASS tOPEN_SELECTOR selector tCLOSE_SELECTOR { Compiler::Selector.new(pseudo_class: val[0], pseudo_selector: val[2]) }
15
+ | tRELATIONSHIP selector { Compiler::Selector.new(relationship: val[0], rest: val[1]) }
16
+ | tGOTO_SCOPE selector { Compiler::Selector.new(goto_scope: val[0], rest: val[1]) }
17
+
18
+ basic_selector
19
+ : tNODE_TYPE { Compiler::BasicSelector.new(node_type: val[0]) }
20
+ | tNODE_TYPE attribute_list { Compiler::BasicSelector.new(node_type: val[0], attribute_list: val[1]) }
25
21
 
26
22
  attribute_list
27
23
  : tOPEN_ATTRIBUTE attribute tCLOSE_ATTRIBUTE attribute_list { Compiler::AttributeList.new(attribute: val[1], rest: val[3]) }
28
24
  | tOPEN_ATTRIBUTE attribute tCLOSE_ATTRIBUTE { Compiler::AttributeList.new(attribute: val[1]) }
29
- ;
30
25
 
31
26
  attribute
32
- : tKEY tNOT_EQUAL value { Compiler::Attribute.new(key: val[0], value: val[2], operator: :!=) }
33
- | tKEY tNOT_MATCH value { Compiler::Attribute.new(key: val[0], value: val[2], operator: :!~) }
34
- | tKEY tMATCH value { Compiler::Attribute.new(key: val[0], value: val[2], operator: :=~) }
35
- | tKEY tGREATER_THAN_OR_EQUAL value { Compiler::Attribute.new(key: val[0], value: val[2], operator: :>=) }
36
- | tKEY tGREATER_THAN value { Compiler::Attribute.new(key: val[0], value: val[2], operator: :>) }
37
- | tKEY tLESS_THAN_OR_EQUAL value { Compiler::Attribute.new(key: val[0], value: val[2], operator: :<=) }
38
- | tKEY tLESS_THAN value { Compiler::Attribute.new(key: val[0], value: val[2], operator: :<) }
39
- | tKEY tEQUAL value { Compiler::Attribute.new(key: val[0], value: val[2], operator: :==) }
40
- | tKEY tINCLUDES value { Compiler::Attribute.new(key: val[0], value: val[2], operator: :includes) }
41
- | tKEY tNOT_EQUAL tOPEN_ARRAY tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: :!=) }
42
- | tKEY tEQUAL tOPEN_ARRAY tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: :==) }
43
- | tKEY tNOT_IN tOPEN_ARRAY tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: :not_in) }
44
- | tKEY tIN tOPEN_ARRAY tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: :in) }
45
- | tKEY tNOT_EQUAL tOPEN_ARRAY array_value tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: val[3], operator: :!=) }
46
- | tKEY tEQUAL tOPEN_ARRAY array_value tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: val[3], operator: :==) }
47
- | tKEY tNOT_IN tOPEN_ARRAY array_value tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: val[3], operator: :not_in) }
48
- | tKEY tIN tOPEN_ARRAY array_value tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: val[3], operator: :in) }
27
+ : tKEY tOPERATOR value { Compiler::Attribute.new(key: val[0], value: val[2], operator: val[1]) }
28
+ | tKEY tOPERATOR tOPEN_ARRAY tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: Compiler::Array.new, operator: val[1]) }
29
+ | tKEY tOPERATOR tOPEN_ARRAY array_value tCLOSE_ARRAY { Compiler::Attribute.new(key: val[0], value: val[3], operator: val[1]) }
49
30
 
50
31
  array_value
51
32
  : value array_value { Compiler::Array.new(value: val[0], rest: val[1]) }
52
33
  | value { Compiler::Array.new(value: val[0]) }
53
34
 
54
35
  value
55
- : selector
36
+ : basic_selector
56
37
  | tOPEN_DYNAMIC_ATTRIBUTE tDYNAMIC_ATTRIBUTE tCLOSE_DYNAMIC_ATTRIBUTE { Compiler::DynamicAttribute.new(value: val[1]) }
57
38
  | tBOOLEAN { Compiler::Boolean.new(value: val[0]) }
58
39
  | tFLOAT { Compiler::Float.new(value: val[0]) }
@@ -9,12 +9,10 @@
9
9
  # * attribute regex: <code>.send[key=~/\A:([^'"]+)\z/]</code>, <code>.send[key!~/\A:([^'"]+)\z/]</code>
10
10
  # * attribute conditions: +.send[message != nil]+, +.send[value > 1]+, +.send[value >= 1]+, +.send[value < 1]+, +.send[value <= 1]+
11
11
  # * nested attribute: +.send[caller.message = map]+, +.send[arguments.size = 2]+
12
- # * first or last child: +.def:first-child+, +.send:last-child+
13
- # * nth-child or nth-last-child: +.def:nth-child(2)+, +.send:nth-last-child(2)+
14
12
  # * descendant: +.class .send+
15
13
  # * child: +.class > .def+
16
- # * following sibling: <code>.def:first-child + .def</code>
17
- # * subsequnt sibling: +.def:first-child ~ .def+
14
+ # * following sibling: <code>.def + .def</code>
15
+ # * subsequnt sibling: +.def ~ .def+
18
16
  # * has: +.class:has(.def)+
19
17
  #
20
18
  # It also supports some custom selectors:
@@ -26,6 +24,7 @@
26
24
  # * NOT IN operator: +.send[message NOT IN (create build)]+
27
25
  # * INCLUDES operator: +.send[arguments INCLUDES &block]+
28
26
  # * dynamic attribute value: +.hash > .pair[key={{value}}]+
27
+ # * goto scope: +.class body > .def+
29
28
  #
30
29
  # @example
31
30
  # # it matches methods call nodes, like `puts message` or `p message`
@@ -7,9 +7,11 @@ module Synvert::Core
7
7
  #
8
8
  # @param instance [Synvert::Core::Rewriter::Instance]
9
9
  # @param selectors [Array<Symbol, String>] used to select child nodes
10
- def initialize(instance, *selectors)
10
+ # @option and_comma [Boolean] delete extra comma.
11
+ def initialize(instance, *selectors, and_comma: false)
11
12
  super(instance, nil)
12
13
  @selectors = selectors
14
+ @and_comma = and_comma
13
15
  end
14
16
 
15
17
  # The rewritten code, always empty string.
@@ -26,7 +28,7 @@ module Synvert::Core
26
28
  @end_pos = @selectors.map { |selector| @node.child_node_range(selector) }
27
29
  .compact.map(&:end_pos).max
28
30
  squeeze_spaces
29
- remove_comma
31
+ remove_comma if @and_comma
30
32
  end
31
33
  end
32
34
  end