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_library::introspection::{Counter, State};
use typst_syntax::ast::{self, AstNode}; use typst_syntax::ast::{self, AstNode};
use typst_syntax::Span;
use typst_utils::singleton; use typst_utils::singleton;
use crate::{CapturesVisitor, Eval, FlowEvent, Vm}; use crate::{CapturesVisitor, Eval, FlowEvent, Vm};
@ -284,21 +285,19 @@ impl Eval for ast::CodeBlock<'_> {
type Output = Value; type Output = Value;
fn eval(self, vm: &mut Vm) -> SourceResult<Self::Output> { fn eval(self, vm: &mut Vm) -> SourceResult<Self::Output> {
vm.scopes.enter(); let body = self.body();
if let Some((span, kind)) = match body.exprs().next_back() {
self.body().exprs().next_back().and_then(|x| match x { Some(expr @ ast::Expr::ShowRule(_)) => {
ast::Expr::ShowRule(_) => Some((x.span(), "show")), warn_for_useless_rule(&mut vm.engine, expr.span(), "show")
ast::Expr::SetRule(_) => Some((x.span(), "set")), }
_ => None, Some(expr @ ast::Expr::SetRule(_)) => {
}) warn_for_useless_rule(&mut vm.engine, expr.span(), "set")
{ }
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 output = self.body().eval(vm)?;
vm.scopes.enter();
let output = body.eval(vm)?;
vm.scopes.exit(); vm.scopes.exit();
Ok(output) Ok(output)
} }
@ -406,3 +405,12 @@ fn warn_for_discarded_content(engine: &mut Engine, event: &FlowEvent, joined: &V
engine.sink.warn(warning); 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 --- --- warn-show-set-last-in-block ---
#{ #{
// Warning: 1-14 show rule has no effect // 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" show "a": "b"
} }
#{ #{
// Warning: 1-15 set rule has no effect // 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) set text(blue)
} }