Skip to main content

rustc_hir/
target_impls.rs

1//! Implements conversions from HIR types to Target.
2
3use 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}