@@ -95,6 +95,9 @@ func (p *jsonPathParser) setNodeChain() {
95
95
for _ , singleIdentifier := range multiIdentifier .identifiers {
96
96
singleIdentifier .setNext (nextNode )
97
97
}
98
+ if multiIdentifier .isAllWildcard {
99
+ multiIdentifier .unionQualifier .setNext (nextNode )
100
+ }
98
101
}
99
102
100
103
last .setNext (nextNode )
@@ -112,6 +115,12 @@ func (p *jsonPathParser) setConnectedText(targetNode syntaxNode) {
112
115
childText = targetNode .getNext ().getConnectedText ()
113
116
}
114
117
targetNode .setConnectedText (targetNode .getText () + childText )
118
+
119
+ if multiIdentifier , ok := targetNode .(* syntaxChildMultiIdentifier ); ok {
120
+ if multiIdentifier .isAllWildcard {
121
+ multiIdentifier .unionQualifier .setConnectedText (targetNode .getConnectedText ())
122
+ }
123
+ }
115
124
}
116
125
117
126
func (p * jsonPathParser ) updateRootValueGroup () {
@@ -150,6 +159,12 @@ func (p *jsonPathParser) deleteRootIdentifier(targetNode syntaxNode) syntaxNode
150
159
func (p * jsonPathParser ) setLastNodeText (text string ) {
151
160
node := p .params [len (p .params )- 1 ].(syntaxNode )
152
161
node .setText (text )
162
+
163
+ if multiIdentifier , ok := node .(* syntaxChildMultiIdentifier ); ok {
164
+ if multiIdentifier .isAllWildcard {
165
+ multiIdentifier .unionQualifier .setText (text )
166
+ }
167
+ }
153
168
}
154
169
155
170
func (p * jsonPathParser ) updateAccessorMode (checkNode syntaxNode , mode bool ) {
@@ -220,11 +235,27 @@ func (p *jsonPathParser) pushChildMultiIdentifier(
220
235
221
236
if multiIdentifier , ok := node .(* syntaxChildMultiIdentifier ); ok {
222
237
multiIdentifier .identifiers = append (multiIdentifier .identifiers , appendNode )
238
+
239
+ _ , isWildcard := appendNode .(* syntaxChildWildcardIdentifier )
240
+ multiIdentifier .isAllWildcard = multiIdentifier .isAllWildcard && isWildcard
241
+
242
+ if multiIdentifier .isAllWildcard {
243
+ multiIdentifier .unionQualifier .subscripts = append (
244
+ multiIdentifier .unionQualifier .subscripts ,
245
+ & syntaxWildcardSubscript {},
246
+ )
247
+ } else {
248
+ multiIdentifier .unionQualifier = syntaxUnionQualifier {}
249
+ }
250
+
223
251
p .push (multiIdentifier )
224
252
return
225
253
}
226
254
227
- p .push (& syntaxChildMultiIdentifier {
255
+ _ , isNodeWildcard := node .(* syntaxChildWildcardIdentifier )
256
+ _ , isAppendNodeWildcard := appendNode .(* syntaxChildWildcardIdentifier )
257
+
258
+ identifier := syntaxChildMultiIdentifier {
228
259
syntaxBasicNode : & syntaxBasicNode {
229
260
valueGroup : true ,
230
261
accessorMode : p .accessorMode ,
@@ -233,7 +264,23 @@ func (p *jsonPathParser) pushChildMultiIdentifier(
233
264
node ,
234
265
appendNode ,
235
266
},
236
- })
267
+ isAllWildcard : isNodeWildcard && isAppendNodeWildcard ,
268
+ }
269
+
270
+ if identifier .isAllWildcard {
271
+ identifier .unionQualifier = syntaxUnionQualifier {
272
+ syntaxBasicNode : & syntaxBasicNode {
273
+ valueGroup : true ,
274
+ accessorMode : p .accessorMode ,
275
+ },
276
+ subscripts : []syntaxSubscript {
277
+ & syntaxWildcardSubscript {},
278
+ & syntaxWildcardSubscript {},
279
+ },
280
+ }
281
+ }
282
+
283
+ p .push (& identifier )
237
284
}
238
285
239
286
func (p * jsonPathParser ) pushChildWildcardIdentifier () {
0 commit comments