Apply suggestions

Co-authored-by: Laurenz <laurmaedje@gmail.com>
This commit is contained in:
T0mstone 2025-06-11 16:33:26 +02:00
parent d799a4207b
commit 801b689dae
2 changed files with 28 additions and 20 deletions

View File

@ -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<Self::Output> {
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")
}
let output = self.body().eval(vm)?;
Some(expr @ ast::Expr::SetRule(_)) => {
warn_for_useless_rule(&mut vm.engine, expr.span(), "set")
}
_ => {}
}
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"
));
}

View File

@ -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
// 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
// Hint: 1-15 a set rule is only in effect until the end of the surrounding code block
set text(blue)
}