From 5fb4648757add26b0289ae69203f26e856580831 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Wed, 20 Oct 2021 22:38:10 +0200 Subject: [PATCH] Take a LocalDefId in expect_*item. --- .../rustc_infer/src/infer/opaque_types.rs | 2 +- compiler/rustc_lint/src/builtin.rs | 2 +- compiler/rustc_metadata/src/rmeta/encoder.rs | 6 +-- compiler/rustc_middle/src/hir/map/mod.rs | 26 +++++++------ compiler/rustc_middle/src/ty/error.rs | 4 +- compiler/rustc_passes/src/check_attr.rs | 6 +-- compiler/rustc_passes/src/reachable.rs | 3 +- compiler/rustc_privacy/src/lib.rs | 10 ++--- compiler/rustc_resolve/src/late/lifetimes.rs | 12 +++--- compiler/rustc_ty_utils/src/ty.rs | 11 ++---- compiler/rustc_typeck/src/check/check.rs | 2 +- compiler/rustc_typeck/src/check/coercion.rs | 3 +- .../rustc_typeck/src/check/compare_method.rs | 39 +++++++------------ .../rustc_typeck/src/check/fn_ctxt/_impl.rs | 7 +--- .../src/check/method/prelude2021.rs | 5 +-- compiler/rustc_typeck/src/check/wfcheck.rs | 12 +++--- compiler/rustc_typeck/src/check_unused.rs | 5 ++- .../rustc_typeck/src/coherence/builtin.rs | 22 ++++++----- compiler/rustc_typeck/src/collect.rs | 14 +++---- src/librustdoc/clean/inline.rs | 11 ++---- src/librustdoc/clean/mod.rs | 5 +-- src/librustdoc/visit_ast.rs | 3 +- .../auxiliary/issue-40001-plugin.rs | 4 +- src/tools/clippy/clippy_lints/src/derive.rs | 8 +--- .../clippy/clippy_lints/src/methods/mod.rs | 2 +- .../clippy/clippy_lints/src/non_copy_const.rs | 4 +- .../src/self_named_constructors.rs | 2 +- .../clippy/clippy_lints/src/unused_self.rs | 2 +- 28 files changed, 95 insertions(+), 137 deletions(-) diff --git a/compiler/rustc_infer/src/infer/opaque_types.rs b/compiler/rustc_infer/src/infer/opaque_types.rs index 932f26d555010..7893abbfc9bf7 100644 --- a/compiler/rustc_infer/src/infer/opaque_types.rs +++ b/compiler/rustc_infer/src/infer/opaque_types.rs @@ -467,7 +467,7 @@ impl<'a, 'tcx> Instantiator<'a, 'tcx> { parent_def_id == tcx.hir().local_def_id(opaque_parent_hir_id) }; let (in_definition_scope, origin) = - match tcx.hir().expect_item(opaque_hir_id).kind { + match tcx.hir().expect_item(def_id).kind { // Anonymous `impl Trait` hir::ItemKind::OpaqueTy(hir::OpaqueTy { impl_trait_fn: Some(parent), diff --git a/compiler/rustc_lint/src/builtin.rs b/compiler/rustc_lint/src/builtin.rs index f2e4e70a19779..f36b9c82fac4e 100644 --- a/compiler/rustc_lint/src/builtin.rs +++ b/compiler/rustc_lint/src/builtin.rs @@ -3011,7 +3011,7 @@ impl<'tcx> LateLintPass<'tcx> for ClashingExternDeclarations { this_decl_ty, CItemKind::Declaration, ) { - let orig_fi = tcx.hir().expect_foreign_item(existing_hid); + let orig_fi = tcx.hir().expect_foreign_item(existing_hid.expect_owner()); let orig = Self::name_of_extern_decl(tcx, orig_fi); // We want to ensure that we use spans for both decls that include where the diff --git a/compiler/rustc_metadata/src/rmeta/encoder.rs b/compiler/rustc_metadata/src/rmeta/encoder.rs index d46829c2ceea6..576113870f86e 100644 --- a/compiler/rustc_metadata/src/rmeta/encoder.rs +++ b/compiler/rustc_metadata/src/rmeta/encoder.rs @@ -1152,8 +1152,7 @@ impl EncodeContext<'a, 'tcx> { debug!("EncodeContext::encode_info_for_trait_item({:?})", def_id); let tcx = self.tcx; - let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); - let ast_item = tcx.hir().expect_trait_item(hir_id); + let ast_item = tcx.hir().expect_trait_item(def_id.expect_local()); let trait_item = tcx.associated_item(def_id); let container = match trait_item.defaultness { @@ -1221,8 +1220,7 @@ impl EncodeContext<'a, 'tcx> { debug!("EncodeContext::encode_info_for_impl_item({:?})", def_id); let tcx = self.tcx; - let hir_id = self.tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); - let ast_item = self.tcx.hir().expect_impl_item(hir_id); + let ast_item = self.tcx.hir().expect_impl_item(def_id.expect_local()); let impl_item = self.tcx.associated_item(def_id); let container = match impl_item.defaultness { diff --git a/compiler/rustc_middle/src/hir/map/mod.rs b/compiler/rustc_middle/src/hir/map/mod.rs index d9d0781b37aac..5c4c2eee21fc1 100644 --- a/compiler/rustc_middle/src/hir/map/mod.rs +++ b/compiler/rustc_middle/src/hir/map/mod.rs @@ -869,24 +869,24 @@ impl<'hir> Map<'hir> { bug!("expected foreign mod or inlined parent, found {}", self.node_to_string(parent)) } - pub fn expect_item(&self, id: HirId) -> &'hir Item<'hir> { - match self.tcx.hir_owner(id.expect_owner()) { + pub fn expect_item(&self, id: LocalDefId) -> &'hir Item<'hir> { + match self.tcx.hir_owner(id) { Some(Owner { node: OwnerNode::Item(item), .. }) => item, - _ => bug!("expected item, found {}", self.node_to_string(id)), + _ => bug!("expected item, found {}", self.node_to_string(HirId::make_owner(id))), } } - pub fn expect_impl_item(&self, id: HirId) -> &'hir ImplItem<'hir> { - match self.tcx.hir_owner(id.expect_owner()) { + pub fn expect_impl_item(&self, id: LocalDefId) -> &'hir ImplItem<'hir> { + match self.tcx.hir_owner(id) { Some(Owner { node: OwnerNode::ImplItem(item), .. }) => item, - _ => bug!("expected impl item, found {}", self.node_to_string(id)), + _ => bug!("expected impl item, found {}", self.node_to_string(HirId::make_owner(id))), } } - pub fn expect_trait_item(&self, id: HirId) -> &'hir TraitItem<'hir> { - match self.tcx.hir_owner(id.expect_owner()) { + pub fn expect_trait_item(&self, id: LocalDefId) -> &'hir TraitItem<'hir> { + match self.tcx.hir_owner(id) { Some(Owner { node: OwnerNode::TraitItem(item), .. }) => item, - _ => bug!("expected trait item, found {}", self.node_to_string(id)), + _ => bug!("expected trait item, found {}", self.node_to_string(HirId::make_owner(id))), } } @@ -897,10 +897,12 @@ impl<'hir> Map<'hir> { } } - pub fn expect_foreign_item(&self, id: HirId) -> &'hir ForeignItem<'hir> { - match self.tcx.hir_owner(id.expect_owner()) { + pub fn expect_foreign_item(&self, id: LocalDefId) -> &'hir ForeignItem<'hir> { + match self.tcx.hir_owner(id) { Some(Owner { node: OwnerNode::ForeignItem(item), .. }) => item, - _ => bug!("expected foreign item, found {}", self.node_to_string(id)), + _ => { + bug!("expected foreign item, found {}", self.node_to_string(HirId::make_owner(id))) + } } } diff --git a/compiler/rustc_middle/src/ty/error.rs b/compiler/rustc_middle/src/ty/error.rs index b14a69892657b..bda40a9abb097 100644 --- a/compiler/rustc_middle/src/ty/error.rs +++ b/compiler/rustc_middle/src/ty/error.rs @@ -777,9 +777,7 @@ fn foo(&self) -> Self::T { String::new() } if let ty::Opaque(def_id, _) = *proj_ty.self_ty().kind() { let opaque_local_def_id = def_id.as_local(); let opaque_hir_ty = if let Some(opaque_local_def_id) = opaque_local_def_id { - let hir = self.hir(); - let opaque_hir_id = hir.local_def_id_to_hir_id(opaque_local_def_id); - match &hir.expect_item(opaque_hir_id).kind { + match &self.hir().expect_item(opaque_local_def_id).kind { hir::ItemKind::OpaqueTy(opaque_hir_ty) => opaque_hir_ty, _ => bug!("The HirId comes from a `ty::Opaque`"), } diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs index f761eaae5ab73..7c0b3a57da976 100644 --- a/compiler/rustc_passes/src/check_attr.rs +++ b/compiler/rustc_passes/src/check_attr.rs @@ -32,7 +32,7 @@ pub(crate) fn target_from_impl_item<'tcx>( match impl_item.kind { hir::ImplItemKind::Const(..) => Target::AssocConst, hir::ImplItemKind::Fn(..) => { - let parent_hir_id = tcx.hir().get_parent_item(impl_item.hir_id()); + let parent_hir_id = tcx.hir().get_parent_item(impl_item.hir_id()).expect_owner(); let containing_item = tcx.hir().expect_item(parent_hir_id); let containing_impl_is_for_trait = match &containing_item.kind { hir::ItemKind::Impl(impl_) => impl_.of_trait.is_some(), @@ -582,7 +582,7 @@ impl CheckAttrVisitor<'tcx> { Target::Impl => Some("implementation block"), Target::ForeignMod => Some("extern block"), Target::AssocTy => { - let parent_hir_id = self.tcx.hir().get_parent_item(hir_id); + let parent_hir_id = self.tcx.hir().get_parent_item(hir_id).expect_owner(); let containing_item = self.tcx.hir().expect_item(parent_hir_id); if Target::from_item(containing_item) == Target::Impl { Some("type alias in implementation block") @@ -591,7 +591,7 @@ impl CheckAttrVisitor<'tcx> { } } Target::AssocConst => { - let parent_hir_id = self.tcx.hir().get_parent_item(hir_id); + let parent_hir_id = self.tcx.hir().get_parent_item(hir_id).expect_owner(); let containing_item = self.tcx.hir().expect_item(parent_hir_id); // We can't link to trait impl's consts. let err = "associated constant in trait implementation block"; diff --git a/compiler/rustc_passes/src/reachable.rs b/compiler/rustc_passes/src/reachable.rs index bd1e9520ee9fe..fc56a339215be 100644 --- a/compiler/rustc_passes/src/reachable.rs +++ b/compiler/rustc_passes/src/reachable.rs @@ -173,8 +173,7 @@ impl<'tcx> ReachableContext<'tcx> { // Check the impl. If the generics on the self // type of the impl require inlining, this method // does too. - let impl_hir_id = self.tcx.hir().local_def_id_to_hir_id(impl_did); - match self.tcx.hir().expect_item(impl_hir_id).kind { + match self.tcx.hir().expect_item(impl_did).kind { hir::ItemKind::Impl { .. } => { let generics = self.tcx.generics_of(impl_did); generics.requires_monomorphization(self.tcx) diff --git a/compiler/rustc_privacy/src/lib.rs b/compiler/rustc_privacy/src/lib.rs index 11668146f7b10..e3d2c9837cf51 100644 --- a/compiler/rustc_privacy/src/lib.rs +++ b/compiler/rustc_privacy/src/lib.rs @@ -559,8 +559,7 @@ impl EmbargoVisitor<'tcx> { // have normal hygine, so we can treat them like other items without type // privacy and mark them reachable. DefKind::Macro(_) => { - let hir_id = self.tcx.hir().local_def_id_to_hir_id(def_id); - let item = self.tcx.hir().expect_item(hir_id); + let item = self.tcx.hir().expect_item(def_id); if let hir::ItemKind::Macro(MacroDef { macro_rules: false, .. }) = item.kind { if vis.is_accessible_from(module.to_def_id(), self.tcx) { self.update(def_id, level); @@ -581,8 +580,7 @@ impl EmbargoVisitor<'tcx> { DefKind::Struct | DefKind::Union => { // While structs and unions have type privacy, their fields do not. if vis.is_public() { - let item = - self.tcx.hir().expect_item(self.tcx.hir().local_def_id_to_hir_id(def_id)); + let item = self.tcx.hir().expect_item(def_id); if let hir::ItemKind::Struct(ref struct_def, _) | hir::ItemKind::Union(ref struct_def, _) = item.kind { @@ -653,9 +651,7 @@ impl EmbargoVisitor<'tcx> { // If the module is `self`, i.e. the current crate, // there will be no corresponding item. .filter(|def_id| def_id.index != CRATE_DEF_INDEX || def_id.krate != LOCAL_CRATE) - .and_then(|def_id| { - def_id.as_local().map(|def_id| self.tcx.hir().local_def_id_to_hir_id(def_id)) - }) + .and_then(|def_id| def_id.as_local()) .map(|module_hir_id| self.tcx.hir().expect_item(module_hir_id)) { if let hir::ItemKind::Mod(m) = &item.kind { diff --git a/compiler/rustc_resolve/src/late/lifetimes.rs b/compiler/rustc_resolve/src/late/lifetimes.rs index 39e710cb77f3f..f9d609f9c9ce6 100644 --- a/compiler/rustc_resolve/src/late/lifetimes.rs +++ b/compiler/rustc_resolve/src/late/lifetimes.rs @@ -445,7 +445,7 @@ fn do_resolve( trait_definition_only: bool, with_scope_for_path: bool, ) -> NamedRegionMap { - let item = tcx.hir().expect_item(tcx.hir().local_def_id_to_hir_id(local_def_id)); + let item = tcx.hir().expect_item(local_def_id); let mut named_region_map = NamedRegionMap { defs: Default::default(), late_bound: Default::default(), @@ -1134,7 +1134,7 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> { self.missing_named_lifetime_spots.push((&trait_item.generics).into()); let tcx = self.tcx; self.visit_early_late( - Some(tcx.hir().get_parent_item(trait_item.hir_id())), + Some(tcx.hir().get_parent_did(trait_item.hir_id())), trait_item.hir_id(), &sig.decl, &trait_item.generics, @@ -1203,7 +1203,7 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> { self.missing_named_lifetime_spots.push((&impl_item.generics).into()); let tcx = self.tcx; self.visit_early_late( - Some(tcx.hir().get_parent_item(impl_item.hir_id())), + Some(tcx.hir().get_parent_did(impl_item.hir_id())), impl_item.hir_id(), &sig.decl, &impl_item.generics, @@ -2176,7 +2176,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> { /// ordering is not important there. fn visit_early_late( &mut self, - parent_id: Option, + parent_id: Option, hir_id: hir::HirId, decl: &'tcx hir::FnDecl<'tcx>, generics: &'tcx hir::Generics<'tcx>, @@ -2758,7 +2758,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> { Node::TraitItem(&hir::TraitItem { kind: hir::TraitItemKind::Fn(_, ref m), .. }) => { if let hir::ItemKind::Trait(.., ref trait_items) = - self.tcx.hir().expect_item(self.tcx.hir().get_parent_item(parent)).kind + self.tcx.hir().expect_item(self.tcx.hir().get_parent_did(parent)).kind { assoc_item_kind = trait_items.iter().find(|ti| ti.id.hir_id() == parent).map(|ti| ti.kind); @@ -2771,7 +2771,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> { Node::ImplItem(&hir::ImplItem { kind: hir::ImplItemKind::Fn(_, body), .. }) => { if let hir::ItemKind::Impl(hir::Impl { ref self_ty, ref items, .. }) = - self.tcx.hir().expect_item(self.tcx.hir().get_parent_item(parent)).kind + self.tcx.hir().expect_item(self.tcx.hir().get_parent_did(parent)).kind { impl_self = Some(self_ty); assoc_item_kind = diff --git a/compiler/rustc_ty_utils/src/ty.rs b/compiler/rustc_ty_utils/src/ty.rs index af3706f886e9c..711a6f2fbebdd 100644 --- a/compiler/rustc_ty_utils/src/ty.rs +++ b/compiler/rustc_ty_utils/src/ty.rs @@ -123,7 +123,7 @@ fn associated_item(tcx: TyCtxt<'_>, def_id: DefId) -> ty::AssocItem { let id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); let parent_id = tcx.hir().get_parent_item(id); let parent_def_id = tcx.hir().local_def_id(parent_id); - let parent_item = tcx.hir().expect_item(parent_id); + let parent_item = tcx.hir().expect_item(parent_def_id); match parent_item.kind { hir::ItemKind::Impl(ref impl_) => { if let Some(impl_item_ref) = @@ -158,8 +158,7 @@ fn associated_item(tcx: TyCtxt<'_>, def_id: DefId) -> ty::AssocItem { } fn impl_defaultness(tcx: TyCtxt<'_>, def_id: DefId) -> hir::Defaultness { - let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); - let item = tcx.hir().expect_item(hir_id); + let item = tcx.hir().expect_item(def_id.expect_local()); if let hir::ItemKind::Impl(impl_) = &item.kind { impl_.defaultness } else { @@ -168,8 +167,7 @@ fn impl_defaultness(tcx: TyCtxt<'_>, def_id: DefId) -> hir::Defaultness { } fn impl_constness(tcx: TyCtxt<'_>, def_id: DefId) -> hir::Constness { - let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); - let item = tcx.hir().expect_item(hir_id); + let item = tcx.hir().expect_item(def_id.expect_local()); if let hir::ItemKind::Impl(impl_) = &item.kind { impl_.constness } else { @@ -202,8 +200,7 @@ fn adt_sized_constraint(tcx: TyCtxt<'_>, def_id: DefId) -> ty::AdtSizedConstrain } fn associated_item_def_ids(tcx: TyCtxt<'_>, def_id: DefId) -> &[DefId] { - let id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); - let item = tcx.hir().expect_item(id); + let item = tcx.hir().expect_item(def_id.expect_local()); match item.kind { hir::ItemKind::Trait(.., ref trait_item_refs) => tcx.arena.alloc_from_iter( trait_item_refs.iter().map(|trait_item_ref| trait_item_ref.id.def_id.to_def_id()), diff --git a/compiler/rustc_typeck/src/check/check.rs b/compiler/rustc_typeck/src/check/check.rs index bb1d9744e66fe..2061f955d968f 100644 --- a/compiler/rustc_typeck/src/check/check.rs +++ b/compiler/rustc_typeck/src/check/check.rs @@ -458,7 +458,7 @@ pub(super) fn check_opaque_for_inheriting_lifetimes( def_id: LocalDefId, span: Span, ) { - let item = tcx.hir().expect_item(tcx.hir().local_def_id_to_hir_id(def_id)); + let item = tcx.hir().expect_item(def_id); debug!(?item, ?span); struct FoundParentLifetime; diff --git a/compiler/rustc_typeck/src/check/coercion.rs b/compiler/rustc_typeck/src/check/coercion.rs index 77f7cccc04ba4..9912d4b39586c 100644 --- a/compiler/rustc_typeck/src/check/coercion.rs +++ b/compiler/rustc_typeck/src/check/coercion.rs @@ -1637,11 +1637,10 @@ impl<'tcx, 'exprs, E: AsCoercionSite> CoerceMany<'tcx, 'exprs, E> { let ty = >::ast_ty_to_ty(fcx, ty); // Get the `impl Trait`'s `DefId`. if let ty::Opaque(def_id, _) = ty.kind() { - let hir_id = fcx.tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); // Get the `impl Trait`'s `Item` so that we can get its trait bounds and // get the `Trait`'s `DefId`. if let hir::ItemKind::OpaqueTy(hir::OpaqueTy { bounds, .. }) = - fcx.tcx.hir().expect_item(hir_id).kind + fcx.tcx.hir().expect_item(def_id.expect_local()).kind { // Are of this `impl Trait`'s traits object safe? is_object_safe = bounds.iter().all(|bound| { diff --git a/compiler/rustc_typeck/src/check/compare_method.rs b/compiler/rustc_typeck/src/check/compare_method.rs index 4d4662f73a955..a237ba5f2e880 100644 --- a/compiler/rustc_typeck/src/check/compare_method.rs +++ b/compiler/rustc_typeck/src/check/compare_method.rs @@ -322,9 +322,7 @@ fn compare_predicate_entailment<'tcx>( // When the `impl` receiver is an arbitrary self type, like `self: Box`, the // span points only at the type `Box, but we want to cover the whole // argument pattern and type. - let impl_m_hir_id = - tcx.hir().local_def_id_to_hir_id(impl_m.def_id.expect_local()); - let span = match tcx.hir().expect_impl_item(impl_m_hir_id).kind { + let span = match tcx.hir().expect_impl_item(impl_m.def_id.expect_local()).kind { ImplItemKind::Fn(ref sig, body) => tcx .hir() .body_param_names(body) @@ -346,9 +344,7 @@ fn compare_predicate_entailment<'tcx>( if trait_sig.inputs().len() == *i { // Suggestion to change output type. We do not suggest in `async` functions // to avoid complex logic or incorrect output. - let impl_m_hir_id = - tcx.hir().local_def_id_to_hir_id(impl_m.def_id.expect_local()); - match tcx.hir().expect_impl_item(impl_m_hir_id).kind { + match tcx.hir().expect_impl_item(impl_m.def_id.expect_local()).kind { ImplItemKind::Fn(ref sig, _) if sig.header.asyncness == hir::IsAsync::NotAsync => { @@ -467,22 +463,19 @@ fn extract_spans_for_error_reporting<'a, 'tcx>( trait_m: &ty::AssocItem, ) -> (Span, Option) { let tcx = infcx.tcx; - let impl_m_hir_id = tcx.hir().local_def_id_to_hir_id(impl_m.def_id.expect_local()); - let mut impl_args = match tcx.hir().expect_impl_item(impl_m_hir_id).kind { + let mut impl_args = match tcx.hir().expect_impl_item(impl_m.def_id.expect_local()).kind { ImplItemKind::Fn(ref sig, _) => { sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())) } _ => bug!("{:?} is not a method", impl_m), }; - let trait_args = trait_m.def_id.as_local().map(|def_id| { - let trait_m_hir_id = tcx.hir().local_def_id_to_hir_id(def_id); - match tcx.hir().expect_trait_item(trait_m_hir_id).kind { + let trait_args = + trait_m.def_id.as_local().map(|def_id| match tcx.hir().expect_trait_item(def_id).kind { TraitItemKind::Fn(ref sig, _) => { sig.decl.inputs.iter().map(|t| t.span).chain(iter::once(sig.decl.output.span())) } _ => bug!("{:?} is not a TraitItemKind::Fn", trait_m), - } - }); + }); match *terr { TypeError::ArgumentMutability(i) => { @@ -600,8 +593,7 @@ fn compare_number_of_generics<'tcx>( err_occurred = true; let (trait_spans, impl_trait_spans) = if let Some(def_id) = trait_.def_id.as_local() { - let trait_hir_id = tcx.hir().local_def_id_to_hir_id(def_id); - let trait_item = tcx.hir().expect_trait_item(trait_hir_id); + let trait_item = tcx.hir().expect_trait_item(def_id); if trait_item.generics.params.is_empty() { (Some(vec![trait_item.generics.span]), vec![]) } else { @@ -622,8 +614,7 @@ fn compare_number_of_generics<'tcx>( (trait_span.map(|s| vec![s]), vec![]) }; - let impl_hir_id = tcx.hir().local_def_id_to_hir_id(impl_.def_id.expect_local()); - let impl_item = tcx.hir().expect_impl_item(impl_hir_id); + let impl_item = tcx.hir().expect_impl_item(impl_.def_id.expect_local()); let impl_item_impl_trait_spans: Vec = impl_item .generics .params @@ -711,8 +702,7 @@ fn compare_number_of_method_arguments<'tcx>( let impl_number_args = impl_m_fty.inputs().skip_binder().len(); if trait_number_args != impl_number_args { let trait_span = if let Some(def_id) = trait_m.def_id.as_local() { - let trait_id = tcx.hir().local_def_id_to_hir_id(def_id); - match tcx.hir().expect_trait_item(trait_id).kind { + match tcx.hir().expect_trait_item(def_id).kind { TraitItemKind::Fn(ref trait_m_sig, _) => { let pos = if trait_number_args > 0 { trait_number_args - 1 } else { 0 }; if let Some(arg) = trait_m_sig.decl.inputs.get(pos) { @@ -730,8 +720,7 @@ fn compare_number_of_method_arguments<'tcx>( } else { trait_item_span }; - let impl_m_hir_id = tcx.hir().local_def_id_to_hir_id(impl_m.def_id.expect_local()); - let impl_span = match tcx.hir().expect_impl_item(impl_m_hir_id).kind { + let impl_span = match tcx.hir().expect_impl_item(impl_m.def_id.expect_local()).kind { ImplItemKind::Fn(ref impl_m_sig, _) => { let pos = if impl_number_args > 0 { impl_number_args - 1 } else { 0 }; if let Some(arg) = impl_m_sig.decl.inputs.get(pos) { @@ -1055,7 +1044,7 @@ crate fn compare_const_impl<'tcx>( ); // Locate the Span containing just the type of the offending impl - match tcx.hir().expect_impl_item(impl_c_hir_id).kind { + match tcx.hir().expect_impl_item(impl_c.def_id.expect_local()).kind { ImplItemKind::Const(ref ty, _) => cause.make_mut().span = ty.span, _ => bug!("{:?} is not a impl const", impl_c), } @@ -1068,11 +1057,9 @@ crate fn compare_const_impl<'tcx>( trait_c.ident ); - let trait_c_hir_id = - trait_c.def_id.as_local().map(|def_id| tcx.hir().local_def_id_to_hir_id(def_id)); - let trait_c_span = trait_c_hir_id.map(|trait_c_hir_id| { + let trait_c_span = trait_c.def_id.as_local().map(|trait_c_def_id| { // Add a label to the Span containing just the type of the const - match tcx.hir().expect_trait_item(trait_c_hir_id).kind { + match tcx.hir().expect_trait_item(trait_c_def_id).kind { TraitItemKind::Const(ref ty, _) => ty.span, _ => bug!("{:?} is not a trait const", trait_c), } diff --git a/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs b/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs index 142a0a8fc2501..43156a1041cfc 100644 --- a/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs +++ b/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs @@ -1097,12 +1097,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { (_, _) => return None, }; - let last_hir_id = self.tcx.hir().local_def_id_to_hir_id(last_local_id); - let exp_hir_id = self.tcx.hir().local_def_id_to_hir_id(exp_local_id); - match ( - &self.tcx.hir().expect_item(last_hir_id).kind, - &self.tcx.hir().expect_item(exp_hir_id).kind, + &self.tcx.hir().expect_item(last_local_id).kind, + &self.tcx.hir().expect_item(exp_local_id).kind, ) { ( hir::ItemKind::OpaqueTy(hir::OpaqueTy { bounds: last_bounds, .. }), diff --git a/compiler/rustc_typeck/src/check/method/prelude2021.rs b/compiler/rustc_typeck/src/check/method/prelude2021.rs index 5c8056b244242..bc2859719e8eb 100644 --- a/compiler/rustc_typeck/src/check/method/prelude2021.rs +++ b/compiler/rustc_typeck/src/check/method/prelude2021.rs @@ -345,10 +345,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let import_items: Vec<_> = applicable_trait .import_ids .iter() - .map(|&import_id| { - let hir_id = self.tcx.hir().local_def_id_to_hir_id(import_id); - self.tcx.hir().expect_item(hir_id) - }) + .map(|&import_id| self.tcx.hir().expect_item(import_id)) .collect(); // Find an identifier with which this trait was imported (note that `_` doesn't count). diff --git a/compiler/rustc_typeck/src/check/wfcheck.rs b/compiler/rustc_typeck/src/check/wfcheck.rs index 0050ac99cb19a..3c9747fcede21 100644 --- a/compiler/rustc_typeck/src/check/wfcheck.rs +++ b/compiler/rustc_typeck/src/check/wfcheck.rs @@ -84,8 +84,7 @@ impl<'tcx> CheckWfFcxBuilder<'tcx> { /// the types first. #[instrument(skip(tcx), level = "debug")] pub fn check_item_well_formed(tcx: TyCtxt<'_>, def_id: LocalDefId) { - let hir_id = tcx.hir().local_def_id_to_hir_id(def_id); - let item = tcx.hir().expect_item(hir_id); + let item = tcx.hir().expect_item(def_id); debug!( ?item.def_id, @@ -197,7 +196,7 @@ pub fn check_item_well_formed(tcx: TyCtxt<'_>, def_id: LocalDefId) { pub fn check_trait_item(tcx: TyCtxt<'_>, def_id: LocalDefId) { let hir_id = tcx.hir().local_def_id_to_hir_id(def_id); - let trait_item = tcx.hir().expect_trait_item(hir_id); + let trait_item = tcx.hir().expect_trait_item(def_id); let (method_sig, span) = match trait_item.kind { hir::TraitItemKind::Fn(ref sig, _) => (Some(sig), trait_item.span), @@ -207,8 +206,8 @@ pub fn check_trait_item(tcx: TyCtxt<'_>, def_id: LocalDefId) { check_object_unsafe_self_trait_by_name(tcx, trait_item); check_associated_item(tcx, trait_item.def_id, span, method_sig); - let encl_trait_hir_id = tcx.hir().get_parent_item(hir_id); - let encl_trait = tcx.hir().expect_item(encl_trait_hir_id); + let encl_trait_def_id = tcx.hir().get_parent_did(hir_id); + let encl_trait = tcx.hir().expect_item(encl_trait_def_id); let encl_trait_def_id = encl_trait.def_id.to_def_id(); let fn_lang_item_name = if Some(encl_trait_def_id) == tcx.lang_items().fn_trait() { Some("fn") @@ -680,8 +679,7 @@ fn check_object_unsafe_self_trait_by_name(tcx: TyCtxt<'_>, item: &hir::TraitItem } pub fn check_impl_item(tcx: TyCtxt<'_>, def_id: LocalDefId) { - let hir_id = tcx.hir().local_def_id_to_hir_id(def_id); - let impl_item = tcx.hir().expect_impl_item(hir_id); + let impl_item = tcx.hir().expect_impl_item(def_id); let (method_sig, span) = match impl_item.kind { hir::ImplItemKind::Fn(ref sig, _) => (Some(sig), impl_item.span), diff --git a/compiler/rustc_typeck/src/check_unused.rs b/compiler/rustc_typeck/src/check_unused.rs index 89ce3700aadcd..79ed83d59ed97 100644 --- a/compiler/rustc_typeck/src/check_unused.rs +++ b/compiler/rustc_typeck/src/check_unused.rs @@ -119,13 +119,13 @@ fn unused_crates_lint(tcx: TyCtxt<'_>) { for extern_crate in &crates_to_lint { let def_id = extern_crate.def_id.expect_local(); - let id = tcx.hir().local_def_id_to_hir_id(def_id); - let item = tcx.hir().expect_item(id); + let item = tcx.hir().expect_item(def_id); // If the crate is fully unused, we suggest removing it altogether. // We do this in any edition. if extern_crate.warn_if_unused { if let Some(&span) = unused_extern_crates.get(&def_id) { + let id = tcx.hir().local_def_id_to_hir_id(def_id); tcx.struct_span_lint_hir(lint, id, span, |lint| { // Removal suggestion span needs to include attributes (Issue #54400) let span_with_attrs = tcx @@ -173,6 +173,7 @@ fn unused_crates_lint(tcx: TyCtxt<'_>) { if !tcx.get_attrs(extern_crate.def_id).is_empty() { continue; } + let id = tcx.hir().local_def_id_to_hir_id(def_id); tcx.struct_span_lint_hir(lint, id, extern_crate.span, |lint| { // Otherwise, we can convert it into a `use` of some kind. let base_replacement = match extern_crate.orig_name { diff --git a/compiler/rustc_typeck/src/coherence/builtin.rs b/compiler/rustc_typeck/src/coherence/builtin.rs index 372e83592b9c5..dfb4304ab02c4 100644 --- a/compiler/rustc_typeck/src/coherence/builtin.rs +++ b/compiler/rustc_typeck/src/coherence/builtin.rs @@ -52,8 +52,7 @@ fn visit_implementation_of_drop(tcx: TyCtxt<'_>, impl_did: LocalDefId) { return; } - let impl_hir_id = tcx.hir().local_def_id_to_hir_id(impl_did); - let sp = match tcx.hir().expect_item(impl_hir_id).kind { + let sp = match tcx.hir().expect_item(impl_did).kind { ItemKind::Impl(ref impl_) => impl_.self_ty.span, _ => bug!("expected Drop impl item"), }; @@ -78,7 +77,7 @@ fn visit_implementation_of_copy(tcx: TyCtxt<'_>, impl_did: LocalDefId) { match can_type_implement_copy(tcx, param_env, self_type) { Ok(()) => {} Err(CopyImplementationError::InfrigingFields(fields)) => { - let item = tcx.hir().expect_item(impl_hir_id); + let item = tcx.hir().expect_item(impl_did); let span = if let ItemKind::Impl(hir::Impl { of_trait: Some(ref tr), .. }) = item.kind { tr.path.span } else { @@ -97,7 +96,7 @@ fn visit_implementation_of_copy(tcx: TyCtxt<'_>, impl_did: LocalDefId) { err.emit() } Err(CopyImplementationError::NotAnAdt) => { - let item = tcx.hir().expect_item(impl_hir_id); + let item = tcx.hir().expect_item(impl_did); let span = if let ItemKind::Impl(ref impl_) = item.kind { impl_.self_ty.span } else { span }; @@ -292,8 +291,8 @@ pub fn coerce_unsized_info(tcx: TyCtxt<'tcx>, impl_did: DefId) -> CoerceUnsizedI debug!("compute_coerce_unsized_info(impl_did={:?})", impl_did); // this provider should only get invoked for local def-ids - let impl_hir_id = tcx.hir().local_def_id_to_hir_id(impl_did.expect_local()); - let span = tcx.hir().span(impl_hir_id); + let impl_did = impl_did.expect_local(); + let span = tcx.def_span(impl_did); let coerce_unsized_trait = tcx.require_lang_item(LangItem::CoerceUnsized, Some(span)); @@ -315,6 +314,7 @@ pub fn coerce_unsized_info(tcx: TyCtxt<'tcx>, impl_did: DefId) -> CoerceUnsizedI debug!("visit_implementation_of_coerce_unsized: {:?} -> {:?} (free)", source, target); tcx.infer_ctxt().enter(|infcx| { + let impl_hir_id = tcx.hir().local_def_id_to_hir_id(impl_did); let cause = ObligationCause::misc(span, impl_hir_id); let check_mutbl = |mt_a: ty::TypeAndMut<'tcx>, mt_b: ty::TypeAndMut<'tcx>, @@ -452,13 +452,13 @@ pub fn coerce_unsized_info(tcx: TyCtxt<'tcx>, impl_did: DefId) -> CoerceUnsizedI .emit(); return err_info; } else if diff_fields.len() > 1 { - let item = tcx.hir().expect_item(impl_hir_id); + let item = tcx.hir().expect_item(impl_did); let span = if let ItemKind::Impl(hir::Impl { of_trait: Some(ref t), .. }) = item.kind { t.path.span } else { - tcx.hir().span(impl_hir_id) + tcx.def_span(impl_did) }; struct_span_err!( @@ -530,7 +530,11 @@ pub fn coerce_unsized_info(tcx: TyCtxt<'tcx>, impl_did: DefId) -> CoerceUnsizedI // Finally, resolve all regions. let outlives_env = OutlivesEnvironment::new(param_env); - infcx.resolve_regions_and_report_errors(impl_did, &outlives_env, RegionckMode::default()); + infcx.resolve_regions_and_report_errors( + impl_did.to_def_id(), + &outlives_env, + RegionckMode::default(), + ); CoerceUnsizedInfo { custom_kind: kind } }) diff --git a/compiler/rustc_typeck/src/collect.rs b/compiler/rustc_typeck/src/collect.rs index b9db8a6be5916..9fc7aa51e4b68 100644 --- a/compiler/rustc_typeck/src/collect.rs +++ b/compiler/rustc_typeck/src/collect.rs @@ -431,7 +431,7 @@ impl AstConv<'tcx> for ItemCtxt<'tcx> { match self.node() { hir::Node::Field(_) | hir::Node::Ctor(_) | hir::Node::Variant(_) => { let item = - self.tcx.hir().expect_item(self.tcx.hir().get_parent_item(self.hir_id())); + self.tcx.hir().expect_item(self.tcx.hir().get_parent_did(self.hir_id())); match &item.kind { hir::ItemKind::Enum(_, generics) | hir::ItemKind::Struct(_, generics) @@ -1182,8 +1182,7 @@ fn super_predicates_that_define_assoc_type( } fn trait_def(tcx: TyCtxt<'_>, def_id: DefId) -> ty::TraitDef { - let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); - let item = tcx.hir().expect_item(hir_id); + let item = tcx.hir().expect_item(def_id.expect_local()); let (is_auto, unsafety) = match item.kind { hir::ItemKind::Trait(is_auto, unsafety, ..) => (is_auto == hir::IsAuto::Yes, unsafety), @@ -1878,9 +1877,7 @@ fn fn_sig(tcx: TyCtxt<'_>, def_id: DefId) -> ty::PolyFnSig<'_> { fn impl_trait_ref(tcx: TyCtxt<'_>, def_id: DefId) -> Option> { let icx = ItemCtxt::new(tcx, def_id); - - let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); - match tcx.hir().expect_item(hir_id).kind { + match tcx.hir().expect_item(def_id.expect_local()).kind { hir::ItemKind::Impl(ref impl_) => impl_.of_trait.as_ref().map(|ast_trait_ref| { let selfty = tcx.type_of(def_id); >::instantiate_mono_trait_ref(&icx, ast_trait_ref, selfty) @@ -1890,9 +1887,8 @@ fn impl_trait_ref(tcx: TyCtxt<'_>, def_id: DefId) -> Option> { } fn impl_polarity(tcx: TyCtxt<'_>, def_id: DefId) -> ty::ImplPolarity { - let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); let is_rustc_reservation = tcx.has_attr(def_id, sym::rustc_reservation_impl); - let item = tcx.hir().expect_item(hir_id); + let item = tcx.hir().expect_item(def_id.expect_local()); match &item.kind { hir::ItemKind::Impl(hir::Impl { polarity: hir::ImplPolarity::Negative(span), @@ -3227,7 +3223,7 @@ fn check_target_feature_trait_unsafe(tcx: TyCtxt<'_>, id: LocalDefId, attr_span: let hir_id = tcx.hir().local_def_id_to_hir_id(id); let node = tcx.hir().get(hir_id); if let Node::ImplItem(hir::ImplItem { kind: hir::ImplItemKind::Fn(..), .. }) = node { - let parent_id = tcx.hir().get_parent_item(hir_id); + let parent_id = tcx.hir().get_parent_did(hir_id); let parent_item = tcx.hir().expect_item(parent_id); if let hir::ItemKind::Impl(hir::Impl { of_trait: Some(_), .. }) = parent_item.kind { tcx.sess diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index d4bf93bb40931..ba67030d59fb0 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -359,13 +359,10 @@ crate fn build_impl( } let impl_item = match did.as_local() { - Some(did) => { - let hir_id = tcx.hir().local_def_id_to_hir_id(did); - match &tcx.hir().expect_item(hir_id).kind { - hir::ItemKind::Impl(impl_) => Some(impl_), - _ => panic!("`DefID` passed to `build_impl` is not an `impl"), - } - } + Some(did) => match &tcx.hir().expect_item(did).kind { + hir::ItemKind::Impl(impl_) => Some(impl_), + _ => panic!("`DefID` passed to `build_impl` is not an `impl"), + }, None => None, }; diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 4e1dabd05bb48..9b05716a67bc2 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -950,7 +950,7 @@ impl Clean for hir::ImplItem<'_> { let what_rustc_thinks = Item::from_def_id_and_parts(local_did, Some(self.ident.name), inner, cx); - let parent_item = cx.tcx.hir().expect_item(cx.tcx.hir().get_parent_item(self.hir_id())); + let parent_item = cx.tcx.hir().expect_item(cx.tcx.hir().get_parent_did(self.hir_id())); if let hir::ItemKind::Impl(impl_) = &parent_item.kind { if impl_.of_trait.is_some() { // Trait impl items always inherit the impl's visibility -- @@ -1189,9 +1189,8 @@ fn maybe_expand_private_type_alias(cx: &mut DocContext<'_>, path: &hir::Path<'_> let Res::Def(DefKind::TyAlias, def_id) = path.res else { return None }; // Substitute private type aliases let Some(def_id) = def_id.as_local() else { return None }; - let hir_id = cx.tcx.hir().local_def_id_to_hir_id(def_id); let alias = if !cx.cache.access_levels.is_exported(def_id.to_def_id()) { - &cx.tcx.hir().expect_item(hir_id).kind + &cx.tcx.hir().expect_item(def_id).kind } else { return None; }; diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index 379de080ffd4d..a18bd48d72bc4 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -117,8 +117,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { if let Some(local_def_id) = def_id.as_local() { if self.cx.tcx.has_attr(def_id, sym::macro_export) { if inserted.insert(def_id) { - let hir_id = self.cx.tcx.hir().local_def_id_to_hir_id(local_def_id); - let item = self.cx.tcx.hir().expect_item(hir_id); + let item = self.cx.tcx.hir().expect_item(local_def_id); top_level_module.items.push((item, None)); } } diff --git a/src/test/ui-fulldeps/auxiliary/issue-40001-plugin.rs b/src/test/ui-fulldeps/auxiliary/issue-40001-plugin.rs index 8051c58898e49..de0df0aae82d7 100644 --- a/src/test/ui-fulldeps/auxiliary/issue-40001-plugin.rs +++ b/src/test/ui-fulldeps/auxiliary/issue-40001-plugin.rs @@ -7,8 +7,8 @@ extern crate rustc_hir; extern crate rustc_lint; #[macro_use] extern crate rustc_session; -extern crate rustc_span; extern crate rustc_ast; +extern crate rustc_span; use rustc_ast_pretty::pprust; use rustc_driver::plugin::Registry; @@ -44,7 +44,7 @@ impl<'tcx> LateLintPass<'tcx> for MissingAllowedAttrPass { ) { let item = match cx.tcx.hir().get(id) { Node::Item(item) => item, - _ => cx.tcx.hir().expect_item(cx.tcx.hir().get_parent_item(id)), + _ => cx.tcx.hir().expect_item(cx.tcx.hir().get_parent_item(id).expect_owner()), }; let allowed = |attr| pprust::attribute_to_string(attr).contains("allowed_attr"); diff --git a/src/tools/clippy/clippy_lints/src/derive.rs b/src/tools/clippy/clippy_lints/src/derive.rs index 24ac5917dcb05..94b35ad88af2d 100644 --- a/src/tools/clippy/clippy_lints/src/derive.rs +++ b/src/tools/clippy/clippy_lints/src/derive.rs @@ -3,7 +3,6 @@ use clippy_utils::paths; use clippy_utils::ty::{implements_trait, is_copy}; use clippy_utils::{get_trait_def_id, is_automatically_derived, is_lint_allowed, match_def_path}; use if_chain::if_chain; -use rustc_hir::def_id::DefId; use rustc_hir::intravisit::{walk_expr, walk_fn, walk_item, FnKind, NestedVisitorMap, Visitor}; use rustc_hir::{ BlockCheckMode, BodyId, Expr, ExprKind, FnDecl, HirId, Impl, Item, ItemKind, TraitRef, UnsafeSource, Unsafety, @@ -343,11 +342,6 @@ fn check_unsafe_derive_deserialize<'tcx>( trait_ref: &TraitRef<'_>, ty: Ty<'tcx>, ) { - fn item_from_def_id<'tcx>(cx: &LateContext<'tcx>, def_id: DefId) -> &'tcx Item<'tcx> { - let hir_id = cx.tcx.hir().local_def_id_to_hir_id(def_id.expect_local()); - cx.tcx.hir().expect_item(hir_id) - } - fn has_unsafe<'tcx>(cx: &LateContext<'tcx>, item: &'tcx Item<'_>) -> bool { let mut visitor = UnsafeVisitor { cx, has_unsafe: false }; walk_item(&mut visitor, item); @@ -363,7 +357,7 @@ fn check_unsafe_derive_deserialize<'tcx>( if !is_lint_allowed(cx, UNSAFE_DERIVE_DESERIALIZE, adt_hir_id); if cx.tcx.inherent_impls(def.did) .iter() - .map(|imp_did| item_from_def_id(cx, *imp_did)) + .map(|imp_did| cx.tcx.hir().expect_item(imp_did.expect_local())) .any(|imp| has_unsafe(cx, imp)); then { span_lint_and_help( diff --git a/src/tools/clippy/clippy_lints/src/methods/mod.rs b/src/tools/clippy/clippy_lints/src/methods/mod.rs index 26c29fbb289cb..e46739fea34be 100644 --- a/src/tools/clippy/clippy_lints/src/methods/mod.rs +++ b/src/tools/clippy/clippy_lints/src/methods/mod.rs @@ -1939,7 +1939,7 @@ impl<'tcx> LateLintPass<'tcx> for Methods { return; } let name = impl_item.ident.name.as_str(); - let parent = cx.tcx.hir().get_parent_item(impl_item.hir_id()); + let parent = cx.tcx.hir().get_parent_did(impl_item.hir_id()); let item = cx.tcx.hir().expect_item(parent); let self_ty = cx.tcx.type_of(item.def_id); diff --git a/src/tools/clippy/clippy_lints/src/non_copy_const.rs b/src/tools/clippy/clippy_lints/src/non_copy_const.rs index 2a85a67fa099c..2ea97eb88f783 100644 --- a/src/tools/clippy/clippy_lints/src/non_copy_const.rs +++ b/src/tools/clippy/clippy_lints/src/non_copy_const.rs @@ -279,8 +279,8 @@ impl<'tcx> LateLintPass<'tcx> for NonCopyConst { fn check_impl_item(&mut self, cx: &LateContext<'tcx>, impl_item: &'tcx ImplItem<'_>) { if let ImplItemKind::Const(hir_ty, body_id) = &impl_item.kind { - let item_hir_id = cx.tcx.hir().get_parent_node(impl_item.hir_id()); - let item = cx.tcx.hir().expect_item(item_hir_id); + let item_def_id = cx.tcx.hir().get_parent_did(impl_item.hir_id()); + let item = cx.tcx.hir().expect_item(item_def_id); match &item.kind { ItemKind::Impl(Impl { diff --git a/src/tools/clippy/clippy_lints/src/self_named_constructors.rs b/src/tools/clippy/clippy_lints/src/self_named_constructors.rs index 4ba5e1a0f5357..9390378d789cd 100644 --- a/src/tools/clippy/clippy_lints/src/self_named_constructors.rs +++ b/src/tools/clippy/clippy_lints/src/self_named_constructors.rs @@ -50,7 +50,7 @@ impl<'tcx> LateLintPass<'tcx> for SelfNamedConstructors { _ => return, } - let parent = cx.tcx.hir().get_parent_item(impl_item.hir_id()); + let parent = cx.tcx.hir().get_parent_did(impl_item.hir_id()); let item = cx.tcx.hir().expect_item(parent); let self_ty = cx.tcx.type_of(item.def_id); let ret_ty = return_ty(cx, impl_item.hir_id()); diff --git a/src/tools/clippy/clippy_lints/src/unused_self.rs b/src/tools/clippy/clippy_lints/src/unused_self.rs index e7e249c79a2fa..c961f99566795 100644 --- a/src/tools/clippy/clippy_lints/src/unused_self.rs +++ b/src/tools/clippy/clippy_lints/src/unused_self.rs @@ -41,7 +41,7 @@ impl<'tcx> LateLintPass<'tcx> for UnusedSelf { if impl_item.span.from_expansion() { return; } - let parent = cx.tcx.hir().get_parent_item(impl_item.hir_id()); + let parent = cx.tcx.hir().get_parent_did(impl_item.hir_id()); let parent_item = cx.tcx.hir().expect_item(parent); let assoc_item = cx.tcx.associated_item(impl_item.def_id); if_chain! {