1
1
use super :: Pass ;
2
- use crate :: clean:: * ;
3
2
use crate :: core:: DocContext ;
4
- use crate :: fold :: DocFolder ;
3
+ use crate :: { clean :: * , visit :: DocVisitor } ;
5
4
6
5
use rustc_data_structures:: fx:: { FxHashMap , FxHashSet } ;
7
6
use rustc_hir:: def_id:: DefId ;
@@ -14,17 +13,18 @@ crate const COLLECT_TRAIT_IMPLS: Pass = Pass {
14
13
description : "retrieves trait impls for items in the crate" ,
15
14
} ;
16
15
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" , || {
19
18
let mut synth = SyntheticImplCollector { cx, impls : Vec :: new ( ) } ;
20
- ( synth. fold_crate ( krate) , synth. impls )
19
+ synth. visit_crate ( & krate) ;
20
+ synth. impls
21
21
} ) ;
22
22
23
23
let prims: FxHashSet < PrimitiveType > = krate. primitives . iter ( ) . map ( |p| p. 1 ) . collect ( ) ;
24
24
25
25
let crate_items = {
26
26
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) ) ;
28
28
coll. items
29
29
} ;
30
30
@@ -152,14 +152,13 @@ crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
152
152
}
153
153
}
154
154
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) ;
157
158
} else {
158
159
panic ! ( "collect-trait-impls can't run" ) ;
159
160
} ;
160
161
161
- items. extend ( synth_impls) ;
162
- items. extend ( new_items) ;
163
162
krate
164
163
}
165
164
@@ -168,8 +167,8 @@ struct SyntheticImplCollector<'a, 'tcx> {
168
167
impls : Vec < Item > ,
169
168
}
170
169
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 ) {
173
172
if i. is_struct ( ) || i. is_enum ( ) || i. is_union ( ) {
174
173
// FIXME(eddyb) is this `doc(hidden)` check needed?
175
174
if !self
@@ -184,7 +183,7 @@ impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> {
184
183
}
185
184
}
186
185
187
- Some ( self . fold_item_recur ( i ) )
186
+ self . visit_item_recur ( i )
188
187
}
189
188
}
190
189
@@ -199,11 +198,11 @@ impl ItemCollector {
199
198
}
200
199
}
201
200
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 ) {
204
203
self . items . insert ( i. def_id ) ;
205
204
206
- Some ( self . fold_item_recur ( i ) )
205
+ self . visit_item_recur ( i )
207
206
}
208
207
}
209
208
0 commit comments