aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_parser/src/grammar/patterns.rs14
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rs4
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.txt75
3 files changed, 91 insertions, 2 deletions
diff --git a/crates/ra_parser/src/grammar/patterns.rs b/crates/ra_parser/src/grammar/patterns.rs
index a4ffd6960..877ae5b7a 100644
--- a/crates/ra_parser/src/grammar/patterns.rs
+++ b/crates/ra_parser/src/grammar/patterns.rs
@@ -168,6 +168,7 @@ fn record_field_pat_list(p: &mut Parser) {
168 T![.] if p.at(T![..]) => p.bump(T![..]), 168 T![.] if p.at(T![..]) => p.bump(T![..]),
169 169
170 IDENT if p.nth(1) == T![:] => record_field_pat(p), 170 IDENT if p.nth(1) == T![:] => record_field_pat(p),
171 INT_NUMBER if p.nth(1) == T![:] => record_field_pat(p),
171 T!['{'] => error_block(p, "expected ident"), 172 T!['{'] => error_block(p, "expected ident"),
172 T![box] => { 173 T![box] => {
173 box_pat(p); 174 box_pat(p);
@@ -184,12 +185,21 @@ fn record_field_pat_list(p: &mut Parser) {
184 m.complete(p, RECORD_FIELD_PAT_LIST); 185 m.complete(p, RECORD_FIELD_PAT_LIST);
185} 186}
186 187
188// test record_field_pat
189// fn foo() {
190// let S { 0: 1 } = ();
191// let S { x: 1 } = ();
192// }
187fn record_field_pat(p: &mut Parser) { 193fn record_field_pat(p: &mut Parser) {
188 assert!(p.at(IDENT)); 194 assert!(p.at(IDENT) || p.at(INT_NUMBER));
189 assert!(p.nth(1) == T![:]); 195 assert!(p.nth(1) == T![:]);
190 196
191 let m = p.start(); 197 let m = p.start();
192 name(p); 198
199 if !p.eat(INT_NUMBER) {
200 name(p)
201 }
202
193 p.bump_any(); 203 p.bump_any();
194 pattern(p); 204 pattern(p);
195 m.complete(p, RECORD_FIELD_PAT); 205 m.complete(p, RECORD_FIELD_PAT);
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rs b/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rs
new file mode 100644
index 000000000..26b1d5f89
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rs
@@ -0,0 +1,4 @@
1fn foo() {
2 let S { 0: 1 } = ();
3 let S { x: 1 } = ();
4}
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.txt b/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.txt
new file mode 100644
index 000000000..06fbdfabf
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.txt
@@ -0,0 +1,75 @@
1SOURCE_FILE@[0; 63)
2 FN_DEF@[0; 62)
3 FN_KW@[0; 2) "fn"
4 WHITESPACE@[2; 3) " "
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 PARAM_LIST@[6; 8)
8 L_PAREN@[6; 7) "("
9 R_PAREN@[7; 8) ")"
10 WHITESPACE@[8; 9) " "
11 BLOCK_EXPR@[9; 62)
12 BLOCK@[9; 62)
13 L_CURLY@[9; 10) "{"
14 WHITESPACE@[10; 15) "\n "
15 LET_STMT@[15; 35)
16 LET_KW@[15; 18) "let"
17 WHITESPACE@[18; 19) " "
18 RECORD_PAT@[19; 29)
19 PATH@[19; 20)
20 PATH_SEGMENT@[19; 20)
21 NAME_REF@[19; 20)
22 IDENT@[19; 20) "S"
23 WHITESPACE@[20; 21) " "
24 RECORD_FIELD_PAT_LIST@[21; 29)
25 L_CURLY@[21; 22) "{"
26 WHITESPACE@[22; 23) " "
27 RECORD_FIELD_PAT@[23; 27)
28 INT_NUMBER@[23; 24) "0"
29 COLON@[24; 25) ":"
30 WHITESPACE@[25; 26) " "
31 LITERAL_PAT@[26; 27)
32 LITERAL@[26; 27)
33 INT_NUMBER@[26; 27) "1"
34 WHITESPACE@[27; 28) " "
35 R_CURLY@[28; 29) "}"
36 WHITESPACE@[29; 30) " "
37 EQ@[30; 31) "="
38 WHITESPACE@[31; 32) " "
39 TUPLE_EXPR@[32; 34)
40 L_PAREN@[32; 33) "("
41 R_PAREN@[33; 34) ")"
42 SEMI@[34; 35) ";"
43 WHITESPACE@[35; 40) "\n "
44 LET_STMT@[40; 60)
45 LET_KW@[40; 43) "let"
46 WHITESPACE@[43; 44) " "
47 RECORD_PAT@[44; 54)
48 PATH@[44; 45)
49 PATH_SEGMENT@[44; 45)
50 NAME_REF@[44; 45)
51 IDENT@[44; 45) "S"
52 WHITESPACE@[45; 46) " "
53 RECORD_FIELD_PAT_LIST@[46; 54)
54 L_CURLY@[46; 47) "{"
55 WHITESPACE@[47; 48) " "
56 RECORD_FIELD_PAT@[48; 52)
57 NAME@[48; 49)
58 IDENT@[48; 49) "x"
59 COLON@[49; 50) ":"
60 WHITESPACE@[50; 51) " "
61 LITERAL_PAT@[51; 52)
62 LITERAL@[51; 52)
63 INT_NUMBER@[51; 52) "1"
64 WHITESPACE@[52; 53) " "
65 R_CURLY@[53; 54) "}"
66 WHITESPACE@[54; 55) " "
67 EQ@[55; 56) "="
68 WHITESPACE@[56; 57) " "
69 TUPLE_EXPR@[57; 59)
70 L_PAREN@[57; 58) "("
71 R_PAREN@[58; 59) ")"
72 SEMI@[59; 60) ";"
73 WHITESPACE@[60; 61) "\n"
74 R_CURLY@[61; 62) "}"
75 WHITESPACE@[62; 63) "\n"