rustc_hir/
target_impls.rs1use rustc_attr_ir::target::{GenericParamKind, 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 { default, .. } => Target::GenericParam {
22 kind: GenericParamKind::Type,
23 has_default: default.is_some(),
24 },
25 hir::GenericParamKind::Lifetime { .. } => {
26 Target::GenericParam { kind: GenericParamKind::Lifetime, has_default: false }
27 }
28 hir::GenericParamKind::Const { default, .. } => Target::GenericParam {
29 kind: GenericParamKind::Const,
30 has_default: default.is_some(),
31 },
32 }
33 }
34}
35
36impl From<&hir::TraitItem<'_>> for Target {
37 fn from(trait_item: &hir::TraitItem<'_>) -> Target {
38 match trait_item.kind {
39 TraitItemKind::Const(..) => Target::AssocConst,
40 TraitItemKind::Fn(_, hir::TraitFn::Required(_)) => {
41 Target::Method(MethodKind::Trait { body: false })
42 }
43 TraitItemKind::Fn(_, hir::TraitFn::Provided(_)) => {
44 Target::Method(MethodKind::Trait { body: true })
45 }
46 TraitItemKind::Type(..) => Target::AssocTy,
47 }
48 }
49}
50
51impl From<DefKind> for Target {
52 fn from(def_kind: DefKind) -> Target {
53 match def_kind {
54 DefKind::ExternCrate => Target::ExternCrate,
55 DefKind::Use => Target::Use,
56 DefKind::Static { .. } => Target::Static,
57 DefKind::Const { .. } => Target::Const,
58 DefKind::Fn => Target::Fn,
59 DefKind::Macro(..) => Target::MacroDef,
60 DefKind::Mod => Target::Mod,
61 DefKind::ForeignMod => Target::ForeignMod,
62 DefKind::GlobalAsm => Target::GlobalAsm,
63 DefKind::TyAlias => Target::TyAlias,
64 DefKind::Enum => Target::Enum,
65 DefKind::Struct => Target::Struct,
66 DefKind::Union => Target::Union,
67 DefKind::Trait => Target::Trait,
68 DefKind::TraitAlias => Target::TraitAlias,
69 DefKind::Impl { of_trait } => Target::Impl { of_trait },
70 _ => { ::core::panicking::panic_fmt(format_args!("impossible case reached")); }panic!("impossible case reached"),
71 }
72 }
73}
74
75impl From<&hir::Item<'_>> for Target {
76 fn from(item: &hir::Item<'_>) -> Target {
77 match item.kind {
78 ItemKind::ExternCrate(..) => Target::ExternCrate,
79 ItemKind::Use(..) => Target::Use,
80 ItemKind::Static { .. } => Target::Static,
81 ItemKind::Const(..) => Target::Const,
82 ItemKind::Fn { .. } => Target::Fn,
83 ItemKind::Macro(..) => Target::MacroDef,
84 ItemKind::Mod(..) => Target::Mod,
85 ItemKind::ForeignMod { .. } => Target::ForeignMod,
86 ItemKind::GlobalAsm { .. } => Target::GlobalAsm,
87 ItemKind::TyAlias(..) => Target::TyAlias,
88 ItemKind::Enum(..) => Target::Enum,
89 ItemKind::Struct(..) => Target::Struct,
90 ItemKind::Union(..) => Target::Union,
91 ItemKind::Trait { .. } => Target::Trait,
92 ItemKind::TraitAlias(..) => Target::TraitAlias,
93 ItemKind::Impl(imp_) => Target::Impl { of_trait: imp_.of_trait.is_some() },
94 }
95 }
96}