mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-03 15:15:24 +00:00
Fix parsing of inclusive ranges (#214)
I'm not certain that this is correct, so extra eyes would be good
This commit is contained in:
parent
0bd9d87e87
commit
20bbe0127c
6 changed files with 158 additions and 37 deletions
|
@ -143,7 +143,7 @@ fn current_op(p: &Parser) -> (u8, Op) {
|
||||||
|
|
||||||
let bp = match p.current() {
|
let bp = match p.current() {
|
||||||
EQ => 1,
|
EQ => 1,
|
||||||
DOTDOT => 2,
|
DOTDOT | DOTDOTEQ => 2,
|
||||||
EQEQ | NEQ | L_ANGLE | R_ANGLE => 5,
|
EQEQ | NEQ | L_ANGLE | R_ANGLE => 5,
|
||||||
PIPE => 6,
|
PIPE => 6,
|
||||||
CARET => 7,
|
CARET => 7,
|
||||||
|
@ -173,7 +173,7 @@ fn expr_bp(p: &mut Parser, r: Restrictions, bp: u8) -> BlockLike {
|
||||||
};
|
};
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let is_range = p.current() == DOTDOT;
|
let is_range = p.current() == DOTDOT || p.current() == DOTDOTEQ;
|
||||||
let (op_bp, op) = current_op(p);
|
let (op_bp, op) = current_op(p);
|
||||||
if op_bp < bp {
|
if op_bp < bp {
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -14,9 +14,13 @@ pub(super) fn pattern_r(p: &mut Parser, recovery_set: TokenSet) {
|
||||||
if let Some(lhs) = atom_pat(p, recovery_set) {
|
if let Some(lhs) = atom_pat(p, recovery_set) {
|
||||||
// test range_pat
|
// test range_pat
|
||||||
// fn main() {
|
// fn main() {
|
||||||
// match 92 { 0 ... 100 => () }
|
// match 92 {
|
||||||
|
// 0 ... 100 => (),
|
||||||
|
// 101 ..= 200 => (),
|
||||||
|
// 200 .. 301=> (),
|
||||||
// }
|
// }
|
||||||
if p.at(DOTDOTDOT) {
|
// }
|
||||||
|
if p.at(DOTDOTDOT) || p.at(DOTDOTEQ) || p.at(DOTDOT) {
|
||||||
let m = lhs.precede(p);
|
let m = lhs.precede(p);
|
||||||
p.bump();
|
p.bump();
|
||||||
atom_pat(p, recovery_set);
|
atom_pat(p, recovery_set);
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
match 92 { 0 ... 100 => () }
|
match 92 {
|
||||||
|
0 ... 100 => (),
|
||||||
|
101 ..= 200 => (),
|
||||||
|
200 .. 301=> (),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
SOURCE_FILE@[0; 47)
|
SOURCE_FILE@[0; 113)
|
||||||
FN_DEF@[0; 46)
|
FN_DEF@[0; 112)
|
||||||
FN_KW@[0; 2)
|
FN_KW@[0; 2)
|
||||||
WHITESPACE@[2; 3)
|
WHITESPACE@[2; 3)
|
||||||
NAME@[3; 7)
|
NAME@[3; 7)
|
||||||
|
@ -8,35 +8,69 @@ SOURCE_FILE@[0; 47)
|
||||||
L_PAREN@[7; 8)
|
L_PAREN@[7; 8)
|
||||||
R_PAREN@[8; 9)
|
R_PAREN@[8; 9)
|
||||||
WHITESPACE@[9; 10)
|
WHITESPACE@[9; 10)
|
||||||
BLOCK@[10; 46)
|
BLOCK@[10; 112)
|
||||||
L_CURLY@[10; 11)
|
L_CURLY@[10; 11)
|
||||||
WHITESPACE@[11; 16)
|
WHITESPACE@[11; 16)
|
||||||
MATCH_EXPR@[16; 44)
|
MATCH_EXPR@[16; 110)
|
||||||
MATCH_KW@[16; 21)
|
MATCH_KW@[16; 21)
|
||||||
WHITESPACE@[21; 22)
|
WHITESPACE@[21; 22)
|
||||||
LITERAL@[22; 24)
|
LITERAL@[22; 24)
|
||||||
INT_NUMBER@[22; 24) "92"
|
INT_NUMBER@[22; 24) "92"
|
||||||
WHITESPACE@[24; 25)
|
WHITESPACE@[24; 25)
|
||||||
MATCH_ARM_LIST@[25; 44)
|
MATCH_ARM_LIST@[25; 110)
|
||||||
L_CURLY@[25; 26)
|
L_CURLY@[25; 26)
|
||||||
WHITESPACE@[26; 27)
|
WHITESPACE@[26; 36)
|
||||||
MATCH_ARM@[27; 42)
|
MATCH_ARM@[36; 51)
|
||||||
RANGE_PAT@[27; 36)
|
RANGE_PAT@[36; 45)
|
||||||
LITERAL@[27; 28)
|
LITERAL@[36; 37)
|
||||||
INT_NUMBER@[27; 28) "0"
|
INT_NUMBER@[36; 37) "0"
|
||||||
WHITESPACE@[28; 29)
|
WHITESPACE@[37; 38)
|
||||||
DOTDOTDOT@[29; 32)
|
DOTDOTDOT@[38; 41)
|
||||||
WHITESPACE@[32; 33)
|
WHITESPACE@[41; 42)
|
||||||
LITERAL@[33; 36)
|
LITERAL@[42; 45)
|
||||||
INT_NUMBER@[33; 36) "100"
|
INT_NUMBER@[42; 45) "100"
|
||||||
WHITESPACE@[36; 37)
|
WHITESPACE@[45; 46)
|
||||||
FAT_ARROW@[37; 39)
|
FAT_ARROW@[46; 48)
|
||||||
WHITESPACE@[39; 40)
|
WHITESPACE@[48; 49)
|
||||||
TUPLE_EXPR@[40; 42)
|
TUPLE_EXPR@[49; 51)
|
||||||
L_PAREN@[40; 41)
|
L_PAREN@[49; 50)
|
||||||
R_PAREN@[41; 42)
|
R_PAREN@[50; 51)
|
||||||
WHITESPACE@[42; 43)
|
COMMA@[51; 52)
|
||||||
R_CURLY@[43; 44)
|
WHITESPACE@[52; 61)
|
||||||
WHITESPACE@[44; 45)
|
MATCH_ARM@[61; 78)
|
||||||
R_CURLY@[45; 46)
|
RANGE_PAT@[61; 72)
|
||||||
WHITESPACE@[46; 47)
|
LITERAL@[61; 64)
|
||||||
|
INT_NUMBER@[61; 64) "101"
|
||||||
|
WHITESPACE@[64; 65)
|
||||||
|
DOTDOTEQ@[65; 68)
|
||||||
|
WHITESPACE@[68; 69)
|
||||||
|
LITERAL@[69; 72)
|
||||||
|
INT_NUMBER@[69; 72) "200"
|
||||||
|
WHITESPACE@[72; 73)
|
||||||
|
FAT_ARROW@[73; 75)
|
||||||
|
WHITESPACE@[75; 76)
|
||||||
|
TUPLE_EXPR@[76; 78)
|
||||||
|
L_PAREN@[76; 77)
|
||||||
|
R_PAREN@[77; 78)
|
||||||
|
COMMA@[78; 79)
|
||||||
|
WHITESPACE@[79; 88)
|
||||||
|
MATCH_ARM@[88; 103)
|
||||||
|
RANGE_PAT@[88; 98)
|
||||||
|
LITERAL@[88; 91)
|
||||||
|
INT_NUMBER@[88; 91) "200"
|
||||||
|
WHITESPACE@[91; 92)
|
||||||
|
DOTDOT@[92; 94)
|
||||||
|
WHITESPACE@[94; 95)
|
||||||
|
LITERAL@[95; 98)
|
||||||
|
INT_NUMBER@[95; 98) "301"
|
||||||
|
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)
|
||||||
|
|
|
@ -3,4 +3,9 @@ fn foo() {
|
||||||
..z = 2;
|
..z = 2;
|
||||||
x = false..1 == 1;
|
x = false..1 == 1;
|
||||||
let x = 1..;
|
let x = 1..;
|
||||||
|
|
||||||
|
..=1 + 1;
|
||||||
|
..=z = 2;
|
||||||
|
x = false..=1 == 1;
|
||||||
|
let x = 1..;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
SOURCE_FILE@[0; 79)
|
SOURCE_FILE@[0; 153)
|
||||||
FN_DEF@[0; 78)
|
FN_DEF@[0; 152)
|
||||||
FN_KW@[0; 2)
|
FN_KW@[0; 2)
|
||||||
WHITESPACE@[2; 3)
|
WHITESPACE@[2; 3)
|
||||||
NAME@[3; 6)
|
NAME@[3; 6)
|
||||||
|
@ -8,7 +8,7 @@ SOURCE_FILE@[0; 79)
|
||||||
L_PAREN@[6; 7)
|
L_PAREN@[6; 7)
|
||||||
R_PAREN@[7; 8)
|
R_PAREN@[7; 8)
|
||||||
WHITESPACE@[8; 9)
|
WHITESPACE@[8; 9)
|
||||||
BLOCK@[9; 78)
|
BLOCK@[9; 152)
|
||||||
L_CURLY@[9; 10)
|
L_CURLY@[9; 10)
|
||||||
WHITESPACE@[10; 15)
|
WHITESPACE@[10; 15)
|
||||||
EXPR_STMT@[15; 23)
|
EXPR_STMT@[15; 23)
|
||||||
|
@ -78,6 +78,80 @@ SOURCE_FILE@[0; 79)
|
||||||
INT_NUMBER@[72; 73) "1"
|
INT_NUMBER@[72; 73) "1"
|
||||||
DOTDOT@[73; 75)
|
DOTDOT@[73; 75)
|
||||||
SEMI@[75; 76)
|
SEMI@[75; 76)
|
||||||
WHITESPACE@[76; 77)
|
WHITESPACE@[76; 86)
|
||||||
R_CURLY@[77; 78)
|
err: `expected expression`
|
||||||
WHITESPACE@[78; 79)
|
EXPR_STMT@[86; 89)
|
||||||
|
ERROR@[86; 89)
|
||||||
|
DOTDOTEQ@[86; 89)
|
||||||
|
err: `expected SEMI`
|
||||||
|
EXPR_STMT@[89; 95)
|
||||||
|
BIN_EXPR@[89; 94)
|
||||||
|
LITERAL@[89; 90)
|
||||||
|
INT_NUMBER@[89; 90) "1"
|
||||||
|
WHITESPACE@[90; 91)
|
||||||
|
PLUS@[91; 92)
|
||||||
|
WHITESPACE@[92; 93)
|
||||||
|
LITERAL@[93; 94)
|
||||||
|
INT_NUMBER@[93; 94) "1"
|
||||||
|
SEMI@[94; 95)
|
||||||
|
WHITESPACE@[95; 100)
|
||||||
|
err: `expected expression`
|
||||||
|
EXPR_STMT@[100; 103)
|
||||||
|
ERROR@[100; 103)
|
||||||
|
DOTDOTEQ@[100; 103)
|
||||||
|
err: `expected SEMI`
|
||||||
|
EXPR_STMT@[103; 109)
|
||||||
|
BIN_EXPR@[103; 108)
|
||||||
|
PATH_EXPR@[103; 104)
|
||||||
|
PATH@[103; 104)
|
||||||
|
PATH_SEGMENT@[103; 104)
|
||||||
|
NAME_REF@[103; 104)
|
||||||
|
IDENT@[103; 104) "z"
|
||||||
|
WHITESPACE@[104; 105)
|
||||||
|
EQ@[105; 106)
|
||||||
|
WHITESPACE@[106; 107)
|
||||||
|
LITERAL@[107; 108)
|
||||||
|
INT_NUMBER@[107; 108) "2"
|
||||||
|
SEMI@[108; 109)
|
||||||
|
WHITESPACE@[109; 114)
|
||||||
|
EXPR_STMT@[114; 133)
|
||||||
|
BIN_EXPR@[114; 132)
|
||||||
|
PATH_EXPR@[114; 115)
|
||||||
|
PATH@[114; 115)
|
||||||
|
PATH_SEGMENT@[114; 115)
|
||||||
|
NAME_REF@[114; 115)
|
||||||
|
IDENT@[114; 115) "x"
|
||||||
|
WHITESPACE@[115; 116)
|
||||||
|
EQ@[116; 117)
|
||||||
|
WHITESPACE@[117; 118)
|
||||||
|
RANGE_EXPR@[118; 132)
|
||||||
|
LITERAL@[118; 123)
|
||||||
|
FALSE_KW@[118; 123)
|
||||||
|
DOTDOTEQ@[123; 126)
|
||||||
|
BIN_EXPR@[126; 132)
|
||||||
|
LITERAL@[126; 127)
|
||||||
|
INT_NUMBER@[126; 127) "1"
|
||||||
|
WHITESPACE@[127; 128)
|
||||||
|
EQEQ@[128; 130)
|
||||||
|
WHITESPACE@[130; 131)
|
||||||
|
LITERAL@[131; 132)
|
||||||
|
INT_NUMBER@[131; 132) "1"
|
||||||
|
SEMI@[132; 133)
|
||||||
|
WHITESPACE@[133; 138)
|
||||||
|
LET_STMT@[138; 150)
|
||||||
|
LET_KW@[138; 141)
|
||||||
|
WHITESPACE@[141; 142)
|
||||||
|
BIND_PAT@[142; 143)
|
||||||
|
NAME@[142; 143)
|
||||||
|
IDENT@[142; 143) "x"
|
||||||
|
WHITESPACE@[143; 144)
|
||||||
|
EQ@[144; 145)
|
||||||
|
WHITESPACE@[145; 146)
|
||||||
|
RANGE_EXPR@[146; 149)
|
||||||
|
LITERAL@[146; 147)
|
||||||
|
INT_NUMBER@[146; 147) "1"
|
||||||
|
DOTDOT@[147; 149)
|
||||||
|
SEMI@[149; 150)
|
||||||
|
WHITESPACE@[150; 151)
|
||||||
|
R_CURLY@[151; 152)
|
||||||
|
WHITESPACE@[152; 153)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue