From 8fe58c359817f57ba981f02ee62244ce1954a41b Mon Sep 17 00:00:00 2001 From: csmoe Date: Mon, 22 Jul 2019 20:43:55 +0800 Subject: [PATCH] fix: parse box syntax inside parentheses --- .../ra_parser/src/grammar/expressions/atom.rs | 3 + .../data/parser/inline/ok/0132_box_expr.rs | 2 + .../data/parser/inline/ok/0132_box_expr.txt | 70 +++++++++++++++++-- 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/crates/ra_parser/src/grammar/expressions/atom.rs b/crates/ra_parser/src/grammar/expressions/atom.rs index 6bda0414164..d98953a7efa 100644 --- a/crates/ra_parser/src/grammar/expressions/atom.rs +++ b/crates/ra_parser/src/grammar/expressions/atom.rs @@ -43,6 +43,7 @@ pub(super) const ATOM_EXPR_FIRST: TokenSet = L_BRACK, PIPE, MOVE_KW, + BOX_KW, IF_KW, WHILE_KW, MATCH_KW, @@ -529,6 +530,8 @@ fn try_block_expr(p: &mut Parser, m: Option) -> CompletedMarker { // test box_expr // fn foo() { // let x = box 1i32; +// let y = (box 1i32, box 2i32); +// let z = Foo(box 1i32, box 2i32); // } fn box_expr(p: &mut Parser, m: Option) -> CompletedMarker { assert!(p.at(T![box])); diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0132_box_expr.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0132_box_expr.rs index e69c81e22a9..fc9923b7137 100644 --- a/crates/ra_syntax/tests/data/parser/inline/ok/0132_box_expr.rs +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0132_box_expr.rs @@ -1,3 +1,5 @@ fn foo() { let x = box 1i32; + let y = (box 1i32, box 2i32); + let z = Foo(box 1i32, box 2i32); } diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0132_box_expr.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0132_box_expr.txt index f4eeb7e24ed..3d22002a142 100644 --- a/crates/ra_syntax/tests/data/parser/inline/ok/0132_box_expr.txt +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0132_box_expr.txt @@ -1,5 +1,5 @@ -SOURCE_FILE@[0; 35) - FN_DEF@[0; 34) +SOURCE_FILE@[0; 106) + FN_DEF@[0; 105) FN_KW@[0; 2) "fn" WHITESPACE@[2; 3) " " NAME@[3; 6) @@ -8,7 +8,7 @@ SOURCE_FILE@[0; 35) L_PAREN@[6; 7) "(" R_PAREN@[7; 8) ")" WHITESPACE@[8; 9) " " - BLOCK@[9; 34) + BLOCK@[9; 105) L_CURLY@[9; 10) "{" WHITESPACE@[10; 15) "\n " LET_STMT@[15; 32) @@ -26,6 +26,64 @@ SOURCE_FILE@[0; 35) LITERAL@[27; 31) INT_NUMBER@[27; 31) "1i32" SEMI@[31; 32) ";" - WHITESPACE@[32; 33) "\n" - R_CURLY@[33; 34) "}" - WHITESPACE@[34; 35) "\n" + WHITESPACE@[32; 37) "\n " + LET_STMT@[37; 66) + LET_KW@[37; 40) "let" + WHITESPACE@[40; 41) " " + BIND_PAT@[41; 42) + NAME@[41; 42) + IDENT@[41; 42) "y" + WHITESPACE@[42; 43) " " + EQ@[43; 44) "=" + WHITESPACE@[44; 45) " " + TUPLE_EXPR@[45; 65) + L_PAREN@[45; 46) "(" + BOX_EXPR@[46; 54) + BOX_KW@[46; 49) "box" + WHITESPACE@[49; 50) " " + LITERAL@[50; 54) + INT_NUMBER@[50; 54) "1i32" + COMMA@[54; 55) "," + WHITESPACE@[55; 56) " " + BOX_EXPR@[56; 64) + BOX_KW@[56; 59) "box" + WHITESPACE@[59; 60) " " + LITERAL@[60; 64) + INT_NUMBER@[60; 64) "2i32" + R_PAREN@[64; 65) ")" + SEMI@[65; 66) ";" + WHITESPACE@[66; 71) "\n " + LET_STMT@[71; 103) + LET_KW@[71; 74) "let" + WHITESPACE@[74; 75) " " + BIND_PAT@[75; 76) + NAME@[75; 76) + IDENT@[75; 76) "z" + WHITESPACE@[76; 77) " " + EQ@[77; 78) "=" + WHITESPACE@[78; 79) " " + CALL_EXPR@[79; 102) + PATH_EXPR@[79; 82) + PATH@[79; 82) + PATH_SEGMENT@[79; 82) + NAME_REF@[79; 82) + IDENT@[79; 82) "Foo" + ARG_LIST@[82; 102) + L_PAREN@[82; 83) "(" + BOX_EXPR@[83; 91) + BOX_KW@[83; 86) "box" + WHITESPACE@[86; 87) " " + LITERAL@[87; 91) + INT_NUMBER@[87; 91) "1i32" + COMMA@[91; 92) "," + WHITESPACE@[92; 93) " " + BOX_EXPR@[93; 101) + BOX_KW@[93; 96) "box" + WHITESPACE@[96; 97) " " + LITERAL@[97; 101) + INT_NUMBER@[97; 101) "2i32" + R_PAREN@[101; 102) ")" + SEMI@[102; 103) ";" + WHITESPACE@[103; 104) "\n" + R_CURLY@[104; 105) "}" + WHITESPACE@[105; 106) "\n"