diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 0be93d9b057..b1fdb4125a3 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1553,6 +1553,9 @@ fn first_non_private( continue; } if !cx.tcx.is_doc_hidden(use_def_id) && + // We never check for "cx.render_options.document_private" + // because if a re-export is not fully public, it's never + // documented. cx.tcx.local_visibility(local_use_def_id).is_public() { break 'reexps; } diff --git a/tests/rustdoc/issue-81141-private-reexport-in-public-api-private.rs b/tests/rustdoc/issue-81141-private-reexport-in-public-api-private.rs new file mode 100644 index 00000000000..15749674a3d --- /dev/null +++ b/tests/rustdoc/issue-81141-private-reexport-in-public-api-private.rs @@ -0,0 +1,32 @@ +// compile-flags: --document-private-items + +#![crate_name = "foo"] + +use crate::bar::Bar as Alias; +pub(crate) use crate::bar::Bar as CrateAlias; + +mod bar { + pub struct Bar; + pub use self::Bar as Inner; +} + +// It's a fully private re-export so it should not be displayed. +// @has 'foo/fn.bar.html' +// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar() -> Bar' +pub fn bar() -> Alias { + Alias +} + +// It's public re-export inside a private module so it should be visible. +// @has 'foo/fn.bar2.html' +// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar2() -> Inner' +pub fn bar2() -> crate::bar::Inner { + Alias +} + +// It's a non-public, so it doesn't appear in documentation so it should not be visible. +// @has 'foo/fn.bar3.html' +// @has - '//*[@class="rust item-decl"]/code' 'pub fn bar3() -> Bar' +pub fn bar3() -> CrateAlias { + Alias +}