@@ -88,18 +88,29 @@ crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
88
88
89
89
let mut cleaner = BadImplStripper { prims, items : crate_items } ;
90
90
91
+ let sized_trait = cx. tcx . lang_items ( ) . sized_trait ( ) ;
92
+ let deref_trait = cx. tcx . lang_items ( ) . deref_trait ( ) ;
93
+
91
94
let mut type_did_to_deref_target: FxHashMap < DefId , & Type > = FxHashMap :: default ( ) ;
92
95
// Gather all type to `Deref` target edges.
93
96
for it in & new_items {
94
97
if let ImplItem ( Impl { ref for_, ref trait_, ref items, .. } ) = * it. kind {
95
- if trait_. def_id ( ) == cx. tcx . lang_items ( ) . deref_trait ( ) {
96
- let target = items. iter ( ) . find_map ( |item| match * item. kind {
97
- TypedefItem ( ref t, true ) => Some ( & t. type_ ) ,
98
- _ => None ,
99
- } ) ;
100
- if let ( Some ( for_did) , Some ( target) ) = ( for_. def_id ( ) , target) {
101
- type_did_to_deref_target. insert ( for_did, target) ;
98
+ match trait_. def_id ( ) {
99
+ did if sized_trait == did => { }
100
+ Some ( did) => {
101
+ if Some ( did) == deref_trait {
102
+ let target = items. iter ( ) . find_map ( |item| match * item. kind {
103
+ TypedefItem ( ref t, true ) => Some ( & t. type_ ) ,
104
+ _ => None ,
105
+ } ) ;
106
+ if let ( Some ( for_did) , Some ( target) ) = ( for_. def_id ( ) , target) {
107
+ type_did_to_deref_target. insert ( for_did, target) ;
108
+ }
109
+ } else {
110
+ cleaner. items . insert ( did) ;
111
+ }
102
112
}
113
+ _ => { }
103
114
}
104
115
}
105
116
}
0 commit comments