summaryrefslogtreecommitdiff
path: root/library/src/meta/link.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-06-12 15:40:43 +0200
committerLaurenz <laurmaedje@gmail.com>2023-06-12 15:42:01 +0200
commit378ebe5f5601f11c3f428c17bed492012feb251e (patch)
tree4530bf009844faca40ca4fd6d0b9251fd51ef587 /library/src/meta/link.rs
parent19bf1f58944a42f17903869c162a33aba22b80b0 (diff)
Delayed errors
Fixes #785. Thanks to @Dherse for the idea!
Diffstat (limited to 'library/src/meta/link.rs')
-rw-r--r--library/src/meta/link.rs23
1 files changed, 10 insertions, 13 deletions
diff --git a/library/src/meta/link.rs b/library/src/meta/link.rs
index 43f6a34d..c3d8718c 100644
--- a/library/src/meta/link.rs
+++ b/library/src/meta/link.rs
@@ -91,21 +91,18 @@ impl Show for LinkElem {
#[tracing::instrument(name = "LinkElem::show", skip(self, vt))]
fn show(&self, vt: &mut Vt, _: StyleChain) -> SourceResult<Content> {
let body = self.body();
- let dest = match self.dest() {
- LinkTarget::Dest(dest) => dest,
- LinkTarget::Label(label) => {
- if !vt.introspector.init() {
- return Ok(body);
- }
-
- let elem = vt.introspector.query_label(&label).at(self.span())?;
- Destination::Location(elem.location().unwrap())
- }
+ let linked = match self.dest() {
+ LinkTarget::Dest(dest) => body.linked(dest),
+ LinkTarget::Label(label) => vt
+ .delayed(|vt| {
+ let elem = vt.introspector.query_label(&label).at(self.span())?;
+ let dest = Destination::Location(elem.location().unwrap());
+ Ok(Some(body.clone().linked(dest)))
+ })
+ .unwrap_or(body),
};
- Ok(body
- .linked(dest)
- .styled(TextElem::set_hyphenate(Hyphenate(Smart::Custom(false)))))
+ Ok(linked.styled(TextElem::set_hyphenate(Hyphenate(Smart::Custom(false)))))
}
}