summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/typst-syntax/src/parser.rs11
-rw-r--r--tests/suite/scripting/let.typ17
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)