Merge 01f73c35ed279d26678fe9c991ef55a0e44a1b76 into b036fd97ab2c1cdc003b50eea7850279a1a7601f

This commit is contained in:
T0mstone 2025-07-22 01:35:16 +02:00 committed by GitHub
commit 483b9c564c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 36 additions and 1 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,8 +285,19 @@ impl Eval for ast::CodeBlock<'_> {
type Output = Value;
fn eval(self, vm: &mut Vm) -> SourceResult<Self::Output> {
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")
}
_ => {}
}
vm.scopes.enter();
let output = self.body().eval(vm)?;
let output = body.eval(vm)?;
vm.scopes.exit();
Ok(output)
}
@ -389,3 +401,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

@ -48,4 +48,5 @@
let n = query(<a>).len()
let fonts = ("nope", "Roboto")
set text(font: fonts.at(n))
[]
}

View File

@ -51,4 +51,5 @@ Hello
#context {
set document(author: "Changed") if "Normal" in document.author
set document(title: "Changed") if document.title == "Normal"
[]
}

View File

@ -0,0 +1,12 @@
--- warn-show-set-last-in-block ---
#{
// Warning: 3-16 show rule has no effect
// Hint: 3-16 a show rule is only in effect until the end of the surrounding code block
show "a": "b"
}
#{
// Warning: 3-17 set rule has no effect
// Hint: 3-17 a set rule is only in effect until the end of the surrounding code block
set text(blue)
}