From ada0f5da65ef41ac8fa11111839437c76edd3c68 Mon Sep 17 00:00:00 2001 From: Yip Coekjan <69834864+Coekjan@users.noreply.github.com> Date: Tue, 4 Jun 2024 23:33:08 +0800 Subject: Hint for labels in code mode (#4319) --- crates/typst-syntax/src/parser.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'crates/typst-syntax') diff --git a/crates/typst-syntax/src/parser.rs b/crates/typst-syntax/src/parser.rs index d341bca2..e27cafcf 100644 --- a/crates/typst-syntax/src/parser.rs +++ b/crates/typst-syntax/src/parser.rs @@ -633,6 +633,10 @@ fn code_exprs(p: &mut Parser, mut stop: impl FnMut(&Parser) -> bool) { code_expr(p); if !p.end() && !stop(p) && !p.eat_if(SyntaxKind::Semicolon) { p.expected("semicolon or line break"); + if p.at(SyntaxKind::Label) { + p.hint("labels can only be applied in markup mode"); + p.hint("try wrapping your code in a markup block (`[ ]`)"); + } } } @@ -1838,6 +1842,14 @@ impl<'s> Parser<'s> { self.nodes.insert(m.0, error); } + /// Produce a hint. + fn hint(&mut self, hint: &str) { + let m = self.before_trivia(); + if let Some(error) = self.nodes.get_mut(m.0 - 1) { + error.hint(hint); + } + } + /// Consume the next token (if any) and produce an error stating that it was /// unexpected. fn unexpected(&mut self) { -- cgit v1.2.3