rustdoc: Don't show hidden trait methods
By skipping trait items whose attributes include `hidden`, we void showing such trait methods.
This commit is contained in:
parent
67365d64bc
commit
3239f06585
@ -389,13 +389,45 @@ fn merge_attrs(
|
||||
}
|
||||
}
|
||||
|
||||
let document_hidden = cx.render_options.document_hidden;
|
||||
let predicates = tcx.explicit_predicates_of(did);
|
||||
let (trait_items, generics) = match impl_item {
|
||||
Some(impl_) => (
|
||||
impl_
|
||||
.items
|
||||
.iter()
|
||||
.map(|item| tcx.hir().impl_item(item.id).clean(cx))
|
||||
.map(|item| tcx.hir().impl_item(item.id))
|
||||
.filter(|item| {
|
||||
// Filter out impl items whose corresponding trait item has `doc(hidden)`
|
||||
// not to document such impl items.
|
||||
// For inherent impls, we don't do any filtering.
|
||||
|
||||
// When `--document-hidden-items` is passed, we don't
|
||||
// do any filtering, too.
|
||||
if document_hidden {
|
||||
return true;
|
||||
}
|
||||
if let Some(associated_trait) = associated_trait {
|
||||
let assoc_kind = match item.kind {
|
||||
hir::ImplItemKind::Const(..) => ty::AssocKind::Const,
|
||||
hir::ImplItemKind::Fn(..) => ty::AssocKind::Fn,
|
||||
hir::ImplItemKind::TyAlias(..) => ty::AssocKind::Type,
|
||||
};
|
||||
let trait_item = tcx
|
||||
.associated_items(associated_trait.def_id)
|
||||
.find_by_name_and_kind(
|
||||
tcx,
|
||||
item.ident,
|
||||
assoc_kind,
|
||||
associated_trait.def_id,
|
||||
)
|
||||
.unwrap(); // SAFETY: For all impl items there exists trait item that has the same name.
|
||||
!tcx.get_attrs(trait_item.def_id).lists(sym::doc).has_word(sym::hidden)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
})
|
||||
.map(|item| item.clean(cx))
|
||||
.collect::<Vec<_>>(),
|
||||
impl_.generics.clean(cx),
|
||||
),
|
||||
|
@ -0,0 +1,31 @@
|
||||
// compile-flags: -Z unstable-options --document-hidden-items
|
||||
|
||||
// test for trait methods with `doc(hidden)` with `--document-hidden-items` passed.
|
||||
#![crate_name = "foo"]
|
||||
|
||||
// @has foo/trait.Trait.html
|
||||
// @has - '//*[@id="associatedtype.Foo"]' 'type Foo'
|
||||
// @has - '//*[@id="associatedtype.Bar"]' 'type Bar'
|
||||
// @has - '//*[@id="tymethod.f"]' 'fn f()'
|
||||
// @has - '//*[@id="tymethod.g"]' 'fn g()'
|
||||
pub trait Trait {
|
||||
#[doc(hidden)]
|
||||
type Foo;
|
||||
type Bar;
|
||||
#[doc(hidden)]
|
||||
fn f();
|
||||
fn g();
|
||||
}
|
||||
|
||||
// @has foo/struct.S.html
|
||||
// @has - '//*[@id="associatedtype.Foo"]' 'type Foo'
|
||||
// @has - '//*[@id="associatedtype.Bar"]' 'type Bar'
|
||||
// @has - '//*[@id="method.f"]' 'fn f()'
|
||||
// @has - '//*[@id="method.g"]' 'fn g()'
|
||||
pub struct S;
|
||||
impl Trait for S {
|
||||
type Foo = ();
|
||||
type Bar = ();
|
||||
fn f() {}
|
||||
fn g() {}
|
||||
}
|
29
src/test/rustdoc/hidden-trait-methods.rs
Normal file
29
src/test/rustdoc/hidden-trait-methods.rs
Normal file
@ -0,0 +1,29 @@
|
||||
// test for trait methods with `doc(hidden)`.
|
||||
#![crate_name = "foo"]
|
||||
|
||||
// @has foo/trait.Trait.html
|
||||
// @!has - '//*[@id="associatedtype.Foo"]' 'type Foo'
|
||||
// @has - '//*[@id="associatedtype.Bar"]' 'type Bar'
|
||||
// @!has - '//*[@id="tymethod.f"]' 'fn f()'
|
||||
// @has - '//*[@id="tymethod.g"]' 'fn g()'
|
||||
pub trait Trait {
|
||||
#[doc(hidden)]
|
||||
type Foo;
|
||||
type Bar;
|
||||
#[doc(hidden)]
|
||||
fn f();
|
||||
fn g();
|
||||
}
|
||||
|
||||
// @has foo/struct.S.html
|
||||
// @!has - '//*[@id="associatedtype.Foo"]' 'type Foo'
|
||||
// @has - '//*[@id="associatedtype.Bar"]' 'type Bar'
|
||||
// @!has - '//*[@id="method.f"]' 'fn f()'
|
||||
// @has - '//*[@id="method.g"]' 'fn g()'
|
||||
pub struct S;
|
||||
impl Trait for S {
|
||||
type Foo = ();
|
||||
type Bar = ();
|
||||
fn f() {}
|
||||
fn g() {}
|
||||
}
|
Loading…
Reference in New Issue
Block a user