diff --git a/crates/typst/src/layout/length.rs b/crates/typst/src/layout/length.rs index 8c883a6a8..5e352f130 100644 --- a/crates/typst/src/layout/length.rs +++ b/crates/typst/src/layout/length.rs @@ -5,7 +5,7 @@ use std::ops::{Add, Div, Mul, Neg}; use comemo::Tracked; use ecow::{eco_format, EcoString}; -use crate::diag::{At, Hint, HintedStrResult, SourceResult}; +use crate::diag::{bail, HintedStrResult, SourceResult}; use crate::foundations::{func, scope, ty, Context, Fold, Repr, Resolve, StyleChain}; use crate::layout::{Abs, Em}; use crate::syntax::Span; @@ -81,12 +81,15 @@ impl Length { if self.em == Em::zero() { return Ok(()); } - Err(eco_format!( + + bail!( + span, "cannot convert a length with non-zero em units (`{}`) to {unit}", - self.repr() - )) - .hint(eco_format!("use `length.abs.{unit}()` instead to ignore its em component")) - .at(span) + self.repr(); + hint: "use `length.to-absolute()` to resolve its em component \ + (requires context)"; + hint: "or use `length.abs.{unit}()` instead to ignore its em component" + ) } } diff --git a/tests/suite/layout/length.typ b/tests/suite/layout/length.typ index 34a4b9397..c40752f78 100644 --- a/tests/suite/layout/length.typ +++ b/tests/suite/layout/length.typ @@ -51,20 +51,24 @@ --- length-ignore-em-pt-hint --- // Error: 2-21 cannot convert a length with non-zero em units (`-6pt + 10.5em`) to pt -// Hint: 2-21 use `length.abs.pt()` instead to ignore its em component +// Hint: 2-21 use `length.to-absolute()` to resolve its em component (requires context) +// Hint: 2-21 or use `length.abs.pt()` instead to ignore its em component #(10.5em - 6pt).pt() --- length-ignore-em-cm-hint --- // Error: 2-12 cannot convert a length with non-zero em units (`3em`) to cm -// Hint: 2-12 use `length.abs.cm()` instead to ignore its em component +// Hint: 2-12 use `length.to-absolute()` to resolve its em component (requires context) +// Hint: 2-12 or use `length.abs.cm()` instead to ignore its em component #(3em).cm() --- length-ignore-em-mm-hint --- // Error: 2-20 cannot convert a length with non-zero em units (`-226.77pt + 93em`) to mm -// Hint: 2-20 use `length.abs.mm()` instead to ignore its em component +// Hint: 2-20 use `length.to-absolute()` to resolve its em component (requires context) +// Hint: 2-20 or use `length.abs.mm()` instead to ignore its em component #(93em - 80mm).mm() --- length-ignore-em-inches-hint --- // Error: 2-24 cannot convert a length with non-zero em units (`432pt + 4.5em`) to inches -// Hint: 2-24 use `length.abs.inches()` instead to ignore its em component +// Hint: 2-24 use `length.to-absolute()` to resolve its em component (requires context) +// Hint: 2-24 or use `length.abs.inches()` instead to ignore its em component #(4.5em + 6in).inches()