Skip to content

Commit 7ec973d

Browse files
committed
Stop using walk_crate.
1 parent ad3407f commit 7ec973d

File tree

15 files changed

+45
-39
lines changed

15 files changed

+45
-39
lines changed

compiler/rustc_hir/src/intravisit.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ pub trait Visitor<'v>: Sized {
478478
}
479479

480480
/// Walks the contents of a crate. See also `Crate::visit_all_items`.
481-
pub fn walk_crate<'v, V: Visitor<'v>>(visitor: &mut V, krate: &'v Crate<'v>) {
481+
pub fn walk_crate_and_attributes<'v, V: Visitor<'v>>(visitor: &mut V, krate: &'v Crate<'v>) {
482482
let top_mod = krate.module();
483483
visitor.visit_mod(top_mod, top_mod.inner, CRATE_HIR_ID);
484484
for (&id, attrs) in krate.attrs.iter() {

compiler/rustc_incremental/src/persist/dirty_clean.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ pub fn check_dirty_clean_annotations(tcx: TyCtxt<'_>) {
142142
krate.visit_all_item_likes(&mut dirty_clean_visitor);
143143

144144
let mut all_attrs = FindAllAttrs { tcx, found_attrs: vec![] };
145-
intravisit::walk_crate(&mut all_attrs, krate);
145+
tcx.hir().walk_attributes(&mut all_attrs);
146146

147147
// Note that we cannot use the existing "unused attribute"-infrastructure
148148
// here, since that is running before codegen. This is also the reason why

compiler/rustc_lint/src/late.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -451,9 +451,8 @@ fn late_lint_pass_crate<'tcx, T: LateLintPass<'tcx>>(tcx: TyCtxt<'tcx>, pass: T)
451451
// since the root module isn't visited as an item (because it isn't an
452452
// item), warn for it here.
453453
lint_callback!(cx, check_crate, krate);
454-
455-
hir_visit::walk_crate(cx, krate);
456-
454+
tcx.hir().walk_crate(cx);
455+
tcx.hir().walk_attributes(cx);
457456
lint_callback!(cx, check_crate_post, krate);
458457
})
459458
}

compiler/rustc_lint/src/levels.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ fn lint_levels(tcx: TyCtxt<'_>, (): ()) -> LintLevelMap {
3737

3838
let push = builder.levels.push(tcx.hir().attrs(hir::CRATE_HIR_ID), &store, true);
3939
builder.levels.register_id(hir::CRATE_HIR_ID);
40-
intravisit::walk_crate(&mut builder, krate);
40+
tcx.hir().walk_crate(&mut builder);
4141
builder.levels.pop(push);
4242

4343
builder.levels.build_map()

compiler/rustc_middle/src/hir/map/mod.rs

+20-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ use rustc_data_structures::fingerprint::Fingerprint;
77
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
88
use rustc_data_structures::svh::Svh;
99
use 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};
1111
use rustc_hir::definitions::{DefKey, DefPath, DefPathHash};
12-
use rustc_hir::intravisit;
12+
use rustc_hir::intravisit::{self, Visitor};
1313
use rustc_hir::itemlikevisit::ItemLikeVisitor;
1414
use rustc_hir::*;
1515
use 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)

compiler/rustc_passes/src/dead.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -775,5 +775,5 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
775775
let krate = tcx.hir().krate();
776776
let live_symbols = find_live(tcx, access_levels, krate);
777777
let mut visitor = DeadVisitor { tcx, live_symbols };
778-
intravisit::walk_crate(&mut visitor, krate);
778+
tcx.hir().walk_crate(&mut visitor);
779779
}

compiler/rustc_passes/src/hir_stats.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub fn print_hir_stats(krate: &hir::Crate<'_>) {
3636
data: FxHashMap::default(),
3737
seen: FxHashSet::default(),
3838
};
39-
hir_visit::walk_crate(&mut collector, krate);
39+
hir_visit::walk_crate_and_attributes(&mut collector, krate);
4040
collector.print("HIR STATS");
4141
}
4242

