summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/typst-syntax/src/parser.rs5
-rw-r--r--tests/suite/styling/set.typ15
2 files changed, 19 insertions, 1 deletions
diff --git a/crates/typst-syntax/src/parser.rs b/crates/typst-syntax/src/parser.rs
index 8c783ffe..a8bec626 100644
--- a/crates/typst-syntax/src/parser.rs
+++ b/crates/typst-syntax/src/parser.rs
@@ -1224,8 +1224,11 @@ fn array_or_dict_item(p: &mut Parser, state: &mut GroupState) {
/// Parses a function call's argument list: `(12pt, y)`.
fn args(p: &mut Parser) {
- if !p.at(SyntaxKind::LeftParen) && !p.at(SyntaxKind::LeftBracket) {
+ if !p.directly_at(SyntaxKind::LeftParen) && !p.directly_at(SyntaxKind::LeftBracket) {
p.expected("argument list");
+ if p.at(SyntaxKind::LeftParen) || p.at(SyntaxKind::LeftBracket) {
+ p.hint("there may not be any spaces before the argument list");
+ }
}
let m = p.marker();
diff --git a/tests/suite/styling/set.typ b/tests/suite/styling/set.typ
index ea4c0d84..89bf069e 100644
--- a/tests/suite/styling/set.typ
+++ b/tests/suite/styling/set.typ
@@ -65,6 +65,21 @@ Hello *#x*
// Error: 12-26 set is only allowed directly in code and content blocks
#{ let x = set text(blue) }
+--- set-bad-trivia ---
+// Error cases parsing set rules with trivia between the function and args.
+// Error: 10 expected argument list
+#set page
+ (numbering: "1")
+// Error: 10 expected argument list
+// Hint: 10 there may not be any spaces before the argument list
+#set page (numbering: "2")
+// Error: 10 expected argument list
+// Hint: 10 there may not be any spaces before the argument list
+#set page/**/(numbering: "3")
+
+// This is fine though
+#set/**/page(numbering: "4")
+
--- set-vs-construct-1 ---
// Ensure that constructor styles aren't passed down the tree.
// The inner list should have no extra indent.