Use tcx.local_parent() more often

This commit is contained in:
Daria Sukhonina
2026-03-27 15:33:56 +03:00
parent 2bb9d70b1e
commit 62ec331a84
5 changed files with 7 additions and 9 deletions
@@ -107,7 +107,7 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Gen
);
return ty::GenericPredicates {
parent: Some(tcx.parent(def_id.to_def_id())),
parent: Some(tcx.local_parent(def_id).to_def_id()),
predicates: tcx.arena.alloc_from_iter(predicates),
};
}
+2 -2
View File
@@ -380,8 +380,8 @@ fn mark_live_symbols(&mut self) -> <MarkSymbolVisitor<'tcx> as Visitor<'tcx>>::R
/// for discussion).
fn should_ignore_impl_item(&mut self, impl_item: &hir::ImplItem<'_>) -> bool {
if let hir::ImplItemImplKind::Trait { .. } = impl_item.impl_kind
&& let impl_of = self.tcx.parent(impl_item.owner_id.to_def_id())
&& self.tcx.is_automatically_derived(impl_of)
&& let impl_of = self.tcx.local_parent(impl_item.owner_id.def_id)
&& self.tcx.is_automatically_derived(impl_of.to_def_id())
&& let trait_ref = self.tcx.impl_trait_ref(impl_of).instantiate_identity()
&& find_attr!(self.tcx, trait_ref.def_id, RustcTrivialFieldReads)
{
@@ -516,9 +516,8 @@ pub fn emit_inference_failure_err_with_type_hint(
let Some(InferSource { span, kind }) = local_visitor.infer_source else {
let silence = if let DefKind::AssocFn = self.tcx.def_kind(body_def_id)
&& let parent = self.tcx.parent(body_def_id.into())
&& self.tcx.is_automatically_derived(parent)
&& let Some(parent) = parent.as_local()
&& let parent = self.tcx.local_parent(body_def_id)
&& self.tcx.is_automatically_derived(parent.to_def_id())
&& let hir::Node::Item(item) = self.tcx.hir_node_by_def_id(parent)
&& let hir::ItemKind::Impl(imp) = item.kind
&& let hir::TyKind::Path(hir::QPath::Resolved(_, path)) = imp.self_ty.kind
@@ -1966,10 +1966,9 @@ pub(super) fn suggest_impl_trait(
let mut span = obligation.cause.span;
if let DefKind::Closure = self.tcx.def_kind(obligation.cause.body_id)
&& let parent = self.tcx.parent(obligation.cause.body_id.into())
&& let parent = self.tcx.local_parent(obligation.cause.body_id)
&& let DefKind::Fn | DefKind::AssocFn = self.tcx.def_kind(parent)
&& self.tcx.asyncness(parent).is_async()
&& let Some(parent) = parent.as_local()
&& let Node::Item(hir::Item { kind: hir::ItemKind::Fn { sig: fn_sig, .. }, .. })
| Node::ImplItem(hir::ImplItem { kind: hir::ImplItemKind::Fn(fn_sig, _), .. })
| Node::TraitItem(hir::TraitItem {
@@ -332,7 +332,7 @@ fn check_body(&mut self, cx: &LateContext<'tcx>, body: &Body<'tcx>) {
if let ImplItemImplKind::Trait { trait_item_def_id, .. } = impl_kind
&& let Ok(trait_item_id) = trait_item_def_id
{
let impl_id = cx.tcx.parent(owner_id.into());
let impl_id = cx.tcx.local_parent(owner_id.def_id);
let trait_ref = cx.tcx.impl_trait_ref(impl_id).instantiate_identity();
(
trait_item_id,