From 957b5ed23a4860fe3c9b80687a801b5d7870fe00 Mon Sep 17 00:00:00 2001 From: Evgenii P Date: Fri, 9 Aug 2019 15:38:52 +0700 Subject: Parse tuple struct field initialization --- crates/ra_parser/src/grammar.rs | 2 +- crates/ra_parser/src/grammar/expressions.rs | 3 +- .../test_data/parser/inline/ok/0061_struct_lit.rs | 1 + .../test_data/parser/inline/ok/0061_struct_lit.txt | 33 ++++++++++++++++++---- 4 files changed, 31 insertions(+), 8 deletions(-) (limited to 'crates') diff --git a/crates/ra_parser/src/grammar.rs b/crates/ra_parser/src/grammar.rs index 658034097..00fb1bac9 100644 --- a/crates/ra_parser/src/grammar.rs +++ b/crates/ra_parser/src/grammar.rs @@ -274,7 +274,7 @@ fn name(p: &mut Parser) { } fn name_ref(p: &mut Parser) { - if p.at(IDENT) { + if p.at(IDENT) || p.at(INT_NUMBER) { let m = p.start(); p.bump(); m.complete(p, NAME_REF); diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs index 3e49e70c7..50c938a23 100644 --- a/crates/ra_parser/src/grammar/expressions.rs +++ b/crates/ra_parser/src/grammar/expressions.rs @@ -572,6 +572,7 @@ fn path_expr(p: &mut Parser, r: Restrictions) -> (CompletedMarker, BlockLike) { // S {}; // S { x, y: 32, }; // S { x, y: 32, ..Default::default() }; +// TupleStruct { 0: 1 }; // } pub(crate) fn named_field_list(p: &mut Parser) { assert!(p.at(T!['{'])); @@ -583,7 +584,7 @@ pub(crate) fn named_field_list(p: &mut Parser) { // fn main() { // S { #[cfg(test)] field: 1 } // } - IDENT | T![#] => { + IDENT | INT_NUMBER | T![#] => { let m = p.start(); attributes::outer_attributes(p); name_ref(p); diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0061_struct_lit.rs b/crates/ra_syntax/test_data/parser/inline/ok/0061_struct_lit.rs index eb711f68a..6285e5549 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0061_struct_lit.rs +++ b/crates/ra_syntax/test_data/parser/inline/ok/0061_struct_lit.rs @@ -2,4 +2,5 @@ fn foo() { S {}; S { x, y: 32, }; S { x, y: 32, ..Default::default() }; + TupleStruct { 0: 1 }; } diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0061_struct_lit.txt b/crates/ra_syntax/test_data/parser/inline/ok/0061_struct_lit.txt index 94d1bfe2e..d06594cae 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0061_struct_lit.txt +++ b/crates/ra_syntax/test_data/parser/inline/ok/0061_struct_lit.txt @@ -1,5 +1,5 @@ -SOURCE_FILE@[0; 86) - FN_DEF@[0; 85) +SOURCE_FILE@[0; 112) + FN_DEF@[0; 111) FN_KW@[0; 2) "fn" WHITESPACE@[2; 3) " " NAME@[3; 6) @@ -8,7 +8,7 @@ SOURCE_FILE@[0; 86) L_PAREN@[6; 7) "(" R_PAREN@[7; 8) ")" WHITESPACE@[8; 9) " " - BLOCK@[9; 85) + BLOCK@[9; 111) L_CURLY@[9; 10) "{" WHITESPACE@[10; 15) "\n " EXPR_STMT@[15; 20) @@ -92,6 +92,27 @@ SOURCE_FILE@[0; 86) WHITESPACE@[80; 81) " " R_CURLY@[81; 82) "}" SEMI@[82; 83) ";" - WHITESPACE@[83; 84) "\n" - R_CURLY@[84; 85) "}" - WHITESPACE@[85; 86) "\n" + WHITESPACE@[83; 88) "\n " + EXPR_STMT@[88; 109) + STRUCT_LIT@[88; 108) + PATH@[88; 99) + PATH_SEGMENT@[88; 99) + NAME_REF@[88; 99) + IDENT@[88; 99) "TupleStruct" + WHITESPACE@[99; 100) " " + NAMED_FIELD_LIST@[100; 108) + L_CURLY@[100; 101) "{" + WHITESPACE@[101; 102) " " + NAMED_FIELD@[102; 106) + NAME_REF@[102; 103) + INT_NUMBER@[102; 103) "0" + COLON@[103; 104) ":" + WHITESPACE@[104; 105) " " + LITERAL@[105; 106) + INT_NUMBER@[105; 106) "1" + WHITESPACE@[106; 107) " " + R_CURLY@[107; 108) "}" + SEMI@[108; 109) ";" + WHITESPACE@[109; 110) "\n" + R_CURLY@[110; 111) "}" + WHITESPACE@[111; 112) "\n" -- cgit v1.2.3