Auto merge of #12090 - Veykril:recov, r=Veykril

fix: Use pattern recovery set when parsing ident patterns
This commit is contained in:
bors 2022-04-27 17:18:46 +00:00
commit ab8159b0b2

View file

@ -223,20 +223,16 @@ fn record_pat_field(p: &mut Parser) {
p.bump(T![:]); p.bump(T![:]);
pattern(p); pattern(p);
} }
T![.] => {
if p.at(T![..]) {
p.bump(T![..]);
} else {
ident_pat(p, false);
}
}
T![box] => { T![box] => {
// FIXME: not all box patterns should be allowed // FIXME: not all box patterns should be allowed
box_pat(p); box_pat(p);
} }
_ => { T![ref] | T![mut] | IDENT => {
ident_pat(p, false); 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 @ _ = (); // let ref mut f @ g @ _ = ();
// } // }
fn ident_pat(p: &mut Parser, with_at: bool) -> CompletedMarker { fn ident_pat(p: &mut Parser, with_at: bool) -> CompletedMarker {
assert!(matches!(p.current(), T![ref] | T![mut] | IDENT));
let m = p.start(); let m = p.start();
p.eat(T![ref]); p.eat(T![ref]);
p.eat(T![mut]); p.eat(T![mut]);
name(p); name_r(p, PAT_RECOVERY_SET);
if with_at && p.eat(T![@]) { if with_at && p.eat(T![@]) {
pattern_single(p); pattern_single(p);
} }