From 0bc68df2a9a87ca7e36e34dab56b07c666d64760 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 19 Jun 2025 09:29:38 +0200 Subject: [PATCH] Hint for label in both document and bibliography (#6457) --- crates/typst-library/src/model/reference.rs | 13 ++++++++++--- tests/suite/model/ref.typ | 3 ++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/crates/typst-library/src/model/reference.rs b/crates/typst-library/src/model/reference.rs index 7d44cccc0..f22d70b32 100644 --- a/crates/typst-library/src/model/reference.rs +++ b/crates/typst-library/src/model/reference.rs @@ -5,7 +5,7 @@ use crate::diag::{bail, At, Hint, SourceResult}; use crate::engine::Engine; use crate::foundations::{ cast, elem, Cast, Content, Context, Func, IntoValue, Label, NativeElement, Packed, - Show, Smart, StyleChain, Synthesize, + Repr, Show, Smart, StyleChain, Synthesize, }; use crate::introspection::{Counter, CounterKey, Locatable}; use crate::math::EquationElem; @@ -229,8 +229,15 @@ impl Show for Packed { // RefForm::Normal if BibliographyElem::has(engine, self.target) { - if elem.is_ok() { - bail!(span, "label occurs in the document and its bibliography"); + if let Ok(elem) = elem { + bail!( + span, + "label `{}` occurs both in the document and its bibliography", + self.target.repr(); + hint: "change either the {}'s label or the \ + bibliography key to resolve the ambiguity", + elem.func().name(), + ); } return Ok(to_citation(self, engine, styles)?.pack().spanned(span)); diff --git a/tests/suite/model/ref.typ b/tests/suite/model/ref.typ index 2f8e2fa25..87b1c409a 100644 --- a/tests/suite/model/ref.typ +++ b/tests/suite/model/ref.typ @@ -51,7 +51,8 @@ $ A = 1 $ // Test ambiguous reference. = Introduction -// Error: 1-7 label occurs in the document and its bibliography +// Error: 1-7 label `` occurs both in the document and its bibliography +// Hint: 1-7 change either the heading's label or the bibliography key to resolve the ambiguity @arrgh #bibliography("/assets/bib/works.bib")