diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-11-14 19:26:19 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-14 19:26:19 +0100 |
| commit | dc869fcfb22bfabae187578dcd10ba68348fdc93 (patch) | |
| tree | 7be9784abf0aadd285b357d7d33189e473600486 /src | |
| parent | 050ece6765bbbe068d5e456ad6e55c0806e63720 (diff) | |
| parent | 8e81cc262e08e4c93df3ac9c1a3814372e4908c8 (diff) | |
| download | rust-dc869fcfb22bfabae187578dcd10ba68348fdc93.tar.gz rust-dc869fcfb22bfabae187578dcd10ba68348fdc93.zip | |
Rollup merge of #104364 - petrochenkov:docice2, r=GuillaumeGomez
rustdoc: Resolve doc links in external traits having local impls For external impls it was done in https://github.com/rust-lang/rust/pull/103192 right away, but the local impl case was forgotten. Fixes https://github.com/rust-lang/rust/issues/104145.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/passes/collect_intra_doc_links/early.rs | 9 | ||||
| -rw-r--r-- | src/test/rustdoc/intra-doc/issue-104145.rs | 14 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/librustdoc/passes/collect_intra_doc_links/early.rs b/src/librustdoc/passes/collect_intra_doc_links/early.rs index d121a3e2aa4..1b373cfe5bb 100644 --- a/src/librustdoc/passes/collect_intra_doc_links/early.rs +++ b/src/librustdoc/passes/collect_intra_doc_links/early.rs @@ -354,7 +354,14 @@ impl Visitor<'_> for EarlyDocLinkResolver<'_, '_> { self.parent_scope.module = old_module; } else { match &item.kind { - ItemKind::Impl(box ast::Impl { of_trait: Some(..), .. }) => { + ItemKind::Impl(box ast::Impl { of_trait: Some(trait_ref), .. }) => { + if let Some(partial_res) = self.resolver.get_partial_res(trait_ref.ref_id) + && let Some(res) = partial_res.full_res() + && let Some(trait_def_id) = res.opt_def_id() + && !trait_def_id.is_local() + && self.visited_mods.insert(trait_def_id) { + self.resolve_doc_links_extern_impl(trait_def_id, false); + } self.all_trait_impls.push(self.resolver.local_def_id(item.id).to_def_id()); } ItemKind::MacroDef(macro_def) if macro_def.macro_rules => { diff --git a/src/test/rustdoc/intra-doc/issue-104145.rs b/src/test/rustdoc/intra-doc/issue-104145.rs new file mode 100644 index 00000000000..9ce36740d60 --- /dev/null +++ b/src/test/rustdoc/intra-doc/issue-104145.rs @@ -0,0 +1,14 @@ +// Doc links in `Trait`'s methods are resolved because it has a local impl. + +// aux-build:issue-103463-aux.rs + +extern crate issue_103463_aux; +use issue_103463_aux::Trait; + +pub struct LocalType; + +impl Trait for LocalType { + fn method() {} +} + +fn main() {} |
