mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 22:31:43 +00:00
improve error recovery
parse the contents of error block as an expression
This commit is contained in:
parent
3000b13df2
commit
77f2381eea
4 changed files with 77 additions and 59 deletions
|
@ -182,21 +182,11 @@ fn name_ref(p: &mut Parser) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn error_block(p: &mut Parser, message: &str) {
|
fn error_block(p: &mut Parser, message: &str) {
|
||||||
go(p, Some(message));
|
|
||||||
fn go(p: &mut Parser, message: Option<&str>) {
|
|
||||||
assert!(p.at(L_CURLY));
|
assert!(p.at(L_CURLY));
|
||||||
let m = p.start();
|
let m = p.start();
|
||||||
if let Some(message) = message {
|
|
||||||
p.error(message);
|
p.error(message);
|
||||||
}
|
|
||||||
p.bump();
|
p.bump();
|
||||||
while !p.at(EOF) && !p.at(R_CURLY) {
|
expressions::expr_block_contents(p);
|
||||||
match p.current() {
|
|
||||||
L_CURLY => go(p, None),
|
|
||||||
_ => p.bump(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.eat(R_CURLY);
|
p.eat(R_CURLY);
|
||||||
m.complete(p, ERROR);
|
m.complete(p, ERROR);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -28,26 +28,33 @@ SOURCE_FILE@[0; 95)
|
||||||
ERROR@[20; 80)
|
ERROR@[20; 80)
|
||||||
L_CURLY@[20; 21)
|
L_CURLY@[20; 21)
|
||||||
WHITESPACE@[21; 26)
|
WHITESPACE@[21; 26)
|
||||||
|
IF_EXPR@[26; 78)
|
||||||
IF_KW@[26; 28)
|
IF_KW@[26; 28)
|
||||||
WHITESPACE@[28; 29)
|
WHITESPACE@[28; 29)
|
||||||
|
CONDITION@[29; 33)
|
||||||
|
LITERAL@[29; 33)
|
||||||
TRUE_KW@[29; 33)
|
TRUE_KW@[29; 33)
|
||||||
WHITESPACE@[33; 34)
|
WHITESPACE@[33; 34)
|
||||||
ERROR@[34; 51)
|
BLOCK@[34; 51)
|
||||||
L_CURLY@[34; 35)
|
L_CURLY@[34; 35)
|
||||||
WHITESPACE@[35; 44)
|
WHITESPACE@[35; 44)
|
||||||
|
LITERAL@[44; 45)
|
||||||
INT_NUMBER@[44; 45) "1"
|
INT_NUMBER@[44; 45) "1"
|
||||||
WHITESPACE@[45; 50)
|
WHITESPACE@[45; 50)
|
||||||
R_CURLY@[50; 51)
|
R_CURLY@[50; 51)
|
||||||
WHITESPACE@[51; 52)
|
WHITESPACE@[51; 52)
|
||||||
ELSE_KW@[52; 56)
|
ELSE_KW@[52; 56)
|
||||||
WHITESPACE@[56; 57)
|
WHITESPACE@[56; 57)
|
||||||
ERROR@[57; 78)
|
BLOCK@[57; 78)
|
||||||
L_CURLY@[57; 58)
|
L_CURLY@[57; 58)
|
||||||
WHITESPACE@[58; 67)
|
WHITESPACE@[58; 67)
|
||||||
|
BIN_EXPR@[67; 72)
|
||||||
|
LITERAL@[67; 68)
|
||||||
INT_NUMBER@[67; 68) "2"
|
INT_NUMBER@[67; 68) "2"
|
||||||
WHITESPACE@[68; 69)
|
WHITESPACE@[68; 69)
|
||||||
PLUS@[69; 70)
|
PLUS@[69; 70)
|
||||||
WHITESPACE@[70; 71)
|
WHITESPACE@[70; 71)
|
||||||
|
LITERAL@[71; 72)
|
||||||
INT_NUMBER@[71; 72) "3"
|
INT_NUMBER@[71; 72) "3"
|
||||||
WHITESPACE@[72; 77)
|
WHITESPACE@[72; 77)
|
||||||
R_CURLY@[77; 78)
|
R_CURLY@[77; 78)
|
||||||
|
|
|
@ -28,9 +28,23 @@ SOURCE_FILE@[0; 43)
|
||||||
ERROR@[17; 31)
|
ERROR@[17; 31)
|
||||||
L_CURLY@[17; 18)
|
L_CURLY@[17; 18)
|
||||||
WHITESPACE@[18; 23)
|
WHITESPACE@[18; 23)
|
||||||
|
EXPR_STMT@[23; 24)
|
||||||
|
PATH_EXPR@[23; 24)
|
||||||
|
PATH@[23; 24)
|
||||||
|
PATH_SEGMENT@[23; 24)
|
||||||
|
NAME_REF@[23; 24)
|
||||||
IDENT@[23; 24) "f"
|
IDENT@[23; 24) "f"
|
||||||
|
err: `expected SEMI`
|
||||||
|
err: `expected expression`
|
||||||
|
EXPR_STMT@[24; 25)
|
||||||
|
ERROR@[24; 25)
|
||||||
COLON@[24; 25)
|
COLON@[24; 25)
|
||||||
|
err: `expected SEMI`
|
||||||
WHITESPACE@[25; 26)
|
WHITESPACE@[25; 26)
|
||||||
|
PATH_EXPR@[26; 29)
|
||||||
|
PATH@[26; 29)
|
||||||
|
PATH_SEGMENT@[26; 29)
|
||||||
|
NAME_REF@[26; 29)
|
||||||
IDENT@[26; 29) "u32"
|
IDENT@[26; 29) "u32"
|
||||||
WHITESPACE@[29; 30)
|
WHITESPACE@[29; 30)
|
||||||
R_CURLY@[30; 31)
|
R_CURLY@[30; 31)
|
||||||
|
|
|
@ -34,13 +34,20 @@ SOURCE_FILE@[0; 349)
|
||||||
ERROR@[42; 93)
|
ERROR@[42; 93)
|
||||||
L_CURLY@[42; 43)
|
L_CURLY@[42; 43)
|
||||||
WHITESPACE@[43; 48)
|
WHITESPACE@[43; 48)
|
||||||
|
MACRO_CALL@[48; 91)
|
||||||
|
PATH@[48; 51)
|
||||||
|
PATH_SEGMENT@[48; 51)
|
||||||
|
NAME_REF@[48; 51)
|
||||||
IDENT@[48; 51) "vec"
|
IDENT@[48; 51) "vec"
|
||||||
EXCL@[51; 52)
|
EXCL@[51; 52)
|
||||||
|
TOKEN_TREE@[52; 91)
|
||||||
L_BRACK@[52; 53)
|
L_BRACK@[52; 53)
|
||||||
WHITESPACE@[53; 62)
|
WHITESPACE@[53; 62)
|
||||||
DOLLAR@[62; 63)
|
DOLLAR@[62; 63)
|
||||||
|
TOKEN_TREE@[63; 84)
|
||||||
L_PAREN@[63; 64)
|
L_PAREN@[63; 64)
|
||||||
IDENT@[64; 78) "parse_use_tree"
|
IDENT@[64; 78) "parse_use_tree"
|
||||||
|
TOKEN_TREE@[78; 82)
|
||||||
L_PAREN@[78; 79)
|
L_PAREN@[78; 79)
|
||||||
DOLLAR@[79; 80)
|
DOLLAR@[79; 80)
|
||||||
IDENT@[80; 81) "s"
|
IDENT@[80; 81) "s"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue