@@ -88,18 +88,29 @@ crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
8888
8989 let mut cleaner = BadImplStripper { prims, items : crate_items } ;
9090
91+ let sized_trait = cx. tcx . lang_items ( ) . sized_trait ( ) ;
92+ let deref_trait = cx. tcx . lang_items ( ) . deref_trait ( ) ;
93+
9194 let mut type_did_to_deref_target: FxHashMap < DefId , & Type > = FxHashMap :: default ( ) ;
9295 // Gather all type to `Deref` target edges.
9396 for it in & new_items {
9497 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+ }
102112 }
113+ _ => { }
103114 }
104115 }
105116 }
0 commit comments