From 72a180e134f2be8b0b390e87189c638f3a20810c Mon Sep 17 00:00:00 2001 From: Camelid <camelidcamel@gmail.com> Date: Mon, 22 Mar 2021 18:18:57 -0700 Subject: [PATCH 1/2] rustdoc: Record crate name instead of using `None` --- src/librustdoc/visit_ast.rs | 2 +- .../rustdoc-ui/intra-doc/private-from-crate-level.rs | 6 ++++++ .../intra-doc/private-from-crate-level.stderr | 11 +++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/test/rustdoc-ui/intra-doc/private-from-crate-level.rs create mode 100644 src/test/rustdoc-ui/intra-doc/private-from-crate-level.stderr diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index b6782fb75df35..11d1bd5f508f3 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -76,7 +76,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { &Spanned { span: rustc_span::DUMMY_SP, node: hir::VisibilityKind::Public }, hir::CRATE_HIR_ID, &krate.item.module, - None, + Some(self.cx.tcx.crate_name), ); top_level_module.is_crate = true; // Attach the crate's exported macros to the top-level module. diff --git a/src/test/rustdoc-ui/intra-doc/private-from-crate-level.rs b/src/test/rustdoc-ui/intra-doc/private-from-crate-level.rs new file mode 100644 index 0000000000000..e429e75b2148f --- /dev/null +++ b/src/test/rustdoc-ui/intra-doc/private-from-crate-level.rs @@ -0,0 +1,6 @@ +// check-pass + +//! [my_module] +//~^ WARN public documentation for `private_from_crate_level` links to private item `my_module` + +mod my_module {} diff --git a/src/test/rustdoc-ui/intra-doc/private-from-crate-level.stderr b/src/test/rustdoc-ui/intra-doc/private-from-crate-level.stderr new file mode 100644 index 0000000000000..6172cd2e316a2 --- /dev/null +++ b/src/test/rustdoc-ui/intra-doc/private-from-crate-level.stderr @@ -0,0 +1,11 @@ +warning: public documentation for `private_from_crate_level` links to private item `my_module` + --> $DIR/private-from-crate-level.rs:3:6 + | +LL | //! [my_module] + | ^^^^^^^^^ this item is private + | + = note: `#[warn(rustdoc::private_intra_doc_links)]` on by default + = note: this link will resolve properly if you pass `--document-private-items` + +warning: 1 warning emitted + From c9ae35978c8520227b360830ff6971f2887c98a2 Mon Sep 17 00:00:00 2001 From: Camelid <camelidcamel@gmail.com> Date: Mon, 22 Mar 2021 21:18:06 -0700 Subject: [PATCH 2/2] Don't push the crate name onto the `Cache.stack` Now that we record the crate's name in its `clean::Item`, pushing the crate name onto the `stack` causes duplicate paths. E.g., the URL generated for the path `::foo::bar::baz` would be something like ../foo/foo/bar/baz With this commit, the URL is corrected to ../foo/bar/baz --- src/librustdoc/formats/cache.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index 9415caf8b6f3d..f9a663b38ebdc 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -182,8 +182,6 @@ impl Cache { self.primitive_locations.insert(prim, def_id); } - self.stack.push(krate.name.to_string()); - krate = CacheBuilder { tcx, cache: self, empty_cache: Cache::default() }.fold_crate(krate); for (trait_did, dids, impl_) in self.orphan_trait_impls.drain(..) {