File tree Expand file tree Collapse file tree
crates/plotnik-lib/src/ql Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -100,13 +100,15 @@ fn reference() {
100100#[ test]
101101fn alternation_unlabeled ( ) {
102102 let query = Query :: new ( "[(identifier) (number)]" ) ;
103- insta:: assert_snapshot!( query. snapshot_ast( ) , @r# "
103+ insta:: assert_snapshot!( query. snapshot_ast( ) , @r"
104104 Root
105105 Def
106106 Alt
107- Tree identifier
108- Tree number
109- "# ) ;
107+ Branch
108+ Tree identifier
109+ Branch
110+ Tree number
111+ " ) ;
110112}
111113
112114#[ test]
Original file line number Diff line number Diff line change @@ -385,7 +385,9 @@ impl Parser<'_> {
385385 self . parse_branch_lowercase_label ( ) ;
386386 }
387387 } else if EXPR_FIRST . contains ( kind) {
388+ self . start_node ( SyntaxKind :: Branch ) ;
388389 self . parse_expr ( ) ;
390+ self . finish_node ( ) ;
389391 } else if ALT_RECOVERY . contains ( kind) {
390392 break ;
391393 } else {
Original file line number Diff line number Diff line change @@ -17,14 +17,16 @@ fn alternation() {
1717 Def
1818 Alt
1919 BracketOpen "["
20- Tree
21- ParenOpen "("
22- Id "identifier"
23- ParenClose ")"
24- Tree
25- ParenOpen "("
26- Id "string"
27- ParenClose ")"
20+ Branch
21+ Tree
22+ ParenOpen "("
23+ Id "identifier"
24+ ParenClose ")"
25+ Branch
26+ Tree
27+ ParenOpen "("
28+ Id "string"
29+ ParenClose ")"
2830 BracketClose "]"
2931 "# ) ;
3032}
@@ -41,10 +43,12 @@ fn alternation_with_anonymous() {
4143 Def
4244 Alt
4345 BracketOpen "["
44- Lit
45- StringLit "\"true\""
46- Lit
47- StringLit "\"false\""
46+ Branch
47+ Lit
48+ StringLit "\"true\""
49+ Branch
50+ Lit
51+ StringLit "\"false\""
4852 BracketClose "]"
4953 "# ) ;
5054}
@@ -62,17 +66,53 @@ fn alternation_with_capture() {
6266 Capture
6367 Alt
6468 BracketOpen "["
69+ Branch
70+ Tree
71+ ParenOpen "("
72+ Id "identifier"
73+ ParenClose ")"
74+ Branch
75+ Tree
76+ ParenOpen "("
77+ Id "string"
78+ ParenClose ")"
79+ BracketClose "]"
80+ At "@"
81+ Id "value"
82+ "# ) ;
83+ }
84+
85+ #[ test]
86+ fn alternation_with_quantifier ( ) {
87+ let input = indoc ! { r#"
88+ [
89+ (identifier)
90+ (string)* @strings
91+ ]
92+ "# } ;
93+
94+ let query = Query :: new ( input) ;
95+ insta:: assert_snapshot!( query. snapshot_cst( ) , @r#"
96+ Root
97+ Def
98+ Alt
99+ BracketOpen "["
100+ Branch
65101 Tree
66102 ParenOpen "("
67103 Id "identifier"
68104 ParenClose ")"
69- Tree
70- ParenOpen "("
71- Id "string"
72- ParenClose ")"
73- BracketClose "]"
74- At "@"
75- Id "value"
105+ Branch
106+ Capture
107+ Quantifier
108+ Tree
109+ ParenOpen "("
110+ Id "string"
111+ ParenClose ")"
112+ Star "*"
113+ At "@"
114+ Id "strings"
115+ BracketClose "]"
76116 "# ) ;
77117}
78118
@@ -92,14 +132,16 @@ fn alternation_nested() {
92132 Id "expr"
93133 Alt
94134 BracketOpen "["
95- Tree
96- ParenOpen "("
97- Id "binary"
98- ParenClose ")"
99- Tree
100- ParenOpen "("
101- Id "unary"
102- ParenClose ")"
135+ Branch
136+ Tree
137+ ParenOpen "("
138+ Id "binary"
139+ ParenClose ")"
140+ Branch
141+ Tree
142+ ParenOpen "("
143+ Id "unary"
144+ ParenClose ")"
103145 BracketClose "]"
104146 ParenClose ")"
105147 "# ) ;
@@ -124,14 +166,16 @@ fn alternation_in_field() {
124166 Colon ":"
125167 Alt
126168 BracketOpen "["
127- Tree
128- ParenOpen "("
129- Id "string"
130- ParenClose ")"
131- Tree
132- ParenOpen "("
133- Id "number"
134- ParenClose ")"
169+ Branch
170+ Tree
171+ ParenOpen "("
172+ Id "string"
173+ ParenClose ")"
174+ Branch
175+ Tree
176+ ParenOpen "("
177+ Id "number"
178+ ParenClose ")"
135179 BracketClose "]"
136180 ParenClose ")"
137181 "# ) ;
@@ -149,18 +193,21 @@ fn unlabeled_alternation_three_items() {
149193 Def
150194 Alt
151195 BracketOpen "["
152- Tree
153- ParenOpen "("
154- Id "identifier"
155- ParenClose ")"
156- Tree
157- ParenOpen "("
158- Id "number"
159- ParenClose ")"
160- Tree
161- ParenOpen "("
162- Id "string"
163- ParenClose ")"
196+ Branch
197+ Tree
198+ ParenOpen "("
199+ Id "identifier"
200+ ParenClose ")"
201+ Branch
202+ Tree
203+ ParenOpen "("
204+ Id "number"
205+ ParenClose ")"
206+ Branch
207+ Tree
208+ ParenOpen "("
209+ Id "string"
210+ ParenClose ")"
164211 BracketClose "]"
165212 "# ) ;
166213}
@@ -177,14 +224,16 @@ fn upper_ident_in_alternation_not_followed_by_colon() {
177224 Def
178225 Alt
179226 BracketOpen "["
180- Ref
181- ParenOpen "("
182- Id "Expr"
183- ParenClose ")"
184- Ref
185- ParenOpen "("
186- Id "Statement"
187- ParenClose ")"
227+ Branch
228+ Ref
229+ ParenOpen "("
230+ Id "Expr"
231+ ParenClose ")"
232+ Branch
233+ Ref
234+ ParenOpen "("
235+ Id "Statement"
236+ ParenClose ")"
188237 BracketClose "]"
189238 ---
190239 error: undefined reference: `Expr`
@@ -555,10 +604,11 @@ fn mixed_tagged_and_untagged() {
555604 ParenOpen "("
556605 Id "a"
557606 ParenClose ")"
558- Tree
559- ParenOpen "("
560- Id "b"
561- ParenClose ")"
607+ Branch
608+ Tree
609+ ParenOpen "("
610+ Id "b"
611+ ParenClose ")"
562612 Branch
563613 Id "Another"
564614 Colon ":"
@@ -590,14 +640,16 @@ fn tagged_alternation_with_nested_alternation() {
590640 Colon ":"
591641 Alt
592642 BracketOpen "["
593- Tree
594- ParenOpen "("
595- Id "number"
596- ParenClose ")"
597- Tree
598- ParenOpen "("
599- Id "string"
600- ParenClose ")"
643+ Branch
644+ Tree
645+ ParenOpen "("
646+ Id "number"
647+ ParenClose ")"
648+ Branch
649+ Tree
650+ ParenOpen "("
651+ Id "string"
652+ ParenClose ")"
601653 BracketClose "]"
602654 Branch
603655 Id "Ident"
Original file line number Diff line number Diff line change @@ -258,14 +258,16 @@ fn alternation_capture_with_type() {
258258 Capture
259259 Alt
260260 BracketOpen "["
261- Tree
262- ParenOpen "("
263- Id "identifier"
264- ParenClose ")"
265- Tree
266- ParenOpen "("
267- Id "number"
268- ParenClose ")"
261+ Branch
262+ Tree
263+ ParenOpen "("
264+ Id "identifier"
265+ ParenClose ")"
266+ Branch
267+ Tree
268+ ParenOpen "("
269+ Id "number"
270+ ParenClose ")"
269271 BracketClose "]"
270272 At "@"
271273 Id "value"
You can’t perform that action at this time.
0 commit comments