@@ -51,7 +51,8 @@ use hir_expand::{diagnostics::DiagnosticSink, name::name, MacroDefKind};
51
51
use hir_ty:: {
52
52
autoderef,
53
53
display:: { write_bounds_like_dyn_trait_with_prefix, HirDisplayError , HirFormatter } ,
54
- method_resolution, to_assoc_type_id,
54
+ method_resolution:: { self , TyFingerprint } ,
55
+ to_assoc_type_id,
55
56
traits:: { FnTrait , Solution , SolutionVariables } ,
56
57
AliasTy , BoundVar , CallableDefId , CallableSig , Canonical , DebruijnIndex , GenericPredicate ,
57
58
InEnvironment , Interner , Obligation , ProjectionPredicate , ProjectionTy , Scalar , Substs , Ty ,
@@ -1500,13 +1501,20 @@ impl Impl {
1500
1501
def_crates. iter ( ) . for_each ( |& id| {
1501
1502
all. extend ( db. inherent_impls_in_crate ( id) . all_impls ( ) . map ( Self :: from) . filter ( filter) )
1502
1503
} ) ;
1504
+ let fp = TyFingerprint :: for_impl ( & ty. value ) ;
1503
1505
for id in def_crates
1504
1506
. iter ( )
1505
1507
. flat_map ( |& id| Crate { id } . reverse_dependencies ( db) )
1506
1508
. map ( |Crate { id } | id)
1507
1509
. chain ( def_crates. iter ( ) . copied ( ) )
1508
1510
{
1509
- all. extend ( db. trait_impls_in_crate ( id) . all_impls ( ) . map ( Self :: from) . filter ( filter) ) ;
1511
+ match fp {
1512
+ Some ( fp) => all. extend (
1513
+ db. trait_impls_in_crate ( id) . for_self_ty ( fp) . map ( Self :: from) . filter ( filter) ,
1514
+ ) ,
1515
+ None => all
1516
+ . extend ( db. trait_impls_in_crate ( id) . all_impls ( ) . map ( Self :: from) . filter ( filter) ) ,
1517
+ }
1510
1518
}
1511
1519
all
1512
1520
}
0 commit comments