Auto merge of #83681 - jyn514:blanket-impls-tweaks, r=Aaron1011

rustdoc: Only look at blanket impls in `get_blanket_impls`

The idea here is that all the work in 16156fb278/compiler/rustc_middle/src/ty/trait_def.rs (L172-L186) doesn't matter for `get_blanket_impls` - Rustdoc will already pick up on those blocks when it documents the item.
This commit is contained in:
bors 2021-03-31 05:47:22 +00:00
commit 2a32abbcde
2 changed files with 11 additions and 3 deletions

View File

@ -69,6 +69,12 @@ pub struct TraitImpls {
non_blanket_impls: FxHashMap<fast_reject::SimplifiedType, Vec<DefId>>, non_blanket_impls: FxHashMap<fast_reject::SimplifiedType, Vec<DefId>>,
} }
impl TraitImpls {
pub fn blanket_impls(&self) -> &[DefId] {
self.blanket_impls.as_slice()
}
}
impl<'tcx> TraitDef { impl<'tcx> TraitDef {
pub fn new( pub fn new(
def_id: DefId, def_id: DefId,

View File

@ -26,7 +26,9 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
{ {
continue; continue;
} }
self.cx.tcx.for_each_relevant_impl(trait_def_id, ty, |impl_def_id| { // NOTE: doesn't use `for_each_relevant_impl` to avoid looking at anything besides blanket impls
let trait_impls = self.cx.tcx.trait_impls_of(trait_def_id);
for &impl_def_id in trait_impls.blanket_impls() {
debug!( debug!(
"get_blanket_impls: Considering impl for trait '{:?}' {:?}", "get_blanket_impls: Considering impl for trait '{:?}' {:?}",
trait_def_id, impl_def_id trait_def_id, impl_def_id
@ -86,7 +88,7 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
may_apply, trait_ref, ty may_apply, trait_ref, ty
); );
if !may_apply { if !may_apply {
return; continue;
} }
self.cx.generated_synthetics.insert((ty, trait_def_id)); self.cx.generated_synthetics.insert((ty, trait_def_id));
@ -127,7 +129,7 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
blanket_impl: Some(trait_ref.self_ty().clean(self.cx)), blanket_impl: Some(trait_ref.self_ty().clean(self.cx)),
}), }),
}); });
}); }
} }
impls impls
} }