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>>,
}
impl TraitImpls {
pub fn blanket_impls(&self) -> &[DefId] {
self.blanket_impls.as_slice()
}
}
impl<'tcx> TraitDef {
pub fn new(
def_id: DefId,

View File

@ -26,7 +26,9 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
{
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!(
"get_blanket_impls: Considering impl for trait '{:?}' {:?}",
trait_def_id, impl_def_id
@ -86,7 +88,7 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
may_apply, trait_ref, ty
);
if !may_apply {
return;
continue;
}
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)),
}),
});
});
}
}
impls
}