From e2344e78f36f399b94893f4947c943101b29958b Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Wed, 27 Apr 2022 19:08:50 +0200 Subject: [PATCH] fix: Use pattern recovery set when parsing ident patterns --- crates/parser/src/grammar/patterns.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/crates/parser/src/grammar/patterns.rs b/crates/parser/src/grammar/patterns.rs index 70ff87b238..1f622b32e5 100644 --- a/crates/parser/src/grammar/patterns.rs +++ b/crates/parser/src/grammar/patterns.rs @@ -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); }