Skip to content

Commit 6d31416

Browse files
committedJan 18, 2024
Auto merge of #16385 - Urhengulas:fix-tra-doc-links, r=Veykril
Fix intra doc links Fixes #15848
2 parents a5b89ff + c817286 commit 6d31416

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed
 

‎crates/ide/src/doc_links.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,12 @@ pub(crate) fn rewrite_links(db: &RootDatabase, markdown: &str, definition: Defin
6464
// * path-based links: `../../module/struct.MyStruct.html`
6565
// * module-based links (AKA intra-doc links): `super::super::module::MyStruct`
6666
if let Some((target, title)) = rewrite_intra_doc_link(db, definition, target, title) {
67-
return (None, target, title);
68-
}
69-
if let Some(target) = rewrite_url_link(db, definition, target) {
70-
return (Some(LinkType::Inline), target, title.to_string());
67+
(None, target, title)
68+
} else if let Some(target) = rewrite_url_link(db, definition, target) {
69+
(Some(LinkType::Inline), target, title.to_string())
70+
} else {
71+
(None, target.to_string(), title.to_string())
7172
}
72-
73-
(None, target.to_string(), title.to_string())
7473
}
7574
});
7675
let mut out = String::new();
@@ -369,16 +368,21 @@ fn rewrite_intra_doc_link(
369368
) -> Option<(String, String)> {
370369
let (link, ns) = parse_intra_doc_link(target);
371370

371+
let (link, anchor) = match link.split_once('#') {
372+
Some((new_link, anchor)) => (new_link, Some(anchor)),
373+
None => (link, None),
374+
};
375+
372376
let resolved = resolve_doc_path_for_def(db, def, link, ns)?;
373377
let mut url = get_doc_base_urls(db, resolved, None, None).0?;
374378

375-
let (_, file, frag) = filename_and_frag_for_def(db, resolved)?;
379+
let (_, file, _) = filename_and_frag_for_def(db, resolved)?;
376380
if let Some(path) = mod_path_of_def(db, resolved) {
377381
url = url.join(&path).ok()?;
378382
}
379383

380384
url = url.join(&file).ok()?;
381-
url.set_fragment(frag.as_deref());
385+
url.set_fragment(anchor);
382386

383387
Some((url.into(), strip_prefixes_suffixes(title).to_string()))
384388
}

‎crates/ide/src/doc_links/tests.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,3 +664,29 @@ pub struct $0Foo;
664664
expect![["[`foo`]"]],
665665
);
666666
}
667+
668+
#[test]
669+
fn rewrite_intra_doc_link() {
670+
check_rewrite(
671+
r#"
672+
//- minicore: eq, derive
673+
//- /main.rs crate:foo
674+
//! $0[PartialEq]
675+
fn main() {}
676+
"#,
677+
expect!["[PartialEq](https://doc.rust-lang.org/stable/core/cmp/trait.PartialEq.html)"],
678+
);
679+
}
680+
681+
#[test]
682+
fn rewrite_intra_doc_link_with_anchor() {
683+
check_rewrite(
684+
r#"
685+
//- minicore: eq, derive
686+
//- /main.rs crate:foo
687+
//! $0[PartialEq#derivable]
688+
fn main() {}
689+
"#,
690+
expect!["[PartialEq#derivable](https://doc.rust-lang.org/stable/core/cmp/trait.PartialEq.html#derivable)"],
691+
);
692+
}

0 commit comments

Comments
 (0)
Please sign in to comment.