diff options
| author | Ian Wrzesinski <133046678+wrzian@users.noreply.github.com> | 2024-11-01 05:45:08 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-01 09:45:08 +0000 |
| commit | a70b8a56ef17d493c8ebf8c3fee6f86b4bb1e994 (patch) | |
| tree | 7cd9acac3dbfc9bf76622e23f3569aed60b41e81 | |
| parent | 23313b0af0e9a70f313863db6bb1f5f5beca7de4 (diff) | |
Disallow space between ident and paren in set rule (#5269)
| -rw-r--r-- | crates/typst-syntax/src/parser.rs | 5 | ||||
| -rw-r--r-- | tests/suite/styling/set.typ | 15 |
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. |
