mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 02:57:37 +00:00
remove OuterVisitor
Signed-off-by: Miguel Guarniz <mi9uel9@gmail.com>
This commit is contained in:
parent
b1f0209cd1
commit
0ef16feb72
@ -3,7 +3,7 @@ use rustc_data_structures::sync::Lock;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def_id::{LocalDefId, CRATE_DEF_ID};
|
||||
use rustc_hir::intravisit;
|
||||
use rustc_hir::itemlikevisit::ItemLikeVisitor;
|
||||
use rustc_hir::intravisit::Visitor;
|
||||
use rustc_hir::{HirId, ItemLocalId};
|
||||
use rustc_middle::hir::map::Map;
|
||||
use rustc_middle::hir::nested_filter;
|
||||
@ -20,8 +20,30 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
|
||||
let hir_map = tcx.hir();
|
||||
|
||||
hir_map.par_for_each_module(|module_id| {
|
||||
hir_map
|
||||
.visit_item_likes_in_module(module_id, &mut OuterVisitor { hir_map, errors: &errors })
|
||||
let mut v = HirIdValidator {
|
||||
hir_map,
|
||||
owner: None,
|
||||
hir_ids_seen: Default::default(),
|
||||
errors: &errors,
|
||||
};
|
||||
|
||||
let module = tcx.hir_module_items(module_id);
|
||||
|
||||
for id in module.items() {
|
||||
v.visit_item(tcx.hir().item(id))
|
||||
}
|
||||
|
||||
for id in module.trait_items() {
|
||||
v.visit_trait_item(tcx.hir().trait_item(id))
|
||||
}
|
||||
|
||||
for id in module.impl_items() {
|
||||
v.visit_impl_item(tcx.hir().impl_item(id))
|
||||
}
|
||||
|
||||
for id in module.foreign_items() {
|
||||
v.visit_foreign_item(tcx.hir().foreign_item(id))
|
||||
}
|
||||
});
|
||||
|
||||
let errors = errors.into_inner();
|
||||
@ -39,13 +61,8 @@ struct HirIdValidator<'a, 'hir> {
|
||||
errors: &'a Lock<Vec<String>>,
|
||||
}
|
||||
|
||||
struct OuterVisitor<'a, 'hir> {
|
||||
hir_map: Map<'hir>,
|
||||
errors: &'a Lock<Vec<String>>,
|
||||
}
|
||||
|
||||
impl<'a, 'hir> OuterVisitor<'a, 'hir> {
|
||||
fn new_inner_visitor(&self, hir_map: Map<'hir>) -> HirIdValidator<'a, 'hir> {
|
||||
impl<'a, 'hir> HirIdValidator<'a, 'hir> {
|
||||
fn new_visitor(&self, hir_map: Map<'hir>) -> HirIdValidator<'a, 'hir> {
|
||||
HirIdValidator {
|
||||
hir_map,
|
||||
owner: None,
|
||||
@ -53,31 +70,7 @@ impl<'a, 'hir> OuterVisitor<'a, 'hir> {
|
||||
errors: self.errors,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'hir> ItemLikeVisitor<'hir> for OuterVisitor<'a, 'hir> {
|
||||
fn visit_item(&mut self, i: &'hir hir::Item<'hir>) {
|
||||
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
|
||||
inner_visitor.check(i.def_id, |this| intravisit::walk_item(this, i));
|
||||
}
|
||||
|
||||
fn visit_trait_item(&mut self, i: &'hir hir::TraitItem<'hir>) {
|
||||
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
|
||||
inner_visitor.check(i.def_id, |this| intravisit::walk_trait_item(this, i));
|
||||
}
|
||||
|
||||
fn visit_impl_item(&mut self, i: &'hir hir::ImplItem<'hir>) {
|
||||
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
|
||||
inner_visitor.check(i.def_id, |this| intravisit::walk_impl_item(this, i));
|
||||
}
|
||||
|
||||
fn visit_foreign_item(&mut self, i: &'hir hir::ForeignItem<'hir>) {
|
||||
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
|
||||
inner_visitor.check(i.def_id, |this| intravisit::walk_foreign_item(this, i));
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'hir> HirIdValidator<'a, 'hir> {
|
||||
#[cold]
|
||||
#[inline(never)]
|
||||
fn error(&self, f: impl FnOnce() -> String) {
|
||||
@ -146,6 +139,11 @@ impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> {
|
||||
self.hir_map
|
||||
}
|
||||
|
||||
fn visit_item(&mut self, i: &'hir hir::Item<'hir>) {
|
||||
let mut inner_visitor = self.new_visitor(self.hir_map);
|
||||
inner_visitor.check(i.def_id, |this| intravisit::walk_item(this, i));
|
||||
}
|
||||
|
||||
fn visit_id(&mut self, hir_id: HirId) {
|
||||
let owner = self.owner.expect("no owner");
|
||||
|
||||
@ -163,11 +161,19 @@ impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> {
|
||||
self.hir_ids_seen.insert(hir_id.local_id);
|
||||
}
|
||||
|
||||
fn visit_impl_item_ref(&mut self, _: &'hir hir::ImplItemRef) {
|
||||
// Explicitly do nothing here. ImplItemRefs contain hir::Visibility
|
||||
// values that actually belong to an ImplItem instead of the ItemKind::Impl
|
||||
// we are currently in. So for those it's correct that they have a
|
||||
// different owner.
|
||||
fn visit_foreign_item(&mut self, i: &'hir hir::ForeignItem<'hir>) {
|
||||
let mut inner_visitor = self.new_visitor(self.hir_map);
|
||||
inner_visitor.check(i.def_id, |this| intravisit::walk_foreign_item(this, i));
|
||||
}
|
||||
|
||||
fn visit_trait_item(&mut self, i: &'hir hir::TraitItem<'hir>) {
|
||||
let mut inner_visitor = self.new_visitor(self.hir_map);
|
||||
inner_visitor.check(i.def_id, |this| intravisit::walk_trait_item(this, i));
|
||||
}
|
||||
|
||||
fn visit_impl_item(&mut self, i: &'hir hir::ImplItem<'hir>) {
|
||||
let mut inner_visitor = self.new_visitor(self.hir_map);
|
||||
inner_visitor.check(i.def_id, |this| intravisit::walk_impl_item(this, i));
|
||||
}
|
||||
|
||||
fn visit_foreign_item_ref(&mut self, _: &'hir hir::ForeignItemRef) {
|
||||
@ -176,4 +182,11 @@ impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> {
|
||||
// we are currently in. So for those it's correct that they have a
|
||||
// different owner.
|
||||
}
|
||||
|
||||
fn visit_impl_item_ref(&mut self, _: &'hir hir::ImplItemRef) {
|
||||
// Explicitly do nothing here. ImplItemRefs contain hir::Visibility
|
||||
// values that actually belong to an ImplItem instead of the ItemKind::Impl
|
||||
// we are currently in. So for those it's correct that they have a
|
||||
// different owner.
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user