about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume.gomez@huawei.com>2023-07-10 14:10:26 +0200
committerGuillaume Gomez <guillaume.gomez@huawei.com>2023-07-24 17:07:57 +0200
commit298cd366d510bbcdf3fd061debd6bb011e681ad1 (patch)
tree2d366f09115be243c7362119166a378baddb6674
parent9fb65489057ca6f4e240c6f0c373127d06da316d (diff)
downloadrust-298cd366d510bbcdf3fd061debd6bb011e681ad1.tar.gz
rust-298cd366d510bbcdf3fd061debd6bb011e681ad1.zip
Add test for private items
-rw-r--r--src/librustdoc/clean/mod.rs3
-rw-r--r--tests/rustdoc/issue-81141-private-reexport-in-public-api-private.rs32
2 files changed, 35 insertions, 0 deletions
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
+}