use rustc_errors::{struct_span_err, Applicability, DiagnosticBuilder, ErrorReported};
use rustc_hir::def_id::DefId;
use rustc_hir::intravisit::{walk_ty, ErasedMap, NestedVisitorMap, Visitor};
-use rustc_hir::{
- self as hir, GenericBound, ImplItem, Item, ItemKind, Lifetime, LifetimeName, Node, TraitItem,
- TyKind,
-};
+use rustc_hir::{self as hir, GenericBound, Item, ItemKind, Lifetime, LifetimeName, Node, TyKind};
use rustc_middle::ty::{self, AssocItemContainer, RegionKind, Ty, TypeFoldable, TypeVisitor};
use rustc_span::symbol::Ident;
use rustc_span::{MultiSpan, Span};
}
match fn_return.kind {
TyKind::OpaqueDef(item_id, _) => {
- let item = tcx.hir().item(item_id.id);
+ let item = tcx.hir().item(item_id);
let opaque = if let ItemKind::OpaqueTy(opaque) = &item.kind {
opaque
} else {
);
}
}
- TyKind::TraitObject(_, lt) => match lt.name {
+ TyKind::TraitObject(_, lt, _) => match lt.name {
LifetimeName::ImplicitObjectLifetimeDefault => {
err.span_suggestion_verbose(
fn_return.span.shrink_to_hi(),
) -> Option<(Ident, &'tcx hir::Ty<'tcx>)> {
let tcx = self.tcx();
match tcx.hir().get_if_local(def_id) {
- Some(Node::ImplItem(ImplItem { ident, hir_id, .. })) => {
- match tcx.hir().find(tcx.hir().get_parent_item(*hir_id)) {
+ Some(Node::ImplItem(impl_item)) => {
+ match tcx.hir().find(tcx.hir().get_parent_item(impl_item.hir_id())) {
Some(Node::Item(Item {
kind: ItemKind::Impl(hir::Impl { self_ty, .. }),
..
- })) => Some((*ident, self_ty)),
+ })) => Some((impl_item.ident, self_ty)),
_ => None,
}
}
- Some(Node::TraitItem(TraitItem { ident, hir_id, .. })) => {
- let parent_id = tcx.hir().get_parent_item(*hir_id);
+ Some(Node::TraitItem(trait_item)) => {
+ let parent_id = tcx.hir().get_parent_item(trait_item.hir_id());
match tcx.hir().find(parent_id) {
Some(Node::Item(Item { kind: ItemKind::Trait(..), .. })) => {
// The method being called is defined in the `trait`, but the `'static`
.hir()
.trait_impls(trait_did)
.iter()
- .filter_map(|impl_node| {
- let impl_did = tcx.hir().local_def_id(*impl_node);
+ .filter_map(|&impl_did| {
match tcx.hir().get_if_local(impl_did.to_def_id()) {
Some(Node::Item(Item {
kind: ItemKind::Impl(hir::Impl { self_ty, .. }),
})
.next()
{
- Some(self_ty) => Some((*ident, self_ty)),
+ Some(self_ty) => Some((trait_item.ident, self_ty)),
_ => None,
}
}
if let TyKind::TraitObject(
poly_trait_refs,
Lifetime { name: LifetimeName::ImplicitObjectLifetimeDefault, .. },
+ _,
) = t.kind
{
for ptr in poly_trait_refs {