]> git.lizzy.rs Git - rust.git/commitdiff
Add indexing to record_field_pat
authorkjeremy <kjeremy@gmail.com>
Fri, 20 Sep 2019 15:43:34 +0000 (11:43 -0400)
committerkjeremy <kjeremy@gmail.com>
Fri, 20 Sep 2019 15:43:34 +0000 (11:43 -0400)
crates/ra_parser/src/grammar/patterns.rs
crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rs [new file with mode: 0644]
crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.txt [new file with mode: 0644]

index a4ffd69601992e44d6f713e0675d0f5fd0386831..cf722eef48bbd8488dc55f1e92168b69d29faadf 100644 (file)
@@ -168,6 +168,7 @@ fn record_field_pat_list(p: &mut Parser) {
             T![.] if p.at(T![..]) => p.bump(T![..]),
 
             IDENT if p.nth(1) == T![:] => record_field_pat(p),
+            INT_NUMBER if p.nth(1) == T![:] => record_field_pat(p),
             T!['{'] => error_block(p, "expected ident"),
             T![box] => {
                 box_pat(p);
@@ -184,12 +185,22 @@ fn record_field_pat_list(p: &mut Parser) {
     m.complete(p, RECORD_FIELD_PAT_LIST);
 }
 
+// test record_field_pat
+// fn foo() {
+//     let S { 0: 1 } = ();
+//     let S { x: 1 } = ();
+// }
 fn record_field_pat(p: &mut Parser) {
-    assert!(p.at(IDENT));
+    assert!(p.at(IDENT) || p.at(INT_NUMBER));
     assert!(p.nth(1) == T![:]);
 
     let m = p.start();
-    name(p);
+
+    match p.current() {
+        IDENT => name(p),
+        _ => p.bump_any(),
+    }
+
     p.bump_any();
     pattern(p);
     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 (file)
index 0000000..26b1d5f
--- /dev/null
@@ -0,0 +1,4 @@
+fn foo() {
+    let S { 0: 1 } = ();
+    let S { x: 1 } = ();
+}
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 (file)
index 0000000..06fbdfa
--- /dev/null
@@ -0,0 +1,75 @@
+SOURCE_FILE@[0; 63)
+  FN_DEF@[0; 62)
+    FN_KW@[0; 2) "fn"
+    WHITESPACE@[2; 3) " "
+    NAME@[3; 6)
+      IDENT@[3; 6) "foo"
+    PARAM_LIST@[6; 8)
+      L_PAREN@[6; 7) "("
+      R_PAREN@[7; 8) ")"
+    WHITESPACE@[8; 9) " "
+    BLOCK_EXPR@[9; 62)
+      BLOCK@[9; 62)
+        L_CURLY@[9; 10) "{"
+        WHITESPACE@[10; 15) "\n    "
+        LET_STMT@[15; 35)
+          LET_KW@[15; 18) "let"
+          WHITESPACE@[18; 19) " "
+          RECORD_PAT@[19; 29)
+            PATH@[19; 20)
+              PATH_SEGMENT@[19; 20)
+                NAME_REF@[19; 20)
+                  IDENT@[19; 20) "S"
+            WHITESPACE@[20; 21) " "
+            RECORD_FIELD_PAT_LIST@[21; 29)
+              L_CURLY@[21; 22) "{"
+              WHITESPACE@[22; 23) " "
+              RECORD_FIELD_PAT@[23; 27)
+                INT_NUMBER@[23; 24) "0"
+                COLON@[24; 25) ":"
+                WHITESPACE@[25; 26) " "
+                LITERAL_PAT@[26; 27)
+                  LITERAL@[26; 27)
+                    INT_NUMBER@[26; 27) "1"
+              WHITESPACE@[27; 28) " "
+              R_CURLY@[28; 29) "}"
+          WHITESPACE@[29; 30) " "
+          EQ@[30; 31) "="
+          WHITESPACE@[31; 32) " "
+          TUPLE_EXPR@[32; 34)
+            L_PAREN@[32; 33) "("
+            R_PAREN@[33; 34) ")"
+          SEMI@[34; 35) ";"
+        WHITESPACE@[35; 40) "\n    "
+        LET_STMT@[40; 60)
+          LET_KW@[40; 43) "let"
+          WHITESPACE@[43; 44) " "
+          RECORD_PAT@[44; 54)
+            PATH@[44; 45)
+              PATH_SEGMENT@[44; 45)
+                NAME_REF@[44; 45)
+                  IDENT@[44; 45) "S"
+            WHITESPACE@[45; 46) " "
+            RECORD_FIELD_PAT_LIST@[46; 54)
+              L_CURLY@[46; 47) "{"
+              WHITESPACE@[47; 48) " "
+              RECORD_FIELD_PAT@[48; 52)
+                NAME@[48; 49)
+                  IDENT@[48; 49) "x"
+                COLON@[49; 50) ":"
+                WHITESPACE@[50; 51) " "
+                LITERAL_PAT@[51; 52)
+                  LITERAL@[51; 52)
+                    INT_NUMBER@[51; 52) "1"
+              WHITESPACE@[52; 53) " "
+              R_CURLY@[53; 54) "}"
+          WHITESPACE@[54; 55) " "
+          EQ@[55; 56) "="
+          WHITESPACE@[56; 57) " "
+          TUPLE_EXPR@[57; 59)
+            L_PAREN@[57; 58) "("
+            R_PAREN@[58; 59) ")"
+          SEMI@[59; 60) ";"
+        WHITESPACE@[60; 61) "\n"
+        R_CURLY@[61; 62) "}"
+  WHITESPACE@[62; 63) "\n"