Improve recovery for incomplete lambdas
This commit is contained in:
parent
cb79e30d53
commit
3e2f4e4293
@ -248,7 +248,12 @@ fn lambda_expr(p: &mut Parser) -> CompletedMarker {
|
||||
p.error("expected `{`");
|
||||
}
|
||||
}
|
||||
expr(p);
|
||||
|
||||
if p.at_ts(EXPR_FIRST) {
|
||||
expr(p);
|
||||
} else {
|
||||
p.error("expected expression");
|
||||
}
|
||||
m.complete(p, LAMBDA_EXPR)
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,5 @@
|
||||
fn foo() -> i32 {
|
||||
[1, 2, 3].iter()
|
||||
.map(|it|)
|
||||
.max::<i32>();
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
SOURCE_FILE@[0; 83)
|
||||
FN_DEF@[0; 82)
|
||||
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) " "
|
||||
RET_TYPE@[9; 15)
|
||||
THIN_ARROW@[9; 11) "->"
|
||||
WHITESPACE@[11; 12) " "
|
||||
PATH_TYPE@[12; 15)
|
||||
PATH@[12; 15)
|
||||
PATH_SEGMENT@[12; 15)
|
||||
NAME_REF@[12; 15)
|
||||
IDENT@[12; 15) "i32"
|
||||
WHITESPACE@[15; 16) " "
|
||||
BLOCK_EXPR@[16; 82)
|
||||
BLOCK@[16; 82)
|
||||
L_CURLY@[16; 17) "{"
|
||||
WHITESPACE@[17; 22) "\n "
|
||||
EXPR_STMT@[22; 80)
|
||||
METHOD_CALL_EXPR@[22; 79)
|
||||
METHOD_CALL_EXPR@[22; 57)
|
||||
METHOD_CALL_EXPR@[22; 38)
|
||||
ARRAY_EXPR@[22; 31)
|
||||
L_BRACK@[22; 23) "["
|
||||
LITERAL@[23; 24)
|
||||
INT_NUMBER@[23; 24) "1"
|
||||
COMMA@[24; 25) ","
|
||||
WHITESPACE@[25; 26) " "
|
||||
LITERAL@[26; 27)
|
||||
INT_NUMBER@[26; 27) "2"
|
||||
COMMA@[27; 28) ","
|
||||
WHITESPACE@[28; 29) " "
|
||||
LITERAL@[29; 30)
|
||||
INT_NUMBER@[29; 30) "3"
|
||||
R_BRACK@[30; 31) "]"
|
||||
DOT@[31; 32) "."
|
||||
NAME_REF@[32; 36)
|
||||
IDENT@[32; 36) "iter"
|
||||
ARG_LIST@[36; 38)
|
||||
L_PAREN@[36; 37) "("
|
||||
R_PAREN@[37; 38) ")"
|
||||
WHITESPACE@[38; 47) "\n "
|
||||
DOT@[47; 48) "."
|
||||
NAME_REF@[48; 51)
|
||||
IDENT@[48; 51) "map"
|
||||
ARG_LIST@[51; 57)
|
||||
L_PAREN@[51; 52) "("
|
||||
LAMBDA_EXPR@[52; 56)
|
||||
PARAM_LIST@[52; 56)
|
||||
PIPE@[52; 53) "|"
|
||||
PARAM@[53; 55)
|
||||
BIND_PAT@[53; 55)
|
||||
NAME@[53; 55)
|
||||
IDENT@[53; 55) "it"
|
||||
PIPE@[55; 56) "|"
|
||||
R_PAREN@[56; 57) ")"
|
||||
WHITESPACE@[57; 66) "\n "
|
||||
DOT@[66; 67) "."
|
||||
NAME_REF@[67; 70)
|
||||
IDENT@[67; 70) "max"
|
||||
TYPE_ARG_LIST@[70; 77)
|
||||
COLONCOLON@[70; 72) "::"
|
||||
L_ANGLE@[72; 73) "<"
|
||||
TYPE_ARG@[73; 76)
|
||||
PATH_TYPE@[73; 76)
|
||||
PATH@[73; 76)
|
||||
PATH_SEGMENT@[73; 76)
|
||||
NAME_REF@[73; 76)
|
||||
IDENT@[73; 76) "i32"
|
||||
R_ANGLE@[76; 77) ">"
|
||||
ARG_LIST@[77; 79)
|
||||
L_PAREN@[77; 78) "("
|
||||
R_PAREN@[78; 79) ")"
|
||||
SEMI@[79; 80) ";"
|
||||
WHITESPACE@[80; 81) "\n"
|
||||
R_CURLY@[81; 82) "}"
|
||||
WHITESPACE@[82; 83) "\n"
|
||||
error 56: expected expression
|
Loading…
Reference in New Issue
Block a user