@@ -14,7 +14,6 @@ use rustc_hir::def_id::{
14
14
} ;
15
15
use rustc_hir:: definitions:: DefPathData ;
16
16
use rustc_hir:: intravisit:: { self , Visitor } ;
17
- use rustc_hir:: itemlikevisit:: ItemLikeVisitor ;
18
17
use rustc_hir:: lang_items;
19
18
use rustc_hir:: { AnonConst , GenericParamKind } ;
20
19
use rustc_index:: bit_set:: GrowableBitSet ;
@@ -2243,26 +2242,16 @@ pub fn provide(providers: &mut Providers) {
2243
2242
traits_in_crate : |tcx, cnum| {
2244
2243
assert_eq ! ( cnum, LOCAL_CRATE ) ;
2245
2244
2246
- #[ derive( Default ) ]
2247
- struct TraitsVisitor {
2248
- traits : Vec < DefId > ,
2249
- }
2250
- impl ItemLikeVisitor < ' _ > for TraitsVisitor {
2251
- fn visit_item ( & mut self , item : & hir:: Item < ' _ > ) {
2252
- if let hir:: ItemKind :: Trait ( ..) | hir:: ItemKind :: TraitAlias ( ..) = item. kind {
2253
- self . traits . push ( item. def_id . to_def_id ( ) ) ;
2254
- }
2245
+ let mut traits = Vec :: new ( ) ;
2246
+ for id in tcx. hir ( ) . items ( ) {
2247
+ if matches ! ( tcx. def_kind( id. def_id) , DefKind :: Trait | DefKind :: TraitAlias ) {
2248
+ traits. push ( id. def_id . to_def_id ( ) )
2255
2249
}
2256
- fn visit_trait_item ( & mut self , _trait_item : & hir:: TraitItem < ' _ > ) { }
2257
- fn visit_impl_item ( & mut self , _impl_item : & hir:: ImplItem < ' _ > ) { }
2258
- fn visit_foreign_item ( & mut self , _foreign_item : & hir:: ForeignItem < ' _ > ) { }
2259
2250
}
2260
2251
2261
- let mut visitor = TraitsVisitor :: default ( ) ;
2262
- tcx. hir ( ) . visit_all_item_likes ( & mut visitor) ;
2263
2252
// Bring everything into deterministic order.
2264
- visitor . traits . sort_by_cached_key ( |& def_id| tcx. def_path_hash ( def_id) ) ;
2265
- tcx. arena . alloc_slice ( & visitor . traits )
2253
+ traits. sort_by_cached_key ( |& def_id| tcx. def_path_hash ( def_id) ) ;
2254
+ tcx. arena . alloc_slice ( & traits)
2266
2255
} ,
2267
2256
2268
2257
..* providers
0 commit comments