fix: Use pattern recovery set when parsing ident patterns

This commit is contained in:
Lukas Wirth 2022-04-27 19:08:50 +02:00
parent 1b120216de
commit e2344e78f3

View File

@ -223,20 +223,16 @@ fn record_pat_field(p: &mut Parser) {
p.bump(T![:]);
pattern(p);
}
T![.] => {
if p.at(T![..]) {
p.bump(T![..]);
} else {
ident_pat(p, false);
}
}
T![box] => {
// FIXME: not all box patterns should be allowed
box_pat(p);
}
_ => {
T![ref] | T![mut] | IDENT => {
ident_pat(p, false);
}
_ => {
p.err_and_bump("expected identifier");
}
}
}
@ -405,10 +401,11 @@ fn pat_list(p: &mut Parser, ket: SyntaxKind) {
// let ref mut f @ g @ _ = ();
// }
fn ident_pat(p: &mut Parser, with_at: bool) -> CompletedMarker {
assert!(matches!(p.current(), T![ref] | T![mut] | IDENT));
let m = p.start();
p.eat(T![ref]);
p.eat(T![mut]);
name(p);
name_r(p, PAT_RECOVERY_SET);
if with_at && p.eat(T![@]) {
pattern_single(p);
}