Only store a LocalDefId in hir::Item.
Items are guaranteed to be HIR owner.
This commit is contained in:
parent
bd3cd5dbed
commit
cebbba081e
86 changed files with 483 additions and 565 deletions
|
@ -454,11 +454,9 @@ impl EmbargoVisitor<'tcx> {
|
|||
let module_def_id = self.tcx.hir().local_def_id(reachable_mod);
|
||||
let module = self.tcx.hir().get_module(module_def_id).0;
|
||||
for item_id in module.item_ids {
|
||||
let hir_id = item_id.id;
|
||||
let item_def_id = self.tcx.hir().local_def_id(hir_id);
|
||||
let def_kind = self.tcx.def_kind(item_def_id);
|
||||
let vis = self.tcx.visibility(item_def_id);
|
||||
self.update_macro_reachable_def(hir_id, def_kind, vis, defining_mod);
|
||||
let def_kind = self.tcx.def_kind(item_id.def_id);
|
||||
let vis = self.tcx.visibility(item_id.def_id);
|
||||
self.update_macro_reachable_def(item_id.hir_id(), def_kind, vis, defining_mod);
|
||||
}
|
||||
if let Some(exports) = self.tcx.module_exports(module_def_id) {
|
||||
for export in exports {
|
||||
|
@ -590,12 +588,15 @@ impl EmbargoVisitor<'tcx> {
|
|||
if let hir::ItemKind::Mod(m) = &item.kind {
|
||||
for &item_id in m.item_ids {
|
||||
let item = self.tcx.hir().item(item_id);
|
||||
let def_id = self.tcx.hir().local_def_id(item_id.id);
|
||||
if !self.tcx.hygienic_eq(segment.ident, item.ident, def_id.to_def_id()) {
|
||||
if !self.tcx.hygienic_eq(
|
||||
segment.ident,
|
||||
item.ident,
|
||||
item_id.def_id.to_def_id(),
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
if let hir::ItemKind::Use(..) = item.kind {
|
||||
self.update(item.hir_id, Some(AccessLevel::Exported));
|
||||
self.update(item.hir_id(), Some(AccessLevel::Exported));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -616,7 +617,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
|
|||
fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) {
|
||||
let inherited_item_level = match item.kind {
|
||||
hir::ItemKind::Impl { .. } => {
|
||||
Option::<AccessLevel>::of_impl(item.hir_id, self.tcx, &self.access_levels)
|
||||
Option::<AccessLevel>::of_impl(item.hir_id(), self.tcx, &self.access_levels)
|
||||
}
|
||||
// Foreign modules inherit level from parents.
|
||||
hir::ItemKind::ForeignMod { .. } => self.prev_level,
|
||||
|
@ -644,7 +645,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
|
|||
};
|
||||
|
||||
// Update level of the item itself.
|
||||
let item_level = self.update(item.hir_id, inherited_item_level);
|
||||
let item_level = self.update(item.hir_id(), inherited_item_level);
|
||||
|
||||
// Update levels of nested things.
|
||||
match item.kind {
|
||||
|
@ -727,7 +728,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
|
|||
// reachable if they are returned via `impl Trait`, even from private functions.
|
||||
let exist_level =
|
||||
cmp::max(item_level, Some(AccessLevel::ReachableFromImplTrait));
|
||||
self.reach(item.hir_id, exist_level).generics().predicates().ty();
|
||||
self.reach(item.hir_id(), exist_level).generics().predicates().ty();
|
||||
}
|
||||
}
|
||||
// Visit everything.
|
||||
|
@ -736,12 +737,12 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
|
|||
| hir::ItemKind::Fn(..)
|
||||
| hir::ItemKind::TyAlias(..) => {
|
||||
if item_level.is_some() {
|
||||
self.reach(item.hir_id, item_level).generics().predicates().ty();
|
||||
self.reach(item.hir_id(), item_level).generics().predicates().ty();
|
||||
}
|
||||
}
|
||||
hir::ItemKind::Trait(.., trait_item_refs) => {
|
||||
if item_level.is_some() {
|
||||
self.reach(item.hir_id, item_level).generics().predicates();
|
||||
self.reach(item.hir_id(), item_level).generics().predicates();
|
||||
|
||||
for trait_item_ref in trait_item_refs {
|
||||
let mut reach = self.reach(trait_item_ref.id.hir_id, item_level);
|
||||
|
@ -759,13 +760,13 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
|
|||
}
|
||||
hir::ItemKind::TraitAlias(..) => {
|
||||
if item_level.is_some() {
|
||||
self.reach(item.hir_id, item_level).generics().predicates();
|
||||
self.reach(item.hir_id(), item_level).generics().predicates();
|
||||
}
|
||||
}
|
||||
// Visit everything except for private impl items.
|
||||
hir::ItemKind::Impl(ref impl_) => {
|
||||
if item_level.is_some() {
|
||||
self.reach(item.hir_id, item_level).generics().predicates().ty().trait_ref();
|
||||
self.reach(item.hir_id(), item_level).generics().predicates().ty().trait_ref();
|
||||
|
||||
for impl_item_ref in impl_.items {
|
||||
let impl_item_level = self.get(impl_item_ref.id.hir_id);
|
||||
|
@ -782,7 +783,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
|
|||
// Visit everything, but enum variants have their own levels.
|
||||
hir::ItemKind::Enum(ref def, _) => {
|
||||
if item_level.is_some() {
|
||||
self.reach(item.hir_id, item_level).generics().predicates();
|
||||
self.reach(item.hir_id(), item_level).generics().predicates();
|
||||
}
|
||||
for variant in def.variants {
|
||||
let variant_level = self.get(variant.id);
|
||||
|
@ -792,7 +793,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
|
|||
}
|
||||
// Corner case: if the variant is reachable, but its
|
||||
// enum is not, make the enum reachable as well.
|
||||
self.update(item.hir_id, variant_level);
|
||||
self.update(item.hir_id(), variant_level);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -811,7 +812,7 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
|
|||
// Visit everything except for private fields.
|
||||
hir::ItemKind::Struct(ref struct_def, _) | hir::ItemKind::Union(ref struct_def, _) => {
|
||||
if item_level.is_some() {
|
||||
self.reach(item.hir_id, item_level).generics().predicates();
|
||||
self.reach(item.hir_id(), item_level).generics().predicates();
|
||||
for field in struct_def.fields() {
|
||||
let field_level = self.get(field.hir_id);
|
||||
if field_level.is_some() {
|
||||
|
@ -1037,7 +1038,7 @@ impl<'tcx> Visitor<'tcx> for NamePrivacyVisitor<'tcx> {
|
|||
}
|
||||
|
||||
fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) {
|
||||
let orig_current_item = self.current_item.replace(item.hir_id);
|
||||
let orig_current_item = self.current_item.replace(item.hir_id());
|
||||
intravisit::walk_item(self, item);
|
||||
self.current_item = orig_current_item;
|
||||
}
|
||||
|
@ -1322,8 +1323,7 @@ impl<'tcx> Visitor<'tcx> for TypePrivacyVisitor<'tcx> {
|
|||
|
||||
// Check types in item interfaces.
|
||||
fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) {
|
||||
let orig_current_item =
|
||||
mem::replace(&mut self.current_item, self.tcx.hir().local_def_id(item.hir_id));
|
||||
let orig_current_item = mem::replace(&mut self.current_item, item.def_id);
|
||||
let old_maybe_typeck_results = self.maybe_typeck_results.take();
|
||||
intravisit::walk_item(self, item);
|
||||
self.maybe_typeck_results = old_maybe_typeck_results;
|
||||
|
@ -1463,7 +1463,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ObsoleteVisiblePrivateTypesVisitor<'a, 'tcx> {
|
|||
hir::ItemKind::ForeignMod { .. } => {}
|
||||
|
||||
hir::ItemKind::Trait(.., ref bounds, _) => {
|
||||
if !self.trait_is_public(item.hir_id) {
|
||||
if !self.trait_is_public(item.hir_id()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1615,7 +1615,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ObsoleteVisiblePrivateTypesVisitor<'a, 'tcx> {
|
|||
hir::ItemKind::TyAlias(..) => return,
|
||||
|
||||
// Not at all public, so we don't care.
|
||||
_ if !self.item_is_public(&item.hir_id, &item.vis) => {
|
||||
_ if !self.item_is_public(&item.hir_id(), &item.vis) => {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1926,7 +1926,7 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx>
|
|||
|
||||
fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) {
|
||||
let tcx = self.tcx;
|
||||
let item_visibility = tcx.visibility(tcx.hir().local_def_id(item.hir_id).to_def_id());
|
||||
let item_visibility = tcx.visibility(item.def_id);
|
||||
|
||||
match item.kind {
|
||||
// Crates are always public.
|
||||
|
@ -1942,15 +1942,15 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx>
|
|||
| hir::ItemKind::Static(..)
|
||||
| hir::ItemKind::Fn(..)
|
||||
| hir::ItemKind::TyAlias(..) => {
|
||||
self.check(item.hir_id, item_visibility).generics().predicates().ty();
|
||||
self.check(item.hir_id(), item_visibility).generics().predicates().ty();
|
||||
}
|
||||
hir::ItemKind::OpaqueTy(..) => {
|
||||
// `ty()` for opaque types is the underlying type,
|
||||
// it's not a part of interface, so we skip it.
|
||||
self.check(item.hir_id, item_visibility).generics().bounds();
|
||||
self.check(item.hir_id(), item_visibility).generics().bounds();
|
||||
}
|
||||
hir::ItemKind::Trait(.., trait_item_refs) => {
|
||||
self.check(item.hir_id, item_visibility).generics().predicates();
|
||||
self.check(item.hir_id(), item_visibility).generics().predicates();
|
||||
|
||||
for trait_item_ref in trait_item_refs {
|
||||
self.check_assoc_item(
|
||||
|
@ -1966,10 +1966,10 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx>
|
|||
}
|
||||
}
|
||||
hir::ItemKind::TraitAlias(..) => {
|
||||
self.check(item.hir_id, item_visibility).generics().predicates();
|
||||
self.check(item.hir_id(), item_visibility).generics().predicates();
|
||||
}
|
||||
hir::ItemKind::Enum(ref def, _) => {
|
||||
self.check(item.hir_id, item_visibility).generics().predicates();
|
||||
self.check(item.hir_id(), item_visibility).generics().predicates();
|
||||
|
||||
for variant in def.variants {
|
||||
for field in variant.data.fields() {
|
||||
|
@ -1986,7 +1986,7 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx>
|
|||
}
|
||||
// Subitems of structs and unions have their own publicity.
|
||||
hir::ItemKind::Struct(ref struct_def, _) | hir::ItemKind::Union(ref struct_def, _) => {
|
||||
self.check(item.hir_id, item_visibility).generics().predicates();
|
||||
self.check(item.hir_id(), item_visibility).generics().predicates();
|
||||
|
||||
for field in struct_def.fields() {
|
||||
let field_visibility = tcx.visibility(tcx.hir().local_def_id(field.hir_id));
|
||||
|
@ -1998,8 +1998,8 @@ impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx>
|
|||
// A trait impl is public when both its type and its trait are public
|
||||
// Subitems of trait impls have inherited publicity.
|
||||
hir::ItemKind::Impl(ref impl_) => {
|
||||
let impl_vis = ty::Visibility::of_impl(item.hir_id, tcx, &Default::default());
|
||||
self.check(item.hir_id, impl_vis).generics().predicates();
|
||||
let impl_vis = ty::Visibility::of_impl(item.hir_id(), tcx, &Default::default());
|
||||
self.check(item.hir_id(), impl_vis).generics().predicates();
|
||||
for impl_item_ref in impl_.items {
|
||||
let impl_item_vis = if impl_.of_trait.is_none() {
|
||||
min(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue