From 53c94e3ad8782b2ab51bea1aeb5687ec34f7a96d Mon Sep 17 00:00:00 2001 From: csmoe Date: Sun, 30 Dec 2018 21:51:40 +0800 Subject: parse minus before number literal --- crates/ra_syntax/src/grammar/patterns.rs | 5 ++ .../data/parser/inline/ok/0055_literal_pattern.rs | 1 + .../data/parser/inline/ok/0055_literal_pattern.txt | 78 +++++++++++++--------- 3 files changed, 51 insertions(+), 33 deletions(-) (limited to 'crates/ra_syntax') diff --git a/crates/ra_syntax/src/grammar/patterns.rs b/crates/ra_syntax/src/grammar/patterns.rs index 64cdf0b1b..692ffbb8c 100644 --- a/crates/ra_syntax/src/grammar/patterns.rs +++ b/crates/ra_syntax/src/grammar/patterns.rs @@ -48,11 +48,16 @@ fn atom_pat(p: &mut Parser, recovery_set: TokenSet) -> Option { // test literal_pattern // fn main() { // match () { + // -1 => (), // 92 => (), // 'c' => (), // "hello" => (), // } // } + if p.at(MINUS) && (p.nth(1) == INT_NUMBER || p.nth(1) == FLOAT_NUMBER) { + p.bump(); + } + if let Some(m) = expressions::literal(p) { return Some(m); } diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0055_literal_pattern.rs b/crates/ra_syntax/tests/data/parser/inline/ok/0055_literal_pattern.rs index 16f674d9d..6dfd67b4c 100644 --- a/crates/ra_syntax/tests/data/parser/inline/ok/0055_literal_pattern.rs +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0055_literal_pattern.rs @@ -1,5 +1,6 @@ fn main() { match () { + -1 => (), 92 => (), 'c' => (), "hello" => (), diff --git a/crates/ra_syntax/tests/data/parser/inline/ok/0055_literal_pattern.txt b/crates/ra_syntax/tests/data/parser/inline/ok/0055_literal_pattern.txt index 99b289d56..71d62eaba 100644 --- a/crates/ra_syntax/tests/data/parser/inline/ok/0055_literal_pattern.txt +++ b/crates/ra_syntax/tests/data/parser/inline/ok/0055_literal_pattern.txt @@ -1,5 +1,5 @@ -SOURCE_FILE@[0; 95) - FN_DEF@[0; 94) +SOURCE_FILE@[0; 113) + FN_DEF@[0; 112) FN_KW@[0; 2) WHITESPACE@[2; 3) NAME@[3; 7) @@ -8,22 +8,23 @@ SOURCE_FILE@[0; 95) L_PAREN@[7; 8) R_PAREN@[8; 9) WHITESPACE@[9; 10) - BLOCK@[10; 94) + BLOCK@[10; 112) L_CURLY@[10; 11) WHITESPACE@[11; 16) - MATCH_EXPR@[16; 92) + MATCH_EXPR@[16; 110) MATCH_KW@[16; 21) WHITESPACE@[21; 22) TUPLE_EXPR@[22; 24) L_PAREN@[22; 23) R_PAREN@[23; 24) WHITESPACE@[24; 25) - MATCH_ARM_LIST@[25; 92) + MATCH_ARM_LIST@[25; 110) L_CURLY@[25; 26) WHITESPACE@[26; 35) MATCH_ARM@[35; 43) - LITERAL@[35; 37) - INT_NUMBER@[35; 37) "92" + MINUS@[35; 36) + LITERAL@[36; 37) + INT_NUMBER@[36; 37) "1" WHITESPACE@[37; 38) FAT_ARROW@[38; 40) WHITESPACE@[40; 41) @@ -32,29 +33,40 @@ SOURCE_FILE@[0; 95) R_PAREN@[42; 43) COMMA@[43; 44) WHITESPACE@[44; 53) - MATCH_ARM@[53; 62) - LITERAL@[53; 56) - CHAR@[53; 56) - WHITESPACE@[56; 57) - FAT_ARROW@[57; 59) - WHITESPACE@[59; 60) - TUPLE_EXPR@[60; 62) - L_PAREN@[60; 61) - R_PAREN@[61; 62) - COMMA@[62; 63) - WHITESPACE@[63; 72) - MATCH_ARM@[72; 85) - LITERAL@[72; 79) - STRING@[72; 79) - WHITESPACE@[79; 80) - FAT_ARROW@[80; 82) - WHITESPACE@[82; 83) - TUPLE_EXPR@[83; 85) - L_PAREN@[83; 84) - R_PAREN@[84; 85) - COMMA@[85; 86) - WHITESPACE@[86; 91) - R_CURLY@[91; 92) - WHITESPACE@[92; 93) - R_CURLY@[93; 94) - WHITESPACE@[94; 95) + MATCH_ARM@[53; 61) + LITERAL@[53; 55) + INT_NUMBER@[53; 55) "92" + WHITESPACE@[55; 56) + FAT_ARROW@[56; 58) + WHITESPACE@[58; 59) + TUPLE_EXPR@[59; 61) + L_PAREN@[59; 60) + R_PAREN@[60; 61) + COMMA@[61; 62) + WHITESPACE@[62; 71) + MATCH_ARM@[71; 80) + LITERAL@[71; 74) + CHAR@[71; 74) + WHITESPACE@[74; 75) + FAT_ARROW@[75; 77) + WHITESPACE@[77; 78) + TUPLE_EXPR@[78; 80) + L_PAREN@[78; 79) + R_PAREN@[79; 80) + COMMA@[80; 81) + WHITESPACE@[81; 90) + MATCH_ARM@[90; 103) + LITERAL@[90; 97) + STRING@[90; 97) + WHITESPACE@[97; 98) + FAT_ARROW@[98; 100) + WHITESPACE@[100; 101) + TUPLE_EXPR@[101; 103) + L_PAREN@[101; 102) + R_PAREN@[102; 103) + COMMA@[103; 104) + WHITESPACE@[104; 109) + R_CURLY@[109; 110) + WHITESPACE@[110; 111) + R_CURLY@[111; 112) + WHITESPACE@[112; 113) -- cgit v1.2.3