@@ -568,7 +568,7 @@ impl<'hir> Map<'hir> {
568568 }
569569 }
570570
571- /// Walks the contents of a crate. See also `Crate::visit_all_items `.
571+ /// Walks the contents of the local crate. See also `visit_all_item_likes_in_crate `.
572572 pub fn walk_toplevel_module ( self , visitor : & mut impl Visitor < ' hir > ) {
573573 let ( top_mod, span, hir_id) = self . get_module ( CRATE_DEF_ID ) ;
574574 visitor. visit_mod ( top_mod, span, hir_id) ;
@@ -588,53 +588,61 @@ impl<'hir> Map<'hir> {
588588 }
589589 }
590590
591- /// Visits all items in the crate in some deterministic (but
592- /// unspecified) order. If you need to process every item,
593- /// and care about nesting -- usually because your algorithm
594- /// follows lexical scoping rules -- then this method is the best choice.
595- /// If you don't care about nesting, you should use the `tcx.hir_crate_items()` query
596- /// or `items()` instead.
591+ /// Visits all item-likes in the crate in some deterministic (but unspecified) order. If you
592+ /// need to process every item-like, and don't care about visiting nested items in a particular
593+ /// order then this method is the best choice. If you do care about this nesting, you should
594+ /// use the `tcx.hir().walk_toplevel_module`.
595+ ///
596+ /// Note that this function will access HIR for all the item-likes in the crate. If you only
597+ /// need to access some of them, it is usually better to manually loop on the iterators
598+ /// provided by `tcx.hir_crate_items(())`.
597599 ///
598600 /// Please see the notes in `intravisit.rs` for more information.
599- pub fn deep_visit_all_item_likes < V > ( self , visitor : & mut V )
601+ pub fn visit_all_item_likes_in_crate < V > ( self , visitor : & mut V )
600602 where
601603 V : Visitor < ' hir > ,
602604 {
603- let krate = self . krate ( ) ;
604- for owner in krate. owners . iter ( ) . filter_map ( |i| i. as_owner ( ) ) {
605- match owner. node ( ) {
606- OwnerNode :: Item ( item) => visitor. visit_item ( item) ,
607- OwnerNode :: ForeignItem ( item) => visitor. visit_foreign_item ( item) ,
608- OwnerNode :: ImplItem ( item) => visitor. visit_impl_item ( item) ,
609- OwnerNode :: TraitItem ( item) => visitor. visit_trait_item ( item) ,
610- OwnerNode :: Crate ( _) => { }
611- }
605+ let krate = self . tcx . hir_crate_items ( ( ) ) ;
606+
607+ for id in krate. items ( ) {
608+ visitor. visit_item ( self . item ( id) ) ;
609+ }
610+
611+ for id in krate. trait_items ( ) {
612+ visitor. visit_trait_item ( self . trait_item ( id) ) ;
613+ }
614+
615+ for id in krate. impl_items ( ) {
616+ visitor. visit_impl_item ( self . impl_item ( id) ) ;
617+ }
618+
619+ for id in krate. foreign_items ( ) {
620+ visitor. visit_foreign_item ( self . foreign_item ( id) ) ;
612621 }
613622 }
614623
615- /// If you don't care about nesting, you should use the
616- /// `tcx.hir_module_items()` query or `module_items()` instead.
617- /// Please see notes in `deep_visit_all_item_likes`.
618- pub fn deep_visit_item_likes_in_module < V > ( self , module : LocalDefId , visitor : & mut V )
624+ /// This method is the equivalent of `visit_all_item_likes_in_crate` but restricted to
625+ /// item-likes in a single module.
626+ pub fn visit_item_likes_in_module < V > ( self , module : LocalDefId , visitor : & mut V )
619627 where
620628 V : Visitor < ' hir > ,
621629 {
622630 let module = self . tcx . hir_module_items ( module) ;
623631
624- for id in module. items . iter ( ) {
625- visitor. visit_item ( self . item ( * id) ) ;
632+ for id in module. items ( ) {
633+ visitor. visit_item ( self . item ( id) ) ;
626634 }
627635
628- for id in module. trait_items . iter ( ) {
629- visitor. visit_trait_item ( self . trait_item ( * id) ) ;
636+ for id in module. trait_items ( ) {
637+ visitor. visit_trait_item ( self . trait_item ( id) ) ;
630638 }
631639
632- for id in module. impl_items . iter ( ) {
633- visitor. visit_impl_item ( self . impl_item ( * id) ) ;
640+ for id in module. impl_items ( ) {
641+ visitor. visit_impl_item ( self . impl_item ( id) ) ;
634642 }
635643
636- for id in module. foreign_items . iter ( ) {
637- visitor. visit_foreign_item ( self . foreign_item ( * id) ) ;
644+ for id in module. foreign_items ( ) {
645+ visitor. visit_foreign_item ( self . foreign_item ( id) ) ;
638646 }
639647 }
640648
0 commit comments