From 44bc51ba4fef66b7778668b3877a65425ac2eedc Mon Sep 17 00:00:00 2001 From: Leedehai <18319900+Leedehai@users.noreply.github.com> Date: Tue, 30 Apr 2024 08:30:38 -0400 Subject: [PATCH] Let let-binding raise error on unexpected keywords (#4034) --- crates/typst-syntax/src/parser.rs | 11 +++++------ tests/suite/scripting/let.typ | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/crates/typst-syntax/src/parser.rs b/crates/typst-syntax/src/parser.rs index e61618e0..d8ac1198 100644 --- a/crates/typst-syntax/src/parser.rs +++ b/crates/typst-syntax/src/parser.rs @@ -1452,12 +1452,11 @@ fn pattern_leaf<'s>( seen: &mut HashSet<&'s str>, dupe: Option<&'s str>, ) { - if !p.at_set(set::PATTERN_LEAF) { - if p.current().is_keyword() { - p.eat_and_get().expected("pattern"); - } else { - p.expected("pattern"); - } + if p.current().is_keyword() { + p.eat_and_get().expected("pattern"); + return; + } else if !p.at_set(set::PATTERN_LEAF) { + p.expected("pattern"); return; } diff --git a/tests/suite/scripting/let.typ b/tests/suite/scripting/let.typ index 2604c4ea..aafc6579 100644 --- a/tests/suite/scripting/let.typ +++ b/tests/suite/scripting/let.typ @@ -141,3 +141,20 @@ Three // ... where this wasn't. // Error: 12 expected equals sign #let (a, b) + +--- issue-4027-let-binding-with-keyword-context --- +// Error: 6-13 expected pattern, found keyword `context` +// Hint: 6-13 keyword `context` is not allowed as an identifier; try `context_` instead +#let context = 5 + +--- issue-4027-let-binding-with-keyword-let --- +// Error: 6-9 expected pattern, found keyword `let` +// Hint: 6-9 keyword `let` is not allowed as an identifier; try `let_` instead +#let let = 5 + +--- issue-4027-let-binding-with-destructured-keywords --- +// Error: 7-14 expected pattern, found keyword `context` +// Hint: 7-14 keyword `context` is not allowed as an identifier; try `context_` instead +// Error: 21-24 expected pattern, found keyword `let` +// Hint: 21-24 keyword `let` is not allowed as an identifier; try `let_` instead +#let (context, foo, let) = (5, 6, 7)