@@ -7,9 +7,9 @@ use rustc_data_structures::fingerprint::Fingerprint;
77use rustc_data_structures:: stable_hasher:: { HashStable , StableHasher } ;
88use rustc_data_structures:: svh:: Svh ;
99use rustc_hir:: def:: { DefKind , Res } ;
10- use rustc_hir:: def_id:: { CrateNum , DefId , LocalDefId , CRATE_DEF_INDEX , LOCAL_CRATE } ;
10+ use rustc_hir:: def_id:: { CrateNum , DefId , LocalDefId , CRATE_DEF_ID , CRATE_DEF_INDEX , LOCAL_CRATE } ;
1111use rustc_hir:: definitions:: { DefKey , DefPath , DefPathHash } ;
12- use rustc_hir:: intravisit;
12+ use rustc_hir:: intravisit:: { self , Visitor } ;
1313use rustc_hir:: itemlikevisit:: ItemLikeVisitor ;
1414use rustc_hir:: * ;
1515use rustc_index:: vec:: Idx ;
@@ -519,6 +519,22 @@ impl<'hir> Map<'hir> {
519519 }
520520 }
521521
522+ /// Walks the contents of a crate. See also `Crate::visit_all_items`.
523+ pub fn walk_crate ( self , visitor : & mut impl Visitor < ' hir > ) {
524+ let ( top_mod, span, hir_id) = self . get_module ( CRATE_DEF_ID ) ;
525+ visitor. visit_mod ( top_mod, span, hir_id) ;
526+ }
527+
528+ /// Walks the attributes in a crate.
529+ pub fn walk_attributes ( self , visitor : & mut impl Visitor < ' hir > ) {
530+ let krate = self . krate ( ) ;
531+ for ( & id, attrs) in krate. attrs . iter ( ) {
532+ for a in * attrs {
533+ visitor. visit_attribute ( id, a)
534+ }
535+ }
536+ }
537+
522538 pub fn visit_item_likes_in_module < V > ( & self , module : LocalDefId , visitor : & mut V )
523539 where
524540 V : ItemLikeVisitor < ' hir > ,
@@ -934,7 +950,8 @@ pub(super) fn index_hir<'tcx>(tcx: TyCtxt<'tcx>, (): ()) -> &'tcx IndexedHir<'tc
934950 & tcx. untracked_resolutions . definitions ,
935951 hcx,
936952 ) ;
937- intravisit:: walk_crate ( & mut collector, tcx. untracked_crate ) ;
953+ let top_mod = tcx. untracked_crate . module ( ) ;
954+ collector. visit_mod ( top_mod, top_mod. inner , CRATE_HIR_ID ) ;
938955
939956 let map = collector. finalize_and_compute_crate_hash ( ) ;
940957 tcx. arena . alloc ( map)
0 commit comments