From 205a8278a9da4bc1289449b916468e972fb624fc Mon Sep 17 00:00:00 2001 From: csmoe Date: Fri, 7 Jun 2019 19:49:49 +0800 Subject: fix: never type with binding Change-Id: I14e1bc628b9d2dfdb1f40de3d3707f4e872767f2 --- crates/ra_parser/src/grammar/expressions.rs | 4 +- crates/ra_parser/src/parser.rs | 2 +- .../tests/data/parser/inline/ok/0049_let_stmt;.rs | 6 -- .../tests/data/parser/inline/ok/0049_let_stmt;.txt | 71 --------------- .../tests/data/parser/inline/ok/0130_let_stmt.rs | 8 ++ .../tests/data/parser/inline/ok/0130_let_stmt.txt | 101 +++++++++++++++++++++ 6 files changed, 113 insertions(+), 79 deletions(-) delete mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0049_let_stmt;.rs delete mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0049_let_stmt;.txt create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0130_let_stmt.rs create mode 100644 crates/ra_syntax/tests/data/parser/inline/ok/0130_let_stmt.txt (limited to 'crates') diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs index 99e32c4e8..795dccea1 100644 --- a/crates/ra_parser/src/grammar/expressions.rs +++ b/crates/ra_parser/src/grammar/expressions.rs @@ -137,12 +137,14 @@ pub(super) fn stmt(p: &mut Parser, with_semi: StmtWithSemi) { m.complete(p, EXPR_STMT); } - // test let_stmt; + // test let_stmt // fn foo() { // let a; // let b: i32; // let c = 92; // let d: i32 = 92; + // let e: !; + // let _: ! = {}; // } fn let_stmt(p: &mut Parser, m: Marker, with_semi: StmtWithSemi) { assert!(p.at(T![let])); diff --git a/crates/ra_parser/src/parser.rs b/crates/ra_parser/src/parser.rs index 8f654f04c..8a2e253ac 100644 --- a/crates/ra_parser/src/parser.rs +++ b/crates/ra_parser/src/parser.rs @@ -272,7 +272,7 @@ impl<'t> Parser<'t> { T![=] if jn1 && la2 == T![=] => Some((T![==], 2)), T![=] if jn1 && la2 == T![>] => Some((T![=>], 2)), - T![!] if la2 == T![=] => Some((T![!=], 2)), + T![!] if jn1 && la2 == T![=] => Some((T![!=], 2)), T![-] if la2 == T![>] => Some((T![->], 2)), _ => None, } diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0049_let_stmt;.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0049_let_stmt;.rs deleted file mode 100644 index 0a9af907f..000000000 --- a/crates/ra_syntax/tests/data/parser/inline/ok/0049_let_stmt;.rs +++ /dev/null @@ -1,6 +0,0 @@ -fn foo() { - let a; - let b: i32; - let c = 92; - let d: i32 = 92; -} diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0049_let_stmt;.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0049_let_stmt;.txt deleted file mode 100644 index 1f7aa3587..000000000 --- a/crates/ra_syntax/tests/data/parser/inline/ok/0049_let_stmt;.txt +++ /dev/null @@ -1,71 +0,0 @@ -SOURCE_FILE@[0; 77) - FN_DEF@[0; 76) - 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@[9; 76) - L_CURLY@[9; 10) "{" - WHITESPACE@[10; 15) "\n " - LET_STMT@[15; 21) - LET_KW@[15; 18) "let" - WHITESPACE@[18; 19) " " - BIND_PAT@[19; 20) - NAME@[19; 20) - IDENT@[19; 20) "a" - SEMI@[20; 21) ";" - WHITESPACE@[21; 26) "\n " - LET_STMT@[26; 37) - LET_KW@[26; 29) "let" - WHITESPACE@[29; 30) " " - BIND_PAT@[30; 31) - NAME@[30; 31) - IDENT@[30; 31) "b" - COLON@[31; 32) ":" - WHITESPACE@[32; 33) " " - PATH_TYPE@[33; 36) - PATH@[33; 36) - PATH_SEGMENT@[33; 36) - NAME_REF@[33; 36) - IDENT@[33; 36) "i32" - SEMI@[36; 37) ";" - WHITESPACE@[37; 42) "\n " - LET_STMT@[42; 53) - LET_KW@[42; 45) "let" - WHITESPACE@[45; 46) " " - BIND_PAT@[46; 47) - NAME@[46; 47) - IDENT@[46; 47) "c" - WHITESPACE@[47; 48) " " - EQ@[48; 49) "=" - WHITESPACE@[49; 50) " " - LITERAL@[50; 52) - INT_NUMBER@[50; 52) "92" - SEMI@[52; 53) ";" - WHITESPACE@[53; 58) "\n " - LET_STMT@[58; 74) - LET_KW@[58; 61) "let" - WHITESPACE@[61; 62) " " - BIND_PAT@[62; 63) - NAME@[62; 63) - IDENT@[62; 63) "d" - COLON@[63; 64) ":" - WHITESPACE@[64; 65) " " - PATH_TYPE@[65; 68) - PATH@[65; 68) - PATH_SEGMENT@[65; 68) - NAME_REF@[65; 68) - IDENT@[65; 68) "i32" - WHITESPACE@[68; 69) " " - EQ@[69; 70) "=" - WHITESPACE@[70; 71) " " - LITERAL@[71; 73) - INT_NUMBER@[71; 73) "92" - SEMI@[73; 74) ";" - WHITESPACE@[74; 75) "\n" - R_CURLY@[75; 76) "}" - WHITESPACE@[76; 77) "\n" diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0130_let_stmt.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0130_let_stmt.rs new file mode 100644 index 000000000..86803fe08 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0130_let_stmt.rs @@ -0,0 +1,8 @@ +fn foo() { + let a; + let b: i32; + let c = 92; + let d: i32 = 92; + let e: !; + let _: ! = {}; +} diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0130_let_stmt.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0130_let_stmt.txt new file mode 100644 index 000000000..82c1eb009 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0130_let_stmt.txt @@ -0,0 +1,101 @@ +SOURCE_FILE@[0; 110) + FN_DEF@[0; 109) + 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@[9; 109) + L_CURLY@[9; 10) "{" + WHITESPACE@[10; 15) "\n " + LET_STMT@[15; 21) + LET_KW@[15; 18) "let" + WHITESPACE@[18; 19) " " + BIND_PAT@[19; 20) + NAME@[19; 20) + IDENT@[19; 20) "a" + SEMI@[20; 21) ";" + WHITESPACE@[21; 26) "\n " + LET_STMT@[26; 37) + LET_KW@[26; 29) "let" + WHITESPACE@[29; 30) " " + BIND_PAT@[30; 31) + NAME@[30; 31) + IDENT@[30; 31) "b" + COLON@[31; 32) ":" + WHITESPACE@[32; 33) " " + PATH_TYPE@[33; 36) + PATH@[33; 36) + PATH_SEGMENT@[33; 36) + NAME_REF@[33; 36) + IDENT@[33; 36) "i32" + SEMI@[36; 37) ";" + WHITESPACE@[37; 42) "\n " + LET_STMT@[42; 53) + LET_KW@[42; 45) "let" + WHITESPACE@[45; 46) " " + BIND_PAT@[46; 47) + NAME@[46; 47) + IDENT@[46; 47) "c" + WHITESPACE@[47; 48) " " + EQ@[48; 49) "=" + WHITESPACE@[49; 50) " " + LITERAL@[50; 52) + INT_NUMBER@[50; 52) "92" + SEMI@[52; 53) ";" + WHITESPACE@[53; 58) "\n " + LET_STMT@[58; 74) + LET_KW@[58; 61) "let" + WHITESPACE@[61; 62) " " + BIND_PAT@[62; 63) + NAME@[62; 63) + IDENT@[62; 63) "d" + COLON@[63; 64) ":" + WHITESPACE@[64; 65) " " + PATH_TYPE@[65; 68) + PATH@[65; 68) + PATH_SEGMENT@[65; 68) + NAME_REF@[65; 68) + IDENT@[65; 68) "i32" + WHITESPACE@[68; 69) " " + EQ@[69; 70) "=" + WHITESPACE@[70; 71) " " + LITERAL@[71; 73) + INT_NUMBER@[71; 73) "92" + SEMI@[73; 74) ";" + WHITESPACE@[74; 79) "\n " + LET_STMT@[79; 88) + LET_KW@[79; 82) "let" + WHITESPACE@[82; 83) " " + BIND_PAT@[83; 84) + NAME@[83; 84) + IDENT@[83; 84) "e" + COLON@[84; 85) ":" + WHITESPACE@[85; 86) " " + NEVER_TYPE@[86; 87) + EXCL@[86; 87) "!" + SEMI@[87; 88) ";" + WHITESPACE@[88; 93) "\n " + LET_STMT@[93; 107) + LET_KW@[93; 96) "let" + WHITESPACE@[96; 97) " " + PLACEHOLDER_PAT@[97; 98) + UNDERSCORE@[97; 98) "_" + COLON@[98; 99) ":" + WHITESPACE@[99; 100) " " + NEVER_TYPE@[100; 101) + EXCL@[100; 101) "!" + WHITESPACE@[101; 102) " " + EQ@[102; 103) "=" + WHITESPACE@[103; 104) " " + BLOCK_EXPR@[104; 106) + BLOCK@[104; 106) + L_CURLY@[104; 105) "{" + R_CURLY@[105; 106) "}" + SEMI@[106; 107) ";" + WHITESPACE@[107; 108) "\n" + R_CURLY@[108; 109) "}" + WHITESPACE@[109; 110) "\n" -- cgit v1.2.3