From a70b8a56ef17d493c8ebf8c3fee6f86b4bb1e994 Mon Sep 17 00:00:00 2001 From: Ian Wrzesinski <133046678+wrzian@users.noreply.github.com> Date: Fri, 1 Nov 2024 05:45:08 -0400 Subject: [PATCH] Disallow space between ident and paren in set rule (#5269) --- crates/typst-syntax/src/parser.rs | 5 ++++- tests/suite/styling/set.typ | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/crates/typst-syntax/src/parser.rs b/crates/typst-syntax/src/parser.rs index 8c783ffed..a8bec6268 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 ea4c0d84e..89bf069e0 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.