diff options
| author | Nixon Enraght-Moony <nixon.emoony@gmail.com> | 2023-01-06 17:57:03 +0000 |
|---|---|---|
| committer | Nixon Enraght-Moony <nixon.emoony@gmail.com> | 2023-01-06 18:44:37 +0000 |
| commit | ff46d116c1fec1a1ceb988e0e31263c00a5d521b (patch) | |
| tree | 788478755d59e280be6995e0f761020ef049fb84 | |
| parent | 7bbbaabbb6ec93800409478e2af7bc063701604b (diff) | |
| download | rust-ff46d116c1fec1a1ceb988e0e31263c00a5d521b.tar.gz rust-ff46d116c1fec1a1ceb988e0e31263c00a5d521b.zip | |
rustdoc: Strip imports of items which are `#[doc(hidden)]`
Closes #106379
| -rw-r--r-- | src/librustdoc/clean/types.rs | 11 | ||||
| -rw-r--r-- | src/librustdoc/passes/stripper.rs | 1 | ||||
| -rw-r--r-- | src/test/rustdoc-json/doc_hidden_failure.rs | 3 | ||||
| -rw-r--r-- | src/test/rustdoc-json/reexport/pub_use_doc_hidden.rs | 15 |
4 files changed, 29 insertions, 1 deletions
diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 6d55a6794f5..827afafbba3 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -2494,6 +2494,17 @@ impl Import { pub(crate) fn new_glob(source: ImportSource, should_be_displayed: bool) -> Self { Self { kind: ImportKind::Glob, source, should_be_displayed } } + + pub(crate) fn imported_item_is_doc_hidden(&self, tcx: TyCtxt<'_>) -> bool { + match self.source.did { + Some(did) => tcx + .get_attrs(did, sym::doc) + .filter_map(ast::Attribute::meta_item_list) + .flatten() + .has_word(sym::hidden), + None => false, + } + } } #[derive(Clone, Debug)] diff --git a/src/librustdoc/passes/stripper.rs b/src/librustdoc/passes/stripper.rs index bf111133b9f..f8a0d77538d 100644 --- a/src/librustdoc/passes/stripper.rs +++ b/src/librustdoc/passes/stripper.rs @@ -248,6 +248,7 @@ pub(crate) struct ImportStripper<'tcx> { impl<'tcx> DocFolder for ImportStripper<'tcx> { fn fold_item(&mut self, i: Item) -> Option<Item> { match *i.kind { + clean::ImportItem(imp) if imp.imported_item_is_doc_hidden(self.tcx) => None, clean::ExternCrateItem { .. } | clean::ImportItem(..) if i.visibility(self.tcx) != Some(Visibility::Public) => { diff --git a/src/test/rustdoc-json/doc_hidden_failure.rs b/src/test/rustdoc-json/doc_hidden_failure.rs index 6573166c47f..0d2c6b2209b 100644 --- a/src/test/rustdoc-json/doc_hidden_failure.rs +++ b/src/test/rustdoc-json/doc_hidden_failure.rs @@ -14,7 +14,8 @@ mod auto { } } -// @count "$.index[*][?(@.name=='builders')]" 2 +// @count "$.index[*][?(@.name=='builders')]" 1 +// @has "$.index[*][?(@.name == 'ActionRowBuilder')"] pub use auto::*; pub mod builders { diff --git a/src/test/rustdoc-json/reexport/pub_use_doc_hidden.rs b/src/test/rustdoc-json/reexport/pub_use_doc_hidden.rs new file mode 100644 index 00000000000..a2a25d08448 --- /dev/null +++ b/src/test/rustdoc-json/reexport/pub_use_doc_hidden.rs @@ -0,0 +1,15 @@ +// Regression test for <https://github.com/rust-lang/rust/issues/106379> + +#![feature(no_core)] +#![no_core] + +mod repeat_n { + #[doc(hidden)] + pub struct RepeatN {} +} + +pub use repeat_n::RepeatN; + +// @count "$.index[*][?(@.name=='pub_use_doc_hidden')].inner.items[*]" 0 +// @!has "$.index[*][?(@.kind=='struct')]" +// @!has "$.index[*][?(@.kind=='import')]" |
