rustc_hir/
target_impls.rs1use rustc_attr_ir::target::{AssocCtxt, MethodKind, Target};
4
5use crate::def::DefKind;
6use crate::{self as hir, ItemKind, TraitItemKind};
7
8impl From<&hir::ForeignItem<'_>> for Target {
9 fn from(foreign_item: &hir::ForeignItem<'_>) -> Target {
10 match foreign_item.kind {
11 hir::ForeignItemKind::Fn(..) => Target::ForeignFn,
12 hir::ForeignItemKind::Static(..) => Target::ForeignStatic,
13 hir::ForeignItemKind::Type => Target::ForeignTy,
14 }
15 }
16}
17
18impl From<&hir::GenericParam<'_>> for Target {
19 fn from(generic_param: &hir::GenericParam<'_>) -> Target {
20 match generic_param.kind {
21 hir::GenericParamKind::Type { .. } => Target::TypeParam,
22 hir::GenericParamKind::Lifetime { .. } => Target::LifetimeParam,
23 hir::GenericParamKind::Const { .. } => Target::ConstParam,
24 }
25 }
26}
27
28impl From<&hir::TraitItem<'_>> for Target {
29 fn from(trait_item: &hir::TraitItem<'_>) -> Target {
30 match trait_item.kind {
31 TraitItemKind::Const(..) => Target::AssocConst(AssocCtxt::Trait),
32 TraitItemKind::Fn(_, hir::TraitFn::Required(_)) => {
33 Target::Method(MethodKind::Trait { body: false })
34 }
35 TraitItemKind::Fn(_, hir::TraitFn::Provided(_)) => {
36 Target::Method(MethodKind::Trait { body: true })
37 }
38 TraitItemKind::Type(..) => Target::AssocTy(AssocCtxt::Trait),
39 }
40 }
41}
42
43impl From<DefKind> for Target {
44 fn from(def_kind: DefKind) -> Target {
45 match def_kind {
46 DefKind::ExternCrate => Target::ExternCrate,
47 DefKind::Use => Target::Use,
48 DefKind::Static { .. } => Target::Static,
49 DefKind::Const => Target::Const,
50 DefKind::Fn => Target::Fn,
51 DefKind::Macro(..) => Target::MacroDef,
52 DefKind::Mod => Target::Mod,
53 DefKind::ForeignMod => Target::ForeignMod,
54 DefKind::GlobalAsm => Target::GlobalAsm,
55 DefKind::TyAlias => Target::TyAlias,
56 DefKind::Enum => Target::Enum,
57 DefKind::Struct => Target::Struct,
58 DefKind::Union => Target::Union,
59 DefKind::Trait => Target::Trait,
60 DefKind::TraitAlias => Target::TraitAlias,
61 DefKind::Impl { of_trait } => Target::Impl { of_trait },
62 _ => { ::core::panicking::panic_fmt(format_args!("impossible case reached")); }panic!("impossible case reached"),
63 }
64 }
65}
66
67impl From<&hir::Item<'_>> for Target {
68 fn from(item: &hir::Item<'_>) -> Target {
69 match item.kind {
70 ItemKind::ExternCrate(..) => Target::ExternCrate,
71 ItemKind::Use(..) => Target::Use,
72 ItemKind::Static { .. } => Target::Static,
73 ItemKind::Const(..) => Target::Const,
74 ItemKind::Fn { .. } => Target::Fn,
75 ItemKind::Macro(..) => Target::MacroDef,
76 ItemKind::Mod(..) => Target::Mod,
77 ItemKind::ForeignMod { .. } => Target::ForeignMod,
78 ItemKind::GlobalAsm { .. } => Target::GlobalAsm,
79 ItemKind::TyAlias(..) => Target::TyAlias,
80 ItemKind::Enum(..) => Target::Enum,
81 ItemKind::Struct(..) => Target::Struct,
82 ItemKind::Union(..) => Target::Union,
83 ItemKind::Trait { .. } => Target::Trait,
84 ItemKind::TraitAlias(..) => Target::TraitAlias,
85 ItemKind::Impl(imp_) => Target::Impl { of_trait: imp_.of_trait.is_some() },
86 ItemKind::TestBinderConstraints { .. } => Target::MacroCall,
87 }
88 }
89}