11use super :: Pass ;
2- use crate :: clean:: * ;
32use crate :: core:: DocContext ;
4- use crate :: fold :: DocFolder ;
3+ use crate :: { clean :: * , visit :: DocVisitor } ;
54
65use rustc_data_structures:: fx:: { FxHashMap , FxHashSet } ;
76use rustc_hir:: def_id:: DefId ;
@@ -14,17 +13,18 @@ crate const COLLECT_TRAIT_IMPLS: Pass = Pass {
1413 description : "retrieves trait impls for items in the crate" ,
1514} ;
1615
17- crate fn collect_trait_impls ( krate : Crate , cx : & mut DocContext < ' _ > ) -> Crate {
18- let ( mut krate , synth_impls) = cx. sess ( ) . time ( "collect_synthetic_impls" , || {
16+ crate fn collect_trait_impls ( mut krate : Crate , cx : & mut DocContext < ' _ > ) -> Crate {
17+ let synth_impls = cx. sess ( ) . time ( "collect_synthetic_impls" , || {
1918 let mut synth = SyntheticImplCollector { cx, impls : Vec :: new ( ) } ;
20- ( synth. fold_crate ( krate) , synth. impls )
19+ synth. visit_crate ( & krate) ;
20+ synth. impls
2121 } ) ;
2222
2323 let prims: FxHashSet < PrimitiveType > = krate. primitives . iter ( ) . map ( |p| p. 1 ) . collect ( ) ;
2424
2525 let crate_items = {
2626 let mut coll = ItemCollector :: new ( ) ;
27- krate = cx. sess ( ) . time ( "collect_items_for_trait_impls" , || coll. fold_crate ( krate) ) ;
27+ cx. sess ( ) . time ( "collect_items_for_trait_impls" , || coll. visit_crate ( & krate) ) ;
2828 coll. items
2929 } ;
3030
@@ -152,14 +152,13 @@ crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
152152 }
153153 }
154154
155- let items = if let ModuleItem ( Module { ref mut items, .. } ) = * krate. module . kind {
156- items
155+ if let ModuleItem ( Module { items, .. } ) = & mut * krate. module . kind {
156+ items. extend ( synth_impls) ;
157+ items. extend ( new_items) ;
157158 } else {
158159 panic ! ( "collect-trait-impls can't run" ) ;
159160 } ;
160161
161- items. extend ( synth_impls) ;
162- items. extend ( new_items) ;
163162 krate
164163}
165164
@@ -168,8 +167,8 @@ struct SyntheticImplCollector<'a, 'tcx> {
168167 impls : Vec < Item > ,
169168}
170169
171- impl < ' a , ' tcx > DocFolder for SyntheticImplCollector < ' a , ' tcx > {
172- fn fold_item ( & mut self , i : Item ) -> Option < Item > {
170+ impl < ' a , ' tcx > DocVisitor for SyntheticImplCollector < ' a , ' tcx > {
171+ fn visit_item ( & mut self , i : & Item ) {
173172 if i. is_struct ( ) || i. is_enum ( ) || i. is_union ( ) {
174173 // FIXME(eddyb) is this `doc(hidden)` check needed?
175174 if !self
@@ -184,7 +183,7 @@ impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> {
184183 }
185184 }
186185
187- Some ( self . fold_item_recur ( i ) )
186+ self . visit_item_recur ( i )
188187 }
189188}
190189
@@ -199,11 +198,11 @@ impl ItemCollector {
199198 }
200199}
201200
202- impl DocFolder for ItemCollector {
203- fn fold_item ( & mut self , i : Item ) -> Option < Item > {
201+ impl DocVisitor for ItemCollector {
202+ fn visit_item ( & mut self , i : & Item ) {
204203 self . items . insert ( i. def_id ) ;
205204
206- Some ( self . fold_item_recur ( i ) )
205+ self . visit_item_recur ( i )
207206 }
208207}
209208
0 commit comments