From 801b689dae169ceeec9ae94389e93d976bb46014 Mon Sep 17 00:00:00 2001 From: T0mstone Date: Wed, 11 Jun 2025 16:33:26 +0200 Subject: [PATCH] Apply suggestions Co-authored-by: Laurenz --- crates/typst-eval/src/code.rs | 36 +++++++++++++++++++------------- tests/suite/styling/in-block.typ | 12 +++++------ 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/crates/typst-eval/src/code.rs b/crates/typst-eval/src/code.rs index 56c96a071..f42c9d730 100644 --- a/crates/typst-eval/src/code.rs +++ b/crates/typst-eval/src/code.rs @@ -7,6 +7,7 @@ use typst_library::foundations::{ }; use typst_library::introspection::{Counter, State}; use typst_syntax::ast::{self, AstNode}; +use typst_syntax::Span; use typst_utils::singleton; use crate::{CapturesVisitor, Eval, FlowEvent, Vm}; @@ -284,21 +285,19 @@ impl Eval for ast::CodeBlock<'_> { type Output = Value; fn eval(self, vm: &mut Vm) -> SourceResult { - vm.scopes.enter(); - if let Some((span, kind)) = - self.body().exprs().next_back().and_then(|x| match x { - ast::Expr::ShowRule(_) => Some((x.span(), "show")), - ast::Expr::SetRule(_) => Some((x.span(), "set")), - _ => None, - }) - { - vm.engine.sink.warn(typst_library::diag::warning!( - span, - "{kind} rule has no effect"; - hint: "See https://typst.app/docs/tutorial/making-a-template/#set-and-show-rules" - )); + let body = self.body(); + match body.exprs().next_back() { + Some(expr @ ast::Expr::ShowRule(_)) => { + warn_for_useless_rule(&mut vm.engine, expr.span(), "show") + } + Some(expr @ ast::Expr::SetRule(_)) => { + warn_for_useless_rule(&mut vm.engine, expr.span(), "set") + } + _ => {} } - let output = self.body().eval(vm)?; + + vm.scopes.enter(); + let output = body.eval(vm)?; vm.scopes.exit(); Ok(output) } @@ -406,3 +405,12 @@ fn warn_for_discarded_content(engine: &mut Engine, event: &FlowEvent, joined: &V engine.sink.warn(warning); } + +/// Emits a warning when a set or show rule has no effect. +fn warn_for_useless_rule(engine: &mut Engine, span: Span, kind: &str) { + engine.sink.warn(warning!( + span, + "{kind} rule has no effect"; + hint: "a {kind} rule is only in effect until the end of the surrounding code block" + )); +} diff --git a/tests/suite/styling/in-block.typ b/tests/suite/styling/in-block.typ index e13a2d3a8..7645f83ca 100644 --- a/tests/suite/styling/in-block.typ +++ b/tests/suite/styling/in-block.typ @@ -1,12 +1,12 @@ --- warn-show-set-last-in-block --- #{ -// Warning: 1-14 show rule has no effect -// Hint: 1-14 See https://typst.app/docs/tutorial/making-a-template/#set-and-show-rules -show "a": "b" + // Warning: 1-14 show rule has no effect + // Hint: 1-14 a show rule is only in effect until the end of the surrounding code block + show "a": "b" } #{ -// Warning: 1-15 set rule has no effect -// Hint: 1-15 See https://typst.app/docs/tutorial/making-a-template/#set-and-show-rules -set text(blue) + // Warning: 1-15 set rule has no effect + // Hint: 1-15 a set rule is only in effect until the end of the surrounding code block + set text(blue) }