mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Hide cross-crate doc-hidden assoc items in trait impls
This commit is contained in:
parent
ed6c958ee4
commit
4623d51573
@ -425,13 +425,26 @@ crate fn build_impl(
|
||||
None => (
|
||||
tcx.associated_items(did)
|
||||
.in_definition_order()
|
||||
.filter_map(|item| {
|
||||
if associated_trait.is_some() || item.vis.is_public() {
|
||||
Some(item.clean(cx))
|
||||
.filter(|item| {
|
||||
// If this is a trait impl, filter out associated items whose corresponding item
|
||||
// in the associated trait is marked `doc(hidden)`.
|
||||
// If this is an inherent impl, filter out private associated items.
|
||||
if let Some(associated_trait) = associated_trait {
|
||||
let trait_item = tcx
|
||||
.associated_items(associated_trait.def_id)
|
||||
.find_by_name_and_kind(
|
||||
tcx,
|
||||
item.ident(tcx),
|
||||
item.kind,
|
||||
associated_trait.def_id,
|
||||
)
|
||||
.unwrap(); // corresponding associated item has to exist
|
||||
!tcx.is_doc_hidden(trait_item.def_id)
|
||||
} else {
|
||||
None
|
||||
item.vis.is_public()
|
||||
}
|
||||
})
|
||||
.map(|item| item.clean(cx))
|
||||
.collect::<Vec<_>>(),
|
||||
clean::enter_impl_trait(cx, |cx| {
|
||||
clean_ty_generics(cx, tcx.generics_of(did), predicates)
|
||||
|
@ -0,0 +1,19 @@
|
||||
pub trait Tr {
|
||||
type VisibleAssoc;
|
||||
#[doc(hidden)]
|
||||
type HiddenAssoc;
|
||||
|
||||
const VISIBLE_ASSOC: ();
|
||||
#[doc(hidden)]
|
||||
const HIDDEN_ASSOC: ();
|
||||
}
|
||||
|
||||
pub struct Ty;
|
||||
|
||||
impl Tr for Ty {
|
||||
type VisibleAssoc = ();
|
||||
type HiddenAssoc = ();
|
||||
|
||||
const VISIBLE_ASSOC: () = ();
|
||||
const HIDDEN_ASSOC: () = ();
|
||||
}
|
23
src/test/rustdoc/cross-crate-hidden-assoc-trait-items.rs
Normal file
23
src/test/rustdoc/cross-crate-hidden-assoc-trait-items.rs
Normal file
@ -0,0 +1,23 @@
|
||||
// Regression test for issue #95717
|
||||
// Hide cross-crate `#[doc(hidden)]` associated items in trait impls.
|
||||
|
||||
#![crate_name = "dependent"]
|
||||
// edition:2021
|
||||
// aux-crate:dependency=cross-crate-hidden-assoc-trait-items.rs
|
||||
|
||||
// The trait `Tr` contains 2 hidden and 2 visisible associated items.
|
||||
// Instead of checking for the absence of the hidden items, check for the presence of the
|
||||
// visible items instead and assert that there are *exactly two* associated items
|
||||
// (by counting the number of `section`s). This is more robust and future-proof.
|
||||
|
||||
// @has dependent/struct.Ty.html
|
||||
// @has - '//*[@id="associatedtype.VisibleAssoc"]' 'type VisibleAssoc = ()'
|
||||
// @has - '//*[@id="associatedconstant.VISIBLE_ASSOC"]' 'const VISIBLE_ASSOC: ()'
|
||||
// @count - '//*[@class="impl-items"]/section' 2
|
||||
|
||||
// @has dependent/trait.Tr.html
|
||||
// @has - '//*[@id="associatedtype.VisibleAssoc-1"]' 'type VisibleAssoc = ()'
|
||||
// @has - '//*[@id="associatedconstant.VISIBLE_ASSOC-1"]' 'const VISIBLE_ASSOC: ()'
|
||||
// @count - '//*[@class="impl-items"]/section' 2
|
||||
|
||||
pub use dependency::{Tr, Ty};
|
Loading…
Reference in New Issue
Block a user