1
Fork 0

Do not list impl when trait has doc(hidden)

This commit is contained in:
Deadbeef 2021-06-22 04:15:13 +08:00
parent 3824017f8e
commit bd7caf477c
No known key found for this signature in database
GPG key ID: 6525773485376D92
3 changed files with 43 additions and 1 deletions

View file

@ -1,5 +1,6 @@
//! Support for inlining external documentation into the current AST.
use std::collections::VecDeque;
use std::iter::once;
use std::sync::Arc;
@ -15,7 +16,9 @@ use rustc_span::hygiene::MacroKind;
use rustc_span::symbol::{kw, sym, Symbol};
use rustc_span::Span;
use crate::clean::{self, Attributes, AttributesExt, FakeDefId, GetDefId, ToSource};
use crate::clean::{
self, Attributes, AttributesExt, FakeDefId, GetDefId, NestedAttributesExt, ToSource, Type,
};
use crate::core::DocContext;
use crate::formats::item_type::ItemType;
@ -420,6 +423,20 @@ crate fn build_impl(
if trait_.def_id() == tcx.lang_items().deref_trait() {
super::build_deref_target_impls(cx, &trait_items, ret);
}
// Return if the trait itself or any types of the generic parameters are doc(hidden).
let mut deque: VecDeque<&Type> = trait_.iter().collect();
while let Some(ty) = deque.pop_back() {
if let Some(did) = ty.def_id() {
if cx.tcx.get_attrs(did).lists(sym::doc).has_word(sym::hidden) {
return;
}
}
if let Some(generics) = ty.generics() {
deque.extend(generics);
}
}
if let Some(trait_did) = trait_.def_id() {
record_extern_trait(cx, trait_did);
}