fix: Recover from = in record pattern field

This commit is contained in:
Lukas Wirth 2024-02-13 18:25:40 +01:00
parent ccccc299c8
commit bf115a6064
6 changed files with 59 additions and 4 deletions

View file

@ -694,7 +694,7 @@ pub(crate) fn record_expr_field_list(p: &mut Parser<'_>) {
// S { field ..S::default() }
// }
name_ref_or_index(p);
p.error("expected colon");
p.error("expected `:`");
} else {
// test_err record_literal_field_eq_recovery
// fn main() {
@ -705,7 +705,7 @@ pub(crate) fn record_expr_field_list(p: &mut Parser<'_>) {
p.bump(T![:]);
} else if p.nth_at(1, T![=]) {
name_ref_or_index(p);
p.err_and_bump("expected colon");
p.err_and_bump("expected `:`");
}
expr(p);
}

View file

@ -323,6 +323,15 @@ fn record_pat_field(p: &mut Parser<'_>) {
p.bump(T![:]);
pattern(p);
}
// test_err record_pat_field_eq_recovery
// fn main() {
// let S { field = foo };
// }
IDENT | INT_NUMBER if p.nth(1) == T![=] => {
name_ref_or_index(p);
p.err_and_bump("expected `:`");
pattern(p);
}
T![box] => {
// FIXME: not all box patterns should be allowed
box_pat(p);

View file

@ -45,5 +45,5 @@ SOURCE_FILE
WHITESPACE "\n"
R_CURLY "}"
WHITESPACE "\n"
error 25: expected colon
error 25: expected `:`
error 25: expected COMMA

View file

@ -38,4 +38,4 @@ SOURCE_FILE
WHITESPACE "\n"
R_CURLY "}"
WHITESPACE "\n"
error 26: expected colon
error 26: expected `:`

View file

@ -0,0 +1,43 @@
SOURCE_FILE
FN
FN_KW "fn"
WHITESPACE " "
NAME
IDENT "main"
PARAM_LIST
L_PAREN "("
R_PAREN ")"
WHITESPACE " "
BLOCK_EXPR
STMT_LIST
L_CURLY "{"
WHITESPACE "\n "
LET_STMT
LET_KW "let"
WHITESPACE " "
RECORD_PAT
PATH
PATH_SEGMENT
NAME_REF
IDENT "S"
WHITESPACE " "
RECORD_PAT_FIELD_LIST
L_CURLY "{"
WHITESPACE " "
RECORD_PAT_FIELD
NAME_REF
IDENT "field"
WHITESPACE " "
ERROR
EQ "="
WHITESPACE " "
IDENT_PAT
NAME
IDENT "foo"
WHITESPACE " "
R_CURLY "}"
SEMICOLON ";"
WHITESPACE "\n"
R_CURLY "}"
WHITESPACE "\n"
error 30: expected `:`

View file

@ -0,0 +1,3 @@
fn main() {
let S { field = foo };
}