1use std::fmt::{self, Display};
4
5use rustc_ast::visit::AssocCtxt;
6use rustc_ast::{AssocItemKind, ForeignItemKind, ast};
7use rustc_macros::StableHash;
8
9use crate::def::DefKind;
10use crate::{self as hir, ItemKind, TraitItemKind};
11
12#[derive(#[automatically_derived]
impl ::core::marker::Copy for GenericParamKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for GenericParamKind {
#[inline]
fn clone(&self) -> GenericParamKind { *self }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for GenericParamKind {
#[inline]
fn eq(&self, other: &GenericParamKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::fmt::Debug for GenericParamKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
GenericParamKind::Type => "Type",
GenericParamKind::Lifetime => "Lifetime",
GenericParamKind::Const => "Const",
})
}
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for GenericParamKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {}
}Eq, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for
GenericParamKind {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
GenericParamKind::Type => {}
GenericParamKind::Lifetime => {}
GenericParamKind::Const => {}
}
}
}
};StableHash)]
13pub enum GenericParamKind {
14 Type,
15 Lifetime,
16 Const,
17}
18
19#[derive(#[automatically_derived]
impl ::core::marker::Copy for MethodKind { }Copy, #[automatically_derived]
impl ::core::clone::Clone for MethodKind {
#[inline]
fn clone(&self) -> MethodKind {
let _: ::core::clone::AssertParamIsClone<bool>;
*self
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for MethodKind {
#[inline]
fn eq(&self, other: &MethodKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(MethodKind::Trait { body: __self_0 }, MethodKind::Trait {
body: __arg1_0 }) => __self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::fmt::Debug for MethodKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
MethodKind::Trait { body: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f, "Trait",
"body", &__self_0),
MethodKind::TraitImpl =>
::core::fmt::Formatter::write_str(f, "TraitImpl"),
MethodKind::Inherent =>
::core::fmt::Formatter::write_str(f, "Inherent"),
}
}
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for MethodKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for MethodKind {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
MethodKind::Trait { body: ref __binding_0 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
MethodKind::TraitImpl => {}
MethodKind::Inherent => {}
}
}
}
};StableHash)]
20pub enum MethodKind {
21 Trait {
23 body: bool,
25 },
26 TraitImpl,
28 Inherent,
30}
31
32#[derive(#[automatically_derived]
impl ::core::marker::Copy for Target { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Target {
#[inline]
fn clone(&self) -> Target {
let _: ::core::clone::AssertParamIsClone<bool>;
let _: ::core::clone::AssertParamIsClone<MethodKind>;
let _: ::core::clone::AssertParamIsClone<GenericParamKind>;
*self
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for Target {
#[inline]
fn eq(&self, other: &Target) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(Target::Impl { of_trait: __self_0 }, Target::Impl {
of_trait: __arg1_0 }) => __self_0 == __arg1_0,
(Target::Method(__self_0), Target::Method(__arg1_0)) =>
__self_0 == __arg1_0,
(Target::GenericParam { kind: __self_0, has_default: __self_1
}, Target::GenericParam {
kind: __arg1_0, has_default: __arg1_1 }) =>
__self_1 == __arg1_1 && __self_0 == __arg1_0,
(Target::Delegation { mac: __self_0 }, Target::Delegation {
mac: __arg1_0 }) => __self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::fmt::Debug for Target {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
Target::ExternCrate =>
::core::fmt::Formatter::write_str(f, "ExternCrate"),
Target::Use => ::core::fmt::Formatter::write_str(f, "Use"),
Target::Static => ::core::fmt::Formatter::write_str(f, "Static"),
Target::Const => ::core::fmt::Formatter::write_str(f, "Const"),
Target::Fn => ::core::fmt::Formatter::write_str(f, "Fn"),
Target::Closure =>
::core::fmt::Formatter::write_str(f, "Closure"),
Target::Mod => ::core::fmt::Formatter::write_str(f, "Mod"),
Target::ForeignMod =>
::core::fmt::Formatter::write_str(f, "ForeignMod"),
Target::GlobalAsm =>
::core::fmt::Formatter::write_str(f, "GlobalAsm"),
Target::TyAlias =>
::core::fmt::Formatter::write_str(f, "TyAlias"),
Target::Enum => ::core::fmt::Formatter::write_str(f, "Enum"),
Target::Variant =>
::core::fmt::Formatter::write_str(f, "Variant"),
Target::Struct => ::core::fmt::Formatter::write_str(f, "Struct"),
Target::Field => ::core::fmt::Formatter::write_str(f, "Field"),
Target::Union => ::core::fmt::Formatter::write_str(f, "Union"),
Target::Trait => ::core::fmt::Formatter::write_str(f, "Trait"),
Target::TraitAlias =>
::core::fmt::Formatter::write_str(f, "TraitAlias"),
Target::Impl { of_trait: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f, "Impl",
"of_trait", &__self_0),
Target::Expression =>
::core::fmt::Formatter::write_str(f, "Expression"),
Target::Statement =>
::core::fmt::Formatter::write_str(f, "Statement"),
Target::Arm => ::core::fmt::Formatter::write_str(f, "Arm"),
Target::AssocConst =>
::core::fmt::Formatter::write_str(f, "AssocConst"),
Target::Method(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Method",
&__self_0),
Target::AssocTy =>
::core::fmt::Formatter::write_str(f, "AssocTy"),
Target::ForeignFn =>
::core::fmt::Formatter::write_str(f, "ForeignFn"),
Target::ForeignStatic =>
::core::fmt::Formatter::write_str(f, "ForeignStatic"),
Target::ForeignTy =>
::core::fmt::Formatter::write_str(f, "ForeignTy"),
Target::GenericParam { kind: __self_0, has_default: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"GenericParam", "kind", __self_0, "has_default", &__self_1),
Target::MacroDef =>
::core::fmt::Formatter::write_str(f, "MacroDef"),
Target::Param => ::core::fmt::Formatter::write_str(f, "Param"),
Target::PatField =>
::core::fmt::Formatter::write_str(f, "PatField"),
Target::ExprField =>
::core::fmt::Formatter::write_str(f, "ExprField"),
Target::WherePredicate =>
::core::fmt::Formatter::write_str(f, "WherePredicate"),
Target::MacroCall =>
::core::fmt::Formatter::write_str(f, "MacroCall"),
Target::Crate => ::core::fmt::Formatter::write_str(f, "Crate"),
Target::Delegation { mac: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Delegation", "mac", &__self_0),
Target::ForLoop =>
::core::fmt::Formatter::write_str(f, "ForLoop"),
Target::While => ::core::fmt::Formatter::write_str(f, "While"),
Target::Loop => ::core::fmt::Formatter::write_str(f, "Loop"),
Target::Break => ::core::fmt::Formatter::write_str(f, "Break"),
}
}
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for Target {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<bool>;
let _: ::core::cmp::AssertParamIsEq<MethodKind>;
let _: ::core::cmp::AssertParamIsEq<GenericParamKind>;
}
}Eq, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for Target {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
Target::ExternCrate => {}
Target::Use => {}
Target::Static => {}
Target::Const => {}
Target::Fn => {}
Target::Closure => {}
Target::Mod => {}
Target::ForeignMod => {}
Target::GlobalAsm => {}
Target::TyAlias => {}
Target::Enum => {}
Target::Variant => {}
Target::Struct => {}
Target::Field => {}
Target::Union => {}
Target::Trait => {}
Target::TraitAlias => {}
Target::Impl { of_trait: ref __binding_0 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
Target::Expression => {}
Target::Statement => {}
Target::Arm => {}
Target::AssocConst => {}
Target::Method(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
Target::AssocTy => {}
Target::ForeignFn => {}
Target::ForeignStatic => {}
Target::ForeignTy => {}
Target::GenericParam {
kind: ref __binding_0, has_default: ref __binding_1 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
}
Target::MacroDef => {}
Target::Param => {}
Target::PatField => {}
Target::ExprField => {}
Target::WherePredicate => {}
Target::MacroCall => {}
Target::Crate => {}
Target::Delegation { mac: ref __binding_0 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
Target::ForLoop => {}
Target::While => {}
Target::Loop => {}
Target::Break => {}
}
}
}
};StableHash)]
33pub enum Target {
34 ExternCrate,
35 Use,
36 Static,
37 Const,
38 Fn,
39 Closure,
40 Mod,
41 ForeignMod,
42 GlobalAsm,
43 TyAlias,
44 Enum,
45 Variant,
46 Struct,
47 Field,
48 Union,
49 Trait,
50 TraitAlias,
51 Impl { of_trait: bool },
52 Expression,
53 Statement,
54 Arm,
55 AssocConst,
56 Method(MethodKind),
57 AssocTy,
58 ForeignFn,
59 ForeignStatic,
60 ForeignTy,
61 GenericParam { kind: GenericParamKind, has_default: bool },
62 MacroDef,
63 Param,
64 PatField,
65 ExprField,
66 WherePredicate,
67 MacroCall,
68 Crate,
69 Delegation { mac: bool },
70 ForLoop,
71 While,
72 Loop,
73 Break,
74}
75
76impl Display for Target {
77 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
78 f.write_fmt(format_args!("{0}", Self::name(*self)))write!(f, "{}", Self::name(*self))
79 }
80}
81
82impl ::rustc_error_messages::IntoDiagArg for Target {
fn into_diag_arg(self, path: &mut Option<std::path::PathBuf>)
-> ::rustc_error_messages::DiagArgValue {
self.to_string().into_diag_arg(path)
}
}rustc_error_messages::into_diag_arg_using_display!(Target);
83
84impl Target {
85 pub fn is_associated_item(self) -> bool {
86 match self {
87 Target::AssocConst | Target::AssocTy | Target::Method(_) => true,
88 Target::ExternCrate
89 | Target::Use
90 | Target::Static
91 | Target::Const
92 | Target::Fn
93 | Target::Closure
94 | Target::Mod
95 | Target::ForeignMod
96 | Target::GlobalAsm
97 | Target::TyAlias
98 | Target::Enum
99 | Target::Variant
100 | Target::Struct
101 | Target::Field
102 | Target::Union
103 | Target::Trait
104 | Target::TraitAlias
105 | Target::Impl { .. }
106 | Target::Expression
107 | Target::Statement
108 | Target::Arm
109 | Target::ForeignFn
110 | Target::ForeignStatic
111 | Target::ForeignTy
112 | Target::GenericParam { .. }
113 | Target::MacroDef
114 | Target::Param
115 | Target::PatField
116 | Target::ExprField
117 | Target::MacroCall
118 | Target::Crate
119 | Target::WherePredicate
120 | Target::Delegation { .. }
121 | Target::Loop
122 | Target::While
123 | Target::ForLoop
124 | Target::Break => false,
125 }
126 }
127 pub fn from_ast_item(item: &ast::Item) -> Target {
128 match item.kind {
129 ast::ItemKind::ExternCrate(..) => Target::ExternCrate,
130 ast::ItemKind::Use(..) => Target::Use,
131 ast::ItemKind::Static { .. } => Target::Static,
132 ast::ItemKind::Const(..) => Target::Const,
133 ast::ItemKind::ConstBlock(..) => Target::Const,
134 ast::ItemKind::Fn { .. } => Target::Fn,
135 ast::ItemKind::Mod(..) => Target::Mod,
136 ast::ItemKind::ForeignMod { .. } => Target::ForeignMod,
137 ast::ItemKind::GlobalAsm { .. } => Target::GlobalAsm,
138 ast::ItemKind::TyAlias(..) => Target::TyAlias,
139 ast::ItemKind::Enum(..) => Target::Enum,
140 ast::ItemKind::Struct(..) => Target::Struct,
141 ast::ItemKind::Union(..) => Target::Union,
142 ast::ItemKind::Trait(..) => Target::Trait,
143 ast::ItemKind::TraitAlias(..) => Target::TraitAlias,
144 ast::ItemKind::Impl(ref i) => Target::Impl { of_trait: i.of_trait.is_some() },
145 ast::ItemKind::MacCall(..) => Target::MacroCall,
146 ast::ItemKind::MacroDef(..) => Target::MacroDef,
147 ast::ItemKind::Delegation(..) => Target::Delegation { mac: false },
148 ast::ItemKind::DelegationMac(..) => Target::Delegation { mac: true },
149 }
150 }
151
152 pub fn from_foreign_item_kind(kind: &ast::ForeignItemKind) -> Target {
153 match kind {
154 ForeignItemKind::Static(_) => Target::ForeignStatic,
155 ForeignItemKind::Fn(_) => Target::ForeignFn,
156 ForeignItemKind::TyAlias(_) => Target::ForeignTy,
157 ForeignItemKind::MacCall(_) => Target::MacroCall,
158 }
159 }
160
161 pub fn from_assoc_item_kind(kind: &ast::AssocItemKind, assoc_ctxt: AssocCtxt) -> Target {
162 match kind {
163 AssocItemKind::Const(_) => Target::AssocConst,
164 AssocItemKind::Fn(f) => Target::Method(match assoc_ctxt {
165 AssocCtxt::Trait => MethodKind::Trait { body: f.body.is_some() },
166 AssocCtxt::Impl { of_trait, .. } => {
167 if of_trait {
168 MethodKind::TraitImpl
169 } else {
170 MethodKind::Inherent
171 }
172 }
173 }),
174 AssocItemKind::Type(_) => Target::AssocTy,
175 AssocItemKind::Delegation(_) => Target::Delegation { mac: false },
176 AssocItemKind::DelegationMac(_) => Target::Delegation { mac: true },
177 AssocItemKind::MacCall(_) => Target::MacroCall,
178 }
179 }
180
181 pub fn from_expr(expr: &ast::Expr) -> Self {
182 match &expr.kind {
183 ast::ExprKind::Closure(..) | ast::ExprKind::Gen(..) => Self::Closure,
184 ast::ExprKind::Paren(e) => Self::from_expr(&e),
185 ast::ExprKind::ForLoop { .. } => Self::ForLoop,
186 ast::ExprKind::Loop(..) => Self::Loop,
187 ast::ExprKind::While(..) => Self::While,
188 ast::ExprKind::Break(..) => Self::Break,
189 _ => Self::Expression,
190 }
191 }
192
193 pub fn name(self) -> &'static str {
194 match self {
195 Target::ExternCrate => "extern crate",
196 Target::Use => "use",
197 Target::Static => "static",
198 Target::Const => "constant",
199 Target::Fn => "function",
200 Target::Closure => "closure",
201 Target::Mod => "module",
202 Target::ForeignMod => "foreign module",
203 Target::GlobalAsm => "global asm",
204 Target::TyAlias => "type alias",
205 Target::Enum => "enum",
206 Target::Variant => "enum variant",
207 Target::Struct => "struct",
208 Target::Field => "struct field",
209 Target::Union => "union",
210 Target::Trait => "trait",
211 Target::TraitAlias => "trait alias",
212 Target::Impl { .. } => "implementation block",
213 Target::Expression => "expression",
214 Target::Statement => "statement",
215 Target::Arm => "match arm",
216 Target::AssocConst => "associated const",
217 Target::Method(kind) => match kind {
218 MethodKind::Inherent => "inherent method",
219 MethodKind::Trait { body: false } => "required trait method",
220 MethodKind::Trait { body: true } => "provided trait method",
221 MethodKind::TraitImpl => "trait method in an impl block",
222 },
223 Target::AssocTy => "associated type",
224 Target::ForeignFn => "foreign function",
225 Target::ForeignStatic => "foreign static item",
226 Target::ForeignTy => "foreign type",
227 Target::GenericParam { kind, .. } => match kind {
228 GenericParamKind::Type => "type parameter",
229 GenericParamKind::Lifetime => "lifetime parameter",
230 GenericParamKind::Const => "const parameter",
231 },
232 Target::MacroDef => "macro def",
233 Target::Param => "function param",
234 Target::PatField => "pattern field",
235 Target::ExprField => "struct field",
236 Target::WherePredicate => "where predicate",
237 Target::MacroCall => "macro call",
238 Target::Crate => "crate",
239 Target::Delegation { .. } => "delegation",
240 Target::Loop => "loop",
241 Target::ForLoop => "for loop",
242 Target::While => "while loop",
243 Target::Break => "break expression",
244 }
245 }
246
247 pub fn plural_name(self) -> &'static str {
248 match self {
249 Target::ExternCrate => "extern crates",
250 Target::Use => "use statements",
251 Target::Static => "statics",
252 Target::Const => "constants",
253 Target::Fn => "functions",
254 Target::Closure => "closures",
255 Target::Mod => "modules",
256 Target::ForeignMod => "foreign modules",
257 Target::GlobalAsm => "global asms",
258 Target::TyAlias => "type aliases",
259 Target::Enum => "enums",
260 Target::Variant => "enum variants",
261 Target::Struct => "structs",
262 Target::Field => "struct fields",
263 Target::Union => "unions",
264 Target::Trait => "traits",
265 Target::TraitAlias => "trait aliases",
266 Target::Impl { of_trait: false } => "inherent impl blocks",
267 Target::Impl { of_trait: true } => "trait impl blocks",
268 Target::Expression => "expressions",
269 Target::Statement => "statements",
270 Target::Arm => "match arms",
271 Target::AssocConst => "associated consts",
272 Target::Method(kind) => match kind {
273 MethodKind::Inherent => "inherent methods",
274 MethodKind::Trait { body: false } => "required trait methods",
275 MethodKind::Trait { body: true } => "provided trait methods",
276 MethodKind::TraitImpl => "trait methods in impl blocks",
277 },
278 Target::AssocTy => "associated types",
279 Target::ForeignFn => "foreign functions",
280 Target::ForeignStatic => "foreign statics",
281 Target::ForeignTy => "foreign types",
282 Target::GenericParam { kind, has_default: _ } => match kind {
283 GenericParamKind::Type => "type parameters",
284 GenericParamKind::Lifetime => "lifetime parameters",
285 GenericParamKind::Const => "const parameters",
286 },
287 Target::MacroDef => "macro defs",
288 Target::Param => "function params",
289 Target::PatField => "pattern fields",
290 Target::ExprField => "struct fields",
291 Target::WherePredicate => "where predicates",
292 Target::MacroCall => "macro calls",
293 Target::Crate => "crates",
294 Target::Delegation { .. } => "delegations",
295 Target::ForLoop => "for loops",
296 Target::Loop => "loops",
297 Target::While => "while loops",
298 Target::Break => "break expressions",
299 }
300 }
301}
302
303impl From<&hir::ForeignItem<'_>> for Target {
304 fn from(foreign_item: &hir::ForeignItem<'_>) -> Target {
305 match foreign_item.kind {
306 hir::ForeignItemKind::Fn(..) => Target::ForeignFn,
307 hir::ForeignItemKind::Static(..) => Target::ForeignStatic,
308 hir::ForeignItemKind::Type => Target::ForeignTy,
309 }
310 }
311}
312
313impl From<&hir::GenericParam<'_>> for Target {
314 fn from(generic_param: &hir::GenericParam<'_>) -> Target {
315 match generic_param.kind {
316 hir::GenericParamKind::Type { default, .. } => Target::GenericParam {
317 kind: GenericParamKind::Type,
318 has_default: default.is_some(),
319 },
320 hir::GenericParamKind::Lifetime { .. } => {
321 Target::GenericParam { kind: GenericParamKind::Lifetime, has_default: false }
322 }
323 hir::GenericParamKind::Const { default, .. } => Target::GenericParam {
324 kind: GenericParamKind::Const,
325 has_default: default.is_some(),
326 },
327 }
328 }
329}
330
331impl From<&hir::TraitItem<'_>> for Target {
332 fn from(trait_item: &hir::TraitItem<'_>) -> Target {
333 match trait_item.kind {
334 TraitItemKind::Const(..) => Target::AssocConst,
335 TraitItemKind::Fn(_, hir::TraitFn::Required(_)) => {
336 Target::Method(MethodKind::Trait { body: false })
337 }
338 TraitItemKind::Fn(_, hir::TraitFn::Provided(_)) => {
339 Target::Method(MethodKind::Trait { body: true })
340 }
341 TraitItemKind::Type(..) => Target::AssocTy,
342 }
343 }
344}
345
346impl From<DefKind> for Target {
347 fn from(def_kind: DefKind) -> Target {
348 match def_kind {
349 DefKind::ExternCrate => Target::ExternCrate,
350 DefKind::Use => Target::Use,
351 DefKind::Static { .. } => Target::Static,
352 DefKind::Const { .. } => Target::Const,
353 DefKind::Fn => Target::Fn,
354 DefKind::Macro(..) => Target::MacroDef,
355 DefKind::Mod => Target::Mod,
356 DefKind::ForeignMod => Target::ForeignMod,
357 DefKind::GlobalAsm => Target::GlobalAsm,
358 DefKind::TyAlias => Target::TyAlias,
359 DefKind::Enum => Target::Enum,
360 DefKind::Struct => Target::Struct,
361 DefKind::Union => Target::Union,
362 DefKind::Trait => Target::Trait,
363 DefKind::TraitAlias => Target::TraitAlias,
364 DefKind::Impl { of_trait } => Target::Impl { of_trait },
365 _ => { ::core::panicking::panic_fmt(format_args!("impossible case reached")); }panic!("impossible case reached"),
366 }
367 }
368}
369
370impl From<&hir::Item<'_>> for Target {
371 fn from(item: &hir::Item<'_>) -> Target {
372 match item.kind {
373 ItemKind::ExternCrate(..) => Target::ExternCrate,
374 ItemKind::Use(..) => Target::Use,
375 ItemKind::Static { .. } => Target::Static,
376 ItemKind::Const(..) => Target::Const,
377 ItemKind::Fn { .. } => Target::Fn,
378 ItemKind::Macro(..) => Target::MacroDef,
379 ItemKind::Mod(..) => Target::Mod,
380 ItemKind::ForeignMod { .. } => Target::ForeignMod,
381 ItemKind::GlobalAsm { .. } => Target::GlobalAsm,
382 ItemKind::TyAlias(..) => Target::TyAlias,
383 ItemKind::Enum(..) => Target::Enum,
384 ItemKind::Struct(..) => Target::Struct,
385 ItemKind::Union(..) => Target::Union,
386 ItemKind::Trait { .. } => Target::Trait,
387 ItemKind::TraitAlias(..) => Target::TraitAlias,
388 ItemKind::Impl(imp_) => Target::Impl { of_trait: imp_.of_trait.is_some() },
389 }
390 }
391}