- hir::ItemKind::ExternCrate(..) => Target::ExternCrate,
- hir::ItemKind::Use(..) => Target::Use,
- hir::ItemKind::Static(..) => Target::Static,
- hir::ItemKind::Const(..) => Target::Const,
- hir::ItemKind::Fn(..) => Target::Fn,
- hir::ItemKind::Mod(..) => Target::Mod,
- hir::ItemKind::ForeignMod(..) => Target::ForeignMod,
- hir::ItemKind::GlobalAsm(..) => Target::GlobalAsm,
- hir::ItemKind::TyAlias(..) => Target::TyAlias,
- hir::ItemKind::OpaqueTy(..) => Target::OpaqueTy,
- hir::ItemKind::Enum(..) => Target::Enum,
- hir::ItemKind::Struct(..) => Target::Struct,
- hir::ItemKind::Union(..) => Target::Union,
- hir::ItemKind::Trait(..) => Target::Trait,
- hir::ItemKind::TraitAlias(..) => Target::TraitAlias,
- hir::ItemKind::Impl(..) => Target::Impl,
+ ItemKind::ExternCrate(..) => Target::ExternCrate,
+ ItemKind::Use(..) => Target::Use,
+ ItemKind::Static(..) => Target::Static,
+ ItemKind::Const(..) => Target::Const,
+ ItemKind::Fn(..) => Target::Fn,
+ ItemKind::Mod(..) => Target::Mod,
+ ItemKind::ForeignMod(..) => Target::ForeignMod,
+ ItemKind::GlobalAsm(..) => Target::GlobalAsm,
+ ItemKind::TyAlias(..) => Target::TyAlias,
+ ItemKind::OpaqueTy(..) => Target::OpaqueTy,
+ ItemKind::Enum(..) => Target::Enum,
+ ItemKind::Struct(..) => Target::Struct,
+ ItemKind::Union(..) => Target::Union,
+ ItemKind::Trait(..) => Target::Trait,
+ ItemKind::TraitAlias(..) => Target::TraitAlias,
+ ItemKind::Impl(..) => Target::Impl,
+ }
+ }
+
+ fn from_trait_item(trait_item: &TraitItem) -> Target {
+ match trait_item.kind {
+ TraitItemKind::Const(..) => Target::AssocConst,
+ TraitItemKind::Method(_, hir::TraitMethod::Required(_)) => {
+ Target::Method(MethodKind::Trait { body: false })
+ }
+ TraitItemKind::Method(_, hir::TraitMethod::Provided(_)) => {
+ Target::Method(MethodKind::Trait { body: true })
+ }
+ TraitItemKind::Type(..) => Target::AssocTy,
+ }
+ }
+
+ fn from_foreign_item(foreign_item: &hir::ForeignItem) -> Target {
+ match foreign_item.kind {
+ hir::ForeignItemKind::Fn(..) => Target::ForeignFn,
+ hir::ForeignItemKind::Static(..) => Target::ForeignStatic,
+ hir::ForeignItemKind::Type => Target::ForeignTy,
+ }
+ }
+
+ fn from_impl_item<'tcx>(tcx: TyCtxt<'tcx>, impl_item: &hir::ImplItem) -> Target {
+ match impl_item.kind {
+ hir::ImplItemKind::Const(..) => Target::AssocConst,
+ hir::ImplItemKind::Method(..) => {
+ let parent_hir_id = tcx.hir().get_parent_item(impl_item.hir_id);
+ let containing_item = tcx.hir().expect_item(parent_hir_id);
+ let containing_impl_is_for_trait = match &containing_item.kind {
+ hir::ItemKind::Impl(_, _, _, _, tr, _, _) => tr.is_some(),
+ _ => bug!("parent of an ImplItem must be an Impl"),
+ };
+ if containing_impl_is_for_trait {
+ Target::Method(MethodKind::Trait { body: true })
+ } else {
+ Target::Method(MethodKind::Inherent)
+ }
+ }
+ hir::ImplItemKind::TyAlias(..) | hir::ImplItemKind::OpaqueTy(..) => Target::AssocTy,