From e721f5e083d46853714e79c3c33eb492736cc189 Mon Sep 17 00:00:00 2001 From: QuietMisdreavus Date: Wed, 6 Mar 2019 10:16:41 -0600 Subject: [PATCH 1/2] don't process `external_traits` when collecting intra-doc links --- src/librustdoc/passes/collect_intra_doc_links.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 67f291285c447..93e811f8b31d8 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -213,6 +213,7 @@ impl<'a, 'tcx, 'rcx> LinkCollector<'a, 'tcx, 'rcx> { _ => Err(()) } } else { + debug!("attempting to resolve item without parent module: {}", path_str); Err(()) } } @@ -434,6 +435,15 @@ impl<'a, 'tcx, 'rcx> DocFolder for LinkCollector<'a, 'tcx, 'rcx> { self.fold_item_recur(item) } } + + // FIXME: if we can resolve intra-doc links from other crates, we can use the stock + // `fold_crate`, but until then we should avoid scanning `krate.external_traits` since those + // will never resolve properly + fn fold_crate(&mut self, mut c: Crate) -> Crate { + c.module = c.module.take().and_then(|module| self.fold_item(module)); + + c + } } /// Resolves a string as a macro. From 49cde404124c8217808c71972f206443f49bffc7 Mon Sep 17 00:00:00 2001 From: QuietMisdreavus Date: Wed, 6 Mar 2019 10:57:38 -0600 Subject: [PATCH 2/2] add test for spurious intra-doc link warning --- .../rustdoc/auxiliary/intra-links-external-traits.rs | 6 ++++++ src/test/rustdoc/intra-links-external-traits.rs | 12 ++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/test/rustdoc/auxiliary/intra-links-external-traits.rs create mode 100644 src/test/rustdoc/intra-links-external-traits.rs diff --git a/src/test/rustdoc/auxiliary/intra-links-external-traits.rs b/src/test/rustdoc/auxiliary/intra-links-external-traits.rs new file mode 100644 index 0000000000000..6142dcda986cf --- /dev/null +++ b/src/test/rustdoc/auxiliary/intra-links-external-traits.rs @@ -0,0 +1,6 @@ +pub trait ThisTrait { + fn asdf(&self); + + /// let's link to [`asdf`](ThisTrait::asdf) + fn qwop(&self); +} diff --git a/src/test/rustdoc/intra-links-external-traits.rs b/src/test/rustdoc/intra-links-external-traits.rs new file mode 100644 index 0000000000000..d6b4a8ad58ad7 --- /dev/null +++ b/src/test/rustdoc/intra-links-external-traits.rs @@ -0,0 +1,12 @@ +// aux-build:intra-links-external-traits.rs +// ignore-cross-compile + +#![crate_name = "outer"] +#![deny(intra_doc_link_resolution_failure)] + +// using a trait that has intra-doc links on it from another crate (whether re-exporting or just +// implementing it) used to give spurious resolution failure warnings + +extern crate intra_links_external_traits; + +pub use intra_links_external_traits::ThisTrait;