compiler/rustc_passes/src/lib_features.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use rustc_ast::{Attribute, MetaItem, MetaItemKind};
88
use rustc_errors::struct_span_err;
9-
use rustc_hir::intravisit::{self, NestedVisitorMap, Visitor};
9+
use rustc_hir::intravisit::{NestedVisitorMap, Visitor};
1010
use rustc_middle::hir::map::Map;
1111
use rustc_middle::middle::lib_features::LibFeatures;
1212
use rustc_middle::ty::query::Providers;
@@ -126,9 +126,7 @@ impl Visitor<'tcx> for LibFeatureCollector<'tcx> {
126126

127127
fn get_lib_features(tcx: TyCtxt<'_>, (): ()) -> LibFeatures {
128128
let mut collector = LibFeatureCollector::new(tcx);
129-
let krate = tcx.hir().krate();
130-
131-
intravisit::walk_crate(&mut collector, krate);
129+
tcx.hir().walk_attributes(&mut collector);
132130
collector.lib_features
133131
}
134132

compiler/rustc_passes/src/stability.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use rustc_errors::struct_span_err;
88
use rustc_hir as hir;
99
use rustc_hir::def::{DefKind, Res};
1010
use rustc_hir::def_id::{DefId, LocalDefId, CRATE_DEF_ID, CRATE_DEF_INDEX, LOCAL_CRATE};
11+
use rustc_hir::hir_id::CRATE_HIR_ID;
1112
use rustc_hir::intravisit::{self, NestedVisitorMap, Visitor};
1213
use rustc_hir::{FieldDef, Generics, HirId, Item, TraitRef, Ty, TyKind, Variant};
1314
use rustc_middle::hir::map::Map;
@@ -678,7 +679,6 @@ fn stability_index(tcx: TyCtxt<'tcx>, (): ()) -> Index<'tcx> {
678679
.collect();
679680

680681
{
681-
let krate = tcx.hir().krate();
682682
let mut annotator = Annotator {
683683
tcx,
684684
index: &mut index,
@@ -711,13 +711,13 @@ fn stability_index(tcx: TyCtxt<'tcx>, (): ()) -> Index<'tcx> {
711711

712712
annotator.annotate(
713713
CRATE_DEF_ID,
714-
krate.module().inner,
714+
tcx.hir().span(CRATE_HIR_ID),
715715
None,
716716
AnnotationKind::Required,
717717
InheritDeprecation::Yes,
718718
InheritConstStability::No,
719719
InheritStability::No,
720-
|v| intravisit::walk_crate(v, krate),
720+
|v| tcx.hir().walk_crate(v),
721721
);
722722
}
723723
index
@@ -908,8 +908,8 @@ pub fn check_unused_or_stable_features(tcx: TyCtxt<'_>) {
908908
if tcx.stability().staged_api[&LOCAL_CRATE] {
909909
let krate = tcx.hir().krate();
910910
let mut missing = MissingStabilityAnnotations { tcx, access_levels };
911-
missing.check_missing_stability(CRATE_DEF_ID, krate.module().inner);
912-
intravisit::walk_crate(&mut missing, krate);
911+
missing.check_missing_stability(CRATE_DEF_ID, tcx.hir().span(CRATE_HIR_ID));
912+
tcx.hir().walk_crate(&mut missing);
913913
krate.visit_all_item_likes(&mut missing.as_deep_visitor());
914914
}
915915

compiler/rustc_privacy/src/lib.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -2169,7 +2169,7 @@ fn privacy_access_levels(tcx: TyCtxt<'_>, (): ()) -> &AccessLevels {
21692169
changed: false,
21702170
};
21712171
loop {
2172-
intravisit::walk_crate(&mut visitor, tcx.hir().krate());
2172+
tcx.hir().walk_crate(&mut visitor);
21732173
if visitor.changed {
21742174
visitor.changed = false;
21752175
} else {
@@ -2192,11 +2192,11 @@ fn check_private_in_public(tcx: TyCtxt<'_>, (): ()) {
21922192
in_variant: false,
21932193
old_error_set: Default::default(),
21942194
};
2195-
intravisit::walk_crate(&mut visitor, krate);
2195+
tcx.hir().walk_crate(&mut visitor);
21962196

21972197
let has_pub_restricted = {
21982198
let mut pub_restricted_visitor = PubRestrictedVisitor { tcx, has_pub_restricted: false };
2199-
intravisit::walk_crate(&mut pub_restricted_visitor, krate);
2199+
tcx.hir().walk_crate(&mut pub_restricted_visitor);
22002200
pub_restricted_visitor.has_pub_restricted
22012201
};
22022202

compiler/rustc_save_analysis/src/dump_visitor.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1122,7 +1122,7 @@ impl<'tcx> DumpVisitor<'tcx> {
11221122
attributes: lower_attributes(attrs.to_owned(), &self.save_ctxt),
11231123
},
11241124
);
1125-
intravisit::walk_crate(self, krate);
1125+
self.tcx.hir().walk_crate(self);
11261126
}
11271127

11281128
fn process_bounds(&mut self, bounds: hir::GenericBounds<'tcx>) {

compiler/rustc_typeck/src/check/method/suggest.rs

+3-8
Original file line numberDiff line numberDiff line change
@@ -1012,8 +1012,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
10121012
) {
10131013
let module_did = self.tcx.parent_module(self.body_id);
10141014
let module_id = self.tcx.hir().local_def_id_to_hir_id(module_did);
1015-
let krate = self.tcx.hir().krate();
1016-
let (span, found_use) = UsePlacementFinder::check(self.tcx, krate, module_id);
1015+
let (span, found_use) = UsePlacementFinder::check(self.tcx, module_id);
10171016
if let Some(span) = span {
10181017
let path_strings = candidates.iter().map(|did| {
10191018
// Produce an additional newline to separate the new use statement
@@ -1614,13 +1613,9 @@ struct UsePlacementFinder<'tcx> {
16141613
}
16151614

16161615
impl UsePlacementFinder<'tcx> {
1617-
fn check(
1618-
tcx: TyCtxt<'tcx>,
1619-
krate: &'tcx hir::Crate<'tcx>,
1620-
target_module: hir::HirId,
1621-
) -> (Option<Span>, bool) {
1616+
fn check(tcx: TyCtxt<'tcx>, target_module: hir::HirId) -> (Option<Span>, bool) {
16221617
let mut finder = UsePlacementFinder { target_module, span: None, found_use: false, tcx };
1623-
intravisit::walk_crate(&mut finder, krate);
1618+
tcx.hir().walk_crate(&mut finder);
16241619
(finder.span, finder.found_use)
16251620
}
16261621
}

compiler/rustc_typeck/src/collect/type_of.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -691,7 +691,7 @@ fn find_opaque_ty_constraints(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Ty<'_> {
691691
debug!("find_opaque_ty_constraints: scope={:?}", scope);
692692

693693
if scope == hir::CRATE_HIR_ID {
694-
intravisit::walk_crate(&mut locator, tcx.hir().krate());
694+
tcx.hir().walk_crate(&mut locator);
695695
} else {
696696
debug!("find_opaque_ty_constraints: scope={:?}", tcx.hir().get(scope));
697697
match tcx.hir().get(scope) {

src/librustdoc/doctest.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ crate fn run(options: Options) -> Result<(), ErrorReported> {
116116
let mut global_ctxt = queries.global_ctxt()?.take();
117117

118118
let collector = global_ctxt.enter(|tcx| {
119-
let krate = tcx.hir().krate();
120119
let crate_attrs = tcx.hir().attrs(CRATE_HIR_ID);
121120

122121
let mut opts = scrape_test_config(crate_attrs);
@@ -144,10 +143,8 @@ crate fn run(options: Options) -> Result<(), ErrorReported> {
144143
hir_collector.visit_testable(
145144
"".to_string(),
146145
CRATE_HIR_ID,
147-
krate.module().inner,
148-
|this| {
149-
intravisit::walk_crate(this, krate);
150-
},
146+
tcx.hir().span(CRATE_HIR_ID),
147+
|this| tcx.hir().walk_crate(this),
151148
);
152149

153150
collector

src/librustdoc/html/render/span_map.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ crate fn collect_spans_and_sources(
4545

4646
if include_sources {
4747
if generate_link_to_definition {
48-
intravisit::walk_crate(&mut visitor, tcx.hir().krate());
48+
tcx.hir().walk_crate(&mut visitor);
4949
}
5050
let (krate, sources) = sources::collect_local_sources(tcx, src_root, krate);
5151
(krate, sources, visitor.matches)

0 commit comments

Comments
 (0)