@@ -568,7 +568,7 @@ impl<'hir> Map<'hir> {
568
568
}
569
569
}
570
570
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 `.
572
572
pub fn walk_toplevel_module ( self , visitor : & mut impl Visitor < ' hir > ) {
573
573
let ( top_mod, span, hir_id) = self . get_module ( CRATE_DEF_ID ) ;
574
574
visitor. visit_mod ( top_mod, span, hir_id) ;
@@ -588,53 +588,61 @@ impl<'hir> Map<'hir> {
588
588
}
589
589
}
590
590
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(())`.
597
599
///
598
600
/// 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 )
600
602
where
601
603
V : Visitor < ' hir > ,
602
604
{
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) ) ;
612
621
}
613
622
}
614
623
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 )
619
627
where
620
628
V : Visitor < ' hir > ,
621
629
{
622
630
let module = self . tcx . hir_module_items ( module) ;
623
631
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) ) ;
626
634
}
627
635
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) ) ;
630
638
}
631
639
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) ) ;
634
642
}
635
643
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) ) ;
638
646
}
639
647
}
640
648
0 commit comments