File tree 5 files changed +59
-16
lines changed
tests/data/parser/inline/ok
5 files changed +59
-16
lines changed Original file line number Diff line number Diff line change @@ -145,7 +145,21 @@ fn path_pat(p: &mut Parser) -> CompletedMarker {
145
145
fn tuple_pat_fields ( p : & mut Parser ) {
146
146
assert ! ( p. at( T ![ '(' ] ) ) ;
147
147
p. bump ( ) ;
148
- pat_list ( p, T ! [ ')' ] ) ;
148
+ while !p. at ( EOF ) && !p. at ( T ! [ ')' ] ) {
149
+ match p. current ( ) {
150
+ T ! [ ..] => p. bump ( ) ,
151
+ _ => {
152
+ if !p. at_ts ( PATTERN_FIRST ) {
153
+ p. error ( "expected a pattern" ) ;
154
+ break ;
155
+ }
156
+ pattern ( p)
157
+ }
158
+ }
159
+ if !p. at ( T ! [ ')' ] ) {
160
+ p. expect ( T ! [ , ] ) ;
161
+ }
162
+ }
149
163
p. expect ( T ! [ ')' ] ) ;
150
164
}
151
165
@@ -225,20 +239,21 @@ fn tuple_pat(p: &mut Parser) -> CompletedMarker {
225
239
// test slice_pat
226
240
// fn main() {
227
241
// let [a, b, ..] = [];
242
+ // let [a, b..] = [];
228
243
// }
229
244
fn slice_pat ( p : & mut Parser ) -> CompletedMarker {
230
245
assert ! ( p. at( T ![ '[' ] ) ) ;
231
246
let m = p. start ( ) ;
232
247
p. bump ( ) ;
233
- pat_list ( p, T ! [ ']' ] ) ;
234
- p. expect ( T ! [ ']' ] ) ;
235
- m. complete ( p, SLICE_PAT )
236
- }
237
-
238
- fn pat_list ( p : & mut Parser , ket : SyntaxKind ) {
239
- while !p. at ( EOF ) && !p. at ( ket) {
248
+ while !p. at ( EOF ) && !p. at ( T ! [ ']' ] ) {
240
249
match p. current ( ) {
241
250
T ! [ ..] => p. bump ( ) ,
251
+ IDENT if p. nth ( 1 ) == T ! [ ..] => {
252
+ let m_sub = p. start ( ) ;
253
+ p. bump ( ) ;
254
+ p. bump ( ) ;
255
+ m_sub. complete ( p, SUBSLICE_PAT ) ;
256
+ }
242
257
_ => {
243
258
if !p. at_ts ( PATTERN_FIRST ) {
244
259
p. error ( "expected a pattern" ) ;
@@ -247,10 +262,12 @@ fn pat_list(p: &mut Parser, ket: SyntaxKind) {
247
262
pattern ( p)
248
263
}
249
264
}
250
- if !p. at ( ket ) {
265
+ if !p. at ( T ! [ ']' ] ) {
251
266
p. expect ( T ! [ , ] ) ;
252
267
}
253
268
}
269
+ p. expect ( T ! [ ']' ] ) ;
270
+ m. complete ( p, SLICE_PAT )
254
271
}
255
272
256
273
// test bind_pat
Original file line number Diff line number Diff line change @@ -165,6 +165,7 @@ pub enum SyntaxKind {
165
165
SLICE_PAT ,
166
166
RANGE_PAT ,
167
167
LITERAL_PAT ,
168
+ SUBSLICE_PAT ,
168
169
TUPLE_EXPR ,
169
170
ARRAY_EXPR ,
170
171
PAREN_EXPR ,
@@ -632,6 +633,7 @@ impl SyntaxKind {
632
633
SLICE_PAT => & SyntaxInfo { name : "SLICE_PAT" } ,
633
634
RANGE_PAT => & SyntaxInfo { name : "RANGE_PAT" } ,
634
635
LITERAL_PAT => & SyntaxInfo { name : "LITERAL_PAT" } ,
636
+ SUBSLICE_PAT => & SyntaxInfo { name : "SUBSLICE_PAT" } ,
635
637
TUPLE_EXPR => & SyntaxInfo { name : "TUPLE_EXPR" } ,
636
638
ARRAY_EXPR => & SyntaxInfo { name : "ARRAY_EXPR" } ,
637
639
PAREN_EXPR => & SyntaxInfo { name : "PAREN_EXPR" } ,
Original file line number Diff line number Diff line change @@ -168,6 +168,7 @@ Grammar(
168
168
"SLICE_PAT" ,
169
169
"RANGE_PAT" ,
170
170
"LITERAL_PAT" ,
171
+ "SUBSLICE_PAT" ,
171
172
172
173
// atoms
173
174
"TUPLE_EXPR" ,
@@ -686,7 +687,7 @@ Grammar(
686
687
"LifetimeArg" : (),
687
688
688
689
"MacroItems" : (
689
- traits : [ "ModuleItemOwner" , "FnDefOwner" ],
690
+ traits : [ "ModuleItemOwner" , "FnDefOwner" ],
690
691
),
691
692
692
693
"MacroStmts" : (
Original file line number Diff line number Diff line change 1
1
fn main ( ) {
2
2
let [ a, b, ..] = [ ] ;
3
+ let [ a, b..] = [ ] ;
3
4
}
Original file line number Diff line number Diff line change 1
- SOURCE_FILE@[0; 39 )
2
- FN_DEF@[0; 38 )
1
+ SOURCE_FILE@[0; 62 )
2
+ FN_DEF@[0; 61 )
3
3
FN_KW@[0; 2) "fn"
4
4
WHITESPACE@[2; 3) " "
5
5
NAME@[3; 7)
@@ -8,7 +8,7 @@ SOURCE_FILE@[0; 39)
8
8
L_PAREN@[7; 8) "("
9
9
R_PAREN@[8; 9) ")"
10
10
WHITESPACE@[9; 10) " "
11
- BLOCK@[10; 38 )
11
+ BLOCK@[10; 61 )
12
12
L_CURLY@[10; 11) "{"
13
13
WHITESPACE@[11; 16) "\n "
14
14
LET_STMT@[16; 36)
@@ -35,6 +35,28 @@ SOURCE_FILE@[0; 39)
35
35
L_BRACK@[33; 34) "["
36
36
R_BRACK@[34; 35) "]"
37
37
SEMI@[35; 36) ";"
38
- WHITESPACE@[36; 37) "\n"
39
- R_CURLY@[37; 38) "}"
40
- WHITESPACE@[38; 39) "\n"
38
+ WHITESPACE@[36; 41) "\n "
39
+ LET_STMT@[41; 59)
40
+ LET_KW@[41; 44) "let"
41
+ WHITESPACE@[44; 45) " "
42
+ SLICE_PAT@[45; 53)
43
+ L_BRACK@[45; 46) "["
44
+ BIND_PAT@[46; 47)
45
+ NAME@[46; 47)
46
+ IDENT@[46; 47) "a"
47
+ COMMA@[47; 48) ","
48
+ WHITESPACE@[48; 49) " "
49
+ SUBSLICE_PAT@[49; 52)
50
+ IDENT@[49; 50) "b"
51
+ DOTDOT@[50; 52) ".."
52
+ R_BRACK@[52; 53) "]"
53
+ WHITESPACE@[53; 54) " "
54
+ EQ@[54; 55) "="
55
+ WHITESPACE@[55; 56) " "
56
+ ARRAY_EXPR@[56; 58)
57
+ L_BRACK@[56; 57) "["
58
+ R_BRACK@[57; 58) "]"
59
+ SEMI@[58; 59) ";"
60
+ WHITESPACE@[59; 60) "\n"
61
+ R_CURLY@[60; 61) "}"
62
+ WHITESPACE@[61; 62) "\n"
You can’t perform that action at this time.
0 commit comments