Compare commits

...

11 Commits

Author SHA1 Message Date
T0mstone
af9ce9c1be
Merge 01f73c35ed279d26678fe9c991ef55a0e44a1b76 into f51cb4b03e9712b8eb404f8184a17ee4a63aaab2 2025-07-14 21:02:03 +03:00
Robin
f51cb4b03e
Rephrase docs for truncation of float/decimal to integer (#6543) 2025-07-14 13:31:27 +00:00
Robin
0c12828c9a
Fix minor typo in text docs (#6589) 2025-07-14 13:26:25 +00:00
Robin
b1a091a236
Use "whitespace" instead of "space" to denote block-level equation in docs (#6591) 2025-07-14 13:26:10 +00:00
T0mstone
01f73c35ed Fix test spans for real
Haste is the enemy of correctness
2025-06-11 16:42:00 +02:00
T0mstone
fb0b01d45c Fix test spans 2025-06-11 16:37:03 +02:00
T0mstone
801b689dae Apply suggestions
Co-authored-by: Laurenz <laurmaedje@gmail.com>
2025-06-11 16:33:26 +02:00
T0mstone
d799a4207b Change test fix to empty content 2025-06-11 14:36:09 +02:00
T0mstone
72c219d24a Suppress warning in tests 2025-06-11 14:26:23 +02:00
T0mstone
ea3ca30a65 Merge branch 'main' into warn-last-show 2025-06-11 14:16:42 +02:00
T0mstone
a517a08d2f Warn on last show/set rule in block 2025-03-22 22:31:51 +01:00
7 changed files with 43 additions and 8 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)
}
@ -393,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

@ -46,7 +46,7 @@ impl i64 {
/// or smaller than the minimum 64-bit signed integer.
///
/// - Booleans are converted to `0` or `1`.
/// - Floats and decimals are truncated to the next 64-bit integer.
/// - Floats and decimals are rounded to the next 64-bit integer towards zero.
/// - Strings are parsed in base 10.
///
/// ```example

View File

@ -20,8 +20,8 @@ use crate::text::{FontFamily, FontList, FontWeight, LocalName, TextElem};
/// A mathematical equation.
///
/// Can be displayed inline with text or as a separate block. An equation
/// becomes block-level through the presence of at least one space after the
/// opening dollar sign and one space before the closing dollar sign.
/// becomes block-level through the presence of whitespace after the opening
/// dollar sign and whitespace before the closing dollar sign.
///
/// # Example
/// ```example
@ -41,9 +41,9 @@ use crate::text::{FontFamily, FontList, FontWeight, LocalName, TextElem};
///
/// # Syntax
/// This function also has dedicated syntax: Write mathematical markup within
/// dollar signs to create an equation. Starting and ending the equation with at
/// least one space lifts it into a separate block that is centered
/// horizontally. For more details about math syntax, see the
/// dollar signs to create an equation. Starting and ending the equation with
/// whitespace lifts it into a separate block that is centered horizontally.
/// For more details about math syntax, see the
/// [main math page]($category/math).
#[elem(Locatable, Synthesize, ShowSet, Count, LocalName, Refable, Outlinable)]
pub struct EquationElem {

View File

@ -92,7 +92,7 @@ pub(super) fn define(global: &mut Scope) {
/// ```
#[elem(Debug, Construct, PlainText, Repr)]
pub struct TextElem {
/// A font family descriptor or priority list of font family descriptor.
/// A font family descriptor or priority list of font family descriptors.
///
/// A font family descriptor can be a plain string representing the family
/// name or a dictionary with the following keys:

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)
}