summaryrefslogtreecommitdiff
path: root/crates/typst-docs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-11-27 16:04:47 +0100
committerLaurenz <laurmaedje@gmail.com>2023-11-27 16:04:47 +0100
commitbf8a3ecec5ac0f48d5bbf59930b4ea07c03c3c96 (patch)
tree8fb94d07612b585e64d004e5d901c0019c4c1f27 /crates/typst-docs
parent76c5ca051e9c784e919e0b85155d147388e8e3d7 (diff)
Update changelog
Diffstat (limited to 'crates/typst-docs')
-rw-r--r--crates/typst-docs/src/link.rs19
1 files changed, 9 insertions, 10 deletions
diff --git a/crates/typst-docs/src/link.rs b/crates/typst-docs/src/link.rs
index e2721b95..e7e191fe 100644
--- a/crates/typst-docs/src/link.rs
+++ b/crates/typst-docs/src/link.rs
@@ -55,20 +55,19 @@ fn resolve_known(head: &str) -> Option<&'static str> {
fn resolve_definition(head: &str) -> StrResult<String> {
let mut parts = head.trim_start_matches('$').split('.').peekable();
let mut focus = &LIBRARY.global;
+ let mut category = None;
- let Some(name) = parts.peek() else {
- bail!("missing first link component");
- };
-
- let Some(category) = focus.scope().get_category(name) else {
- bail!("{name} has no category");
- };
-
- while let Some(m) = parts.peek().and_then(|&name| get_module(focus, name).ok()) {
- focus = m;
+ while let Some(name) = parts.peek() {
+ if category.is_none() {
+ category = focus.scope().get_category(name);
+ }
+ let Ok(module) = get_module(focus, name) else { break };
+ focus = module;
parts.next();
}
+ let Some(category) = category else { bail!("{head} has no category") };
+
let name = parts.next().ok_or("link is missing first part")?;
let value = focus.field(name)?;