1use std::fmt::{self, Display};
4
5use rustc_abi::ExternAbi;
6pub use rustc_ast::visit::AssocCtxt;
7use rustc_ast::{
8 Arm, AssocItemKind, Closure, ConstBlockItem, ConstItem, Crate, EnumDef, Expr, ExprField,
9 FieldDef, Fn, ForeignItemKind, ForeignMod, GenericParam, Generics, Impl, InlineAsm, MacroDef,
10 ModKind, Param, Pat, Safety, StaticItem, Stmt, Trait, TraitAlias, TyAlias, UseTree, Variant,
11 VariantData, WherePredicate, ast,
12};
13use rustc_macros::StableHash;
14use rustc_span::{Ident, Symbol};
15
16#[derive(#[automatically_derived]#[doc(hidden)]unsafe impl<'a>
::core::clone::TrivialClone for AstTarget<'a> {
}
#[automatically_derived]impl<'a> ::core::clone::Clone for AstTarget<'a> {
#[inline]
fn clone(&self) -> Self {
let _: ::core::clone::AssertParamIsClone<&'a ConstItem>;
let _: ::core::clone::AssertParamIsClone<&'a Fn>;
let _: ::core::clone::AssertParamIsClone<&'a TyAlias>;
let _: ::core::clone::AssertParamIsClone<&'a StaticItem>;
let _: ::core::clone::AssertParamIsClone<&'a Fn>;
let _: ::core::clone::AssertParamIsClone<&'a TyAlias>;
let _: ::core::clone::AssertParamIsClone<&'a Option<Symbol>>;
let _: ::core::clone::AssertParamIsClone<&'a Ident>;
let _: ::core::clone::AssertParamIsClone<&'a UseTree>;
let _: ::core::clone::AssertParamIsClone<&'a StaticItem>;
let _: ::core::clone::AssertParamIsClone<ConstTypeAstTarget<'a>>;
let _: ::core::clone::AssertParamIsClone<&'a Fn>;
let _: ::core::clone::AssertParamIsClone<&'a Safety>;
let _: ::core::clone::AssertParamIsClone<&'a Ident>;
let _: ::core::clone::AssertParamIsClone<&'a ModKind>;
let _: ::core::clone::AssertParamIsClone<&'a ForeignMod>;
let _: ::core::clone::AssertParamIsClone<&'a InlineAsm>;
let _: ::core::clone::AssertParamIsClone<&'a TyAlias>;
let _: ::core::clone::AssertParamIsClone<&'a Ident>;
let _: ::core::clone::AssertParamIsClone<&'a Generics>;
let _: ::core::clone::AssertParamIsClone<&'a EnumDef>;
let _: ::core::clone::AssertParamIsClone<&'a Ident>;
let _: ::core::clone::AssertParamIsClone<&'a Generics>;
let _: ::core::clone::AssertParamIsClone<&'a VariantData>;
let _: ::core::clone::AssertParamIsClone<&'a Ident>;
let _: ::core::clone::AssertParamIsClone<&'a Generics>;
let _: ::core::clone::AssertParamIsClone<&'a VariantData>;
let _: ::core::clone::AssertParamIsClone<&'a Trait>;
let _: ::core::clone::AssertParamIsClone<&'a TraitAlias>;
let _: ::core::clone::AssertParamIsClone<&'a Impl>;
let _: ::core::clone::AssertParamIsClone<&'a Ident>;
let _: ::core::clone::AssertParamIsClone<&'a MacroDef>;
let _: ::core::clone::AssertParamIsClone<&'a Closure>;
let _: ::core::clone::AssertParamIsClone<&'a Expr>;
let _: ::core::clone::AssertParamIsClone<&'a Arm>;
let _: ::core::clone::AssertParamIsClone<&'a Crate>;
let _: ::core::clone::AssertParamIsClone<&'a ExprField>;
let _: ::core::clone::AssertParamIsClone<&'a FieldDef>;
let _: ::core::clone::AssertParamIsClone<&'a GenericParam>;
let _: ::core::clone::AssertParamIsClone<&'a Param>;
let _: ::core::clone::AssertParamIsClone<&'a Pat>;
let _: ::core::clone::AssertParamIsClone<&'a Stmt>;
let _: ::core::clone::AssertParamIsClone<&'a Variant>;
let _: ::core::clone::AssertParamIsClone<&'a WherePredicate>;
*self
}
}Clone, #[automatically_derived]impl<'a> ::core::marker::Copy for AstTarget<'a> { }Copy, #[automatically_derived]impl<'a> ::core::fmt::Debug for AstTarget<'a> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
Self::Delegation =>
::core::fmt::Formatter::write_str(f, "Delegation"),
Self::MacroCall =>
::core::fmt::Formatter::write_str(f, "MacroCall"),
Self::AssocConst(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"AssocConst", &__self_0),
Self::Method(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Method",
&__self_0),
Self::AssocTy(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"AssocTy", &__self_0),
Self::ForeignStatic(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ForeignStatic", &__self_0),
Self::ForeignFn(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ForeignFn", &__self_0),
Self::ForeignTy(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ForeignTy", &__self_0),
Self::ExternCrate(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f,
"ExternCrate", __self_0, &__self_1),
Self::Use(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Use",
&__self_0),
Self::Static(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Static",
&__self_0),
Self::Const(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Const",
&__self_0),
Self::Fn(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Fn",
&__self_0),
Self::Mod(__self_0, __self_1, __self_2) =>
::core::fmt::Formatter::debug_tuple_field3_finish(f, "Mod",
__self_0, __self_1, &__self_2),
Self::ForeignMod(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ForeignMod", &__self_0),
Self::GlobalAsm(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"GlobalAsm", &__self_0),
Self::TyAlias(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"TyAlias", &__self_0),
Self::Enum(__self_0, __self_1, __self_2) =>
::core::fmt::Formatter::debug_tuple_field3_finish(f, "Enum",
__self_0, __self_1, &__self_2),
Self::Struct(__self_0, __self_1, __self_2) =>
::core::fmt::Formatter::debug_tuple_field3_finish(f, "Struct",
__self_0, __self_1, &__self_2),
Self::Union(__self_0, __self_1, __self_2) =>
::core::fmt::Formatter::debug_tuple_field3_finish(f, "Union",
__self_0, __self_1, &__self_2),
Self::Trait(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Trait",
&__self_0),
Self::TraitAlias(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"TraitAlias", &__self_0),
Self::Impl(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Impl",
&__self_0),
Self::MacroDef(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f,
"MacroDef", __self_0, &__self_1),
Self::Closure(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Closure", &__self_0),
Self::Expression(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Expression", &__self_0),
Self::Arm(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Arm",
&__self_0),
Self::Crate(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Crate",
&__self_0),
Self::ExprField(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ExprField", &__self_0),
Self::Field(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Field",
&__self_0),
Self::GenericParam(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"GenericParam", &__self_0),
Self::Param(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Param",
&__self_0),
Self::Pat(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Pat",
&__self_0),
Self::Statement(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Statement", &__self_0),
Self::Variant(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Variant", &__self_0),
Self::WherePredicate(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"WherePredicate", &__self_0),
Self::None => ::core::fmt::Formatter::write_str(f, "None"),
}
}
}Debug)]
18pub enum AstTarget<'a> {
19 Delegation,
21 MacroCall,
22
23 AssocConst(&'a ConstItem),
25 Method(&'a Fn),
26 AssocTy(&'a TyAlias),
27
28 ForeignStatic(&'a StaticItem),
30 ForeignFn(&'a Fn),
31 ForeignTy(&'a TyAlias),
32
33 ExternCrate(&'a Option<Symbol>, &'a Ident),
35 Use(&'a UseTree),
36 Static(&'a StaticItem),
37 Const(ConstTypeAstTarget<'a>),
38 Fn(&'a Fn),
39 Mod(&'a Safety, &'a Ident, &'a ModKind),
40 ForeignMod(&'a ForeignMod),
41 GlobalAsm(&'a InlineAsm),
42 TyAlias(&'a TyAlias),
43 Enum(&'a Ident, &'a Generics, &'a EnumDef),
44 Struct(&'a Ident, &'a Generics, &'a VariantData),
45 Union(&'a Ident, &'a Generics, &'a VariantData),
46 Trait(&'a Trait),
47 TraitAlias(&'a TraitAlias),
48 Impl(&'a Impl),
49 MacroDef(&'a Ident, &'a MacroDef),
50
51 Closure(&'a Closure),
53 Expression(&'a Expr),
54
55 Arm(&'a Arm),
56 Crate(&'a Crate),
57 ExprField(&'a ExprField),
58 Field(&'a FieldDef),
59 GenericParam(&'a GenericParam),
60 Param(&'a Param),
61 Pat(&'a Pat),
62 Statement(&'a Stmt),
63 Variant(&'a Variant),
64 WherePredicate(&'a WherePredicate),
65
66 None,
68}
69
70#[derive(#[automatically_derived]#[doc(hidden)]unsafe impl<'a>
::core::clone::TrivialClone for ConstTypeAstTarget<'a> {
}
#[automatically_derived]impl<'a> ::core::clone::Clone for
ConstTypeAstTarget<'a> {
#[inline]
fn clone(&self) -> Self {
let _: ::core::clone::AssertParamIsClone<&'a ConstItem>;
let _: ::core::clone::AssertParamIsClone<&'a ConstBlockItem>;
*self
}
}Clone, #[automatically_derived]impl<'a> ::core::marker::Copy for
ConstTypeAstTarget<'a> {
}Copy, #[automatically_derived]impl<'a> ::core::fmt::Debug for ConstTypeAstTarget<'a>
{
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
Self::ConstItem(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ConstItem", &__self_0),
Self::ConstBlockItem(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ConstBlockItem", &__self_0),
}
}
}Debug)]
71pub enum ConstTypeAstTarget<'a> {
72 ConstItem(&'a ConstItem),
73 ConstBlockItem(&'a ConstBlockItem),
74}
75
76#[derive(#[automatically_derived]impl ::core::marker::Copy for MethodKind { }Copy, #[automatically_derived]#[doc(hidden)]unsafe impl ::core::clone::TrivialClone
for MethodKind {
}
#[automatically_derived]impl ::core::clone::Clone for MethodKind {
#[inline]
fn clone(&self) -> Self {
let _: ::core::clone::AssertParamIsClone<bool>;
*self
}
}Clone, #[automatically_derived]impl ::core::marker::StructuralPartialEq for
MethodKind {
}
#[automatically_derived]impl ::core::cmp::PartialEq for MethodKind {
#[inline]
fn eq(&self, other: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Trait { body: __self_0 }, Self::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 {
Self::Trait { body: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Trait body", &__self_0),
Self::TraitImpl =>
::core::fmt::Formatter::write_str(f, "TraitImpl"),
Self::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) {
match *self {
MethodKind::Trait { body: ref __binding_0 } =>
0u8.stable_hash(__hcx, __hasher),
MethodKind::TraitImpl => 1u8.stable_hash(__hcx, __hasher),
MethodKind::Inherent => 2u8.stable_hash(__hcx, __hasher),
}
match *self {
MethodKind::Trait { body: ref __binding_0 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
MethodKind::TraitImpl => {}
MethodKind::Inherent => {}
}
}
}
};StableHash)]
77pub enum MethodKind {
78 Trait {
80 body: bool,
82 },
83 TraitImpl,
85 Inherent,
87}
88
89#[derive(#[automatically_derived]impl ::core::marker::Copy for Target { }Copy, #[automatically_derived]#[doc(hidden)]unsafe impl ::core::clone::TrivialClone
for Target {
}
#[automatically_derived]impl ::core::clone::Clone for Target {
#[inline]
fn clone(&self) -> Self {
let _: ::core::clone::AssertParamIsClone<bool>;
let _: ::core::clone::AssertParamIsClone<AssocCtxt>;
let _: ::core::clone::AssertParamIsClone<MethodKind>;
*self
}
}Clone, #[automatically_derived]impl ::core::marker::StructuralPartialEq for Target {
}
#[automatically_derived]impl ::core::cmp::PartialEq for Target {
#[inline]
fn eq(&self, other: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Impl { of_trait: __self_0 }, Self::Impl {
of_trait: __arg1_0 }) => __self_0 == __arg1_0,
(Self::AssocConst(__self_0), Self::AssocConst(__arg1_0)) =>
__self_0 == __arg1_0,
(Self::Method(__self_0), Self::Method(__arg1_0)) =>
__self_0 == __arg1_0,
(Self::AssocTy(__self_0), Self::AssocTy(__arg1_0)) =>
__self_0 == __arg1_0,
(Self::Delegation { mac: __self_0 }, Self::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 {
Self::ExternCrate =>
::core::fmt::Formatter::write_str(f, "ExternCrate"),
Self::Use => ::core::fmt::Formatter::write_str(f, "Use"),
Self::Static => ::core::fmt::Formatter::write_str(f, "Static"),
Self::Const => ::core::fmt::Formatter::write_str(f, "Const"),
Self::Fn => ::core::fmt::Formatter::write_str(f, "Fn"),
Self::Closure => ::core::fmt::Formatter::write_str(f, "Closure"),
Self::Mod => ::core::fmt::Formatter::write_str(f, "Mod"),
Self::ForeignMod =>
::core::fmt::Formatter::write_str(f, "ForeignMod"),
Self::GlobalAsm =>
::core::fmt::Formatter::write_str(f, "GlobalAsm"),
Self::TyAlias => ::core::fmt::Formatter::write_str(f, "TyAlias"),
Self::Enum => ::core::fmt::Formatter::write_str(f, "Enum"),
Self::Variant => ::core::fmt::Formatter::write_str(f, "Variant"),
Self::Struct => ::core::fmt::Formatter::write_str(f, "Struct"),
Self::Field => ::core::fmt::Formatter::write_str(f, "Field"),
Self::Union => ::core::fmt::Formatter::write_str(f, "Union"),
Self::Trait => ::core::fmt::Formatter::write_str(f, "Trait"),
Self::TraitAlias =>
::core::fmt::Formatter::write_str(f, "TraitAlias"),
Self::Impl { of_trait: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Impl of_trait", &__self_0),
Self::Expression =>
::core::fmt::Formatter::write_str(f, "Expression"),
Self::Statement =>
::core::fmt::Formatter::write_str(f, "Statement"),
Self::Arm => ::core::fmt::Formatter::write_str(f, "Arm"),
Self::AssocConst(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"AssocConst", &__self_0),
Self::Method(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Method",
&__self_0),
Self::AssocTy(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"AssocTy", &__self_0),
Self::ForeignFn =>
::core::fmt::Formatter::write_str(f, "ForeignFn"),
Self::ForeignStatic =>
::core::fmt::Formatter::write_str(f, "ForeignStatic"),
Self::ForeignTy =>
::core::fmt::Formatter::write_str(f, "ForeignTy"),
Self::LifetimeParam =>
::core::fmt::Formatter::write_str(f, "LifetimeParam"),
Self::TypeParam =>
::core::fmt::Formatter::write_str(f, "TypeParam"),
Self::ConstParam =>
::core::fmt::Formatter::write_str(f, "ConstParam"),
Self::MacroDef =>
::core::fmt::Formatter::write_str(f, "MacroDef"),
Self::Param => ::core::fmt::Formatter::write_str(f, "Param"),
Self::PatField =>
::core::fmt::Formatter::write_str(f, "PatField"),
Self::ExprField =>
::core::fmt::Formatter::write_str(f, "ExprField"),
Self::WherePredicate =>
::core::fmt::Formatter::write_str(f, "WherePredicate"),
Self::MacroCall =>
::core::fmt::Formatter::write_str(f, "MacroCall"),
Self::Crate => ::core::fmt::Formatter::write_str(f, "Crate"),
Self::Delegation { mac: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Delegation mac", &__self_0),
Self::ForLoop => ::core::fmt::Formatter::write_str(f, "ForLoop"),
Self::While => ::core::fmt::Formatter::write_str(f, "While"),
Self::Loop => ::core::fmt::Formatter::write_str(f, "Loop"),
Self::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<AssocCtxt>;
let _: ::core::cmp::AssertParamIsEq<MethodKind>;
}
}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) {
match *self {
Target::ExternCrate => 0u8.stable_hash(__hcx, __hasher),
Target::Use => 1u8.stable_hash(__hcx, __hasher),
Target::Static => 2u8.stable_hash(__hcx, __hasher),
Target::Const => 3u8.stable_hash(__hcx, __hasher),
Target::Fn => 4u8.stable_hash(__hcx, __hasher),
Target::Closure => 5u8.stable_hash(__hcx, __hasher),
Target::Mod => 6u8.stable_hash(__hcx, __hasher),
Target::ForeignMod => 7u8.stable_hash(__hcx, __hasher),
Target::GlobalAsm => 8u8.stable_hash(__hcx, __hasher),
Target::TyAlias => 9u8.stable_hash(__hcx, __hasher),
Target::Enum => 10u8.stable_hash(__hcx, __hasher),
Target::Variant => 11u8.stable_hash(__hcx, __hasher),
Target::Struct => 12u8.stable_hash(__hcx, __hasher),
Target::Field => 13u8.stable_hash(__hcx, __hasher),
Target::Union => 14u8.stable_hash(__hcx, __hasher),
Target::Trait => 15u8.stable_hash(__hcx, __hasher),
Target::TraitAlias => 16u8.stable_hash(__hcx, __hasher),
Target::Impl { of_trait: ref __binding_0 } =>
17u8.stable_hash(__hcx, __hasher),
Target::Expression => 18u8.stable_hash(__hcx, __hasher),
Target::Statement => 19u8.stable_hash(__hcx, __hasher),
Target::Arm => 20u8.stable_hash(__hcx, __hasher),
Target::AssocConst(ref __binding_0) =>
21u8.stable_hash(__hcx, __hasher),
Target::Method(ref __binding_0) =>
22u8.stable_hash(__hcx, __hasher),
Target::AssocTy(ref __binding_0) =>
23u8.stable_hash(__hcx, __hasher),
Target::ForeignFn => 24u8.stable_hash(__hcx, __hasher),
Target::ForeignStatic => 25u8.stable_hash(__hcx, __hasher),
Target::ForeignTy => 26u8.stable_hash(__hcx, __hasher),
Target::LifetimeParam => 27u8.stable_hash(__hcx, __hasher),
Target::TypeParam => 28u8.stable_hash(__hcx, __hasher),
Target::ConstParam => 29u8.stable_hash(__hcx, __hasher),
Target::MacroDef => 30u8.stable_hash(__hcx, __hasher),
Target::Param => 31u8.stable_hash(__hcx, __hasher),
Target::PatField => 32u8.stable_hash(__hcx, __hasher),
Target::ExprField => 33u8.stable_hash(__hcx, __hasher),
Target::WherePredicate => 34u8.stable_hash(__hcx, __hasher),
Target::MacroCall => 35u8.stable_hash(__hcx, __hasher),
Target::Crate => 36u8.stable_hash(__hcx, __hasher),
Target::Delegation { mac: ref __binding_0 } =>
37u8.stable_hash(__hcx, __hasher),
Target::ForLoop => 38u8.stable_hash(__hcx, __hasher),
Target::While => 39u8.stable_hash(__hcx, __hasher),
Target::Loop => 40u8.stable_hash(__hcx, __hasher),
Target::Break => 41u8.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(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
Target::Method(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
Target::AssocTy(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
Target::ForeignFn => {}
Target::ForeignStatic => {}
Target::ForeignTy => {}
Target::LifetimeParam => {}
Target::TypeParam => {}
Target::ConstParam => {}
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)]
92pub enum Target {
93 ExternCrate,
94 Use,
95 Static,
96 Const,
97 Fn,
98 Closure,
99 Mod,
100 ForeignMod,
101 GlobalAsm,
102 TyAlias,
103 Enum,
104 Variant,
105 Struct,
106 Field,
107 Union,
108 Trait,
109 TraitAlias,
110 Impl { of_trait: bool },
111 Expression,
112 Statement,
113 Arm,
114 AssocConst(AssocCtxt),
115 Method(MethodKind),
116 AssocTy(AssocCtxt),
117 ForeignFn,
118 ForeignStatic,
119 ForeignTy,
120 LifetimeParam,
121 TypeParam,
122 ConstParam,
123 MacroDef,
124 Param,
125 PatField,
126 ExprField,
127 WherePredicate,
128 MacroCall,
129 Crate,
130 Delegation { mac: bool },
131 ForLoop,
132 While,
133 Loop,
134 Break,
135}
136
137impl<'a> AstTarget<'a> {
138 pub fn get_abi(&self) -> Option<ExternAbi> {
139 let ext = match self {
140 AstTarget::Method(fn_item) => fn_item.sig.header.ext,
141 AstTarget::Fn(fn_item) => fn_item.sig.header.ext,
142 AstTarget::ForeignFn(fn_item) => fn_item.sig.header.ext,
143 _ => return None,
144 };
145
146 match ext {
147 ast::Extern::None => Some(ExternAbi::Rust),
148 ast::Extern::Implicit(_) => Some(ExternAbi::FALLBACK),
149 ast::Extern::Explicit(abi, _) => Some(abi.symbol_unescaped.as_str().parse().ok()?),
150 }
151 }
152
153 pub fn get_fn_sig(&self) -> Option<&rustc_ast::ast::FnSig> {
154 match self {
155 AstTarget::Method(fn_item) => Some(&fn_item.sig),
156 AstTarget::Fn(fn_item) => Some(&fn_item.sig),
157 AstTarget::ForeignFn(fn_item) => Some(&fn_item.sig),
158 _ => None,
159 }
160 }
161
162 pub fn from_foreign_item_kind(kind: &'a ast::ForeignItemKind) -> Self {
163 match kind {
164 ForeignItemKind::Static(static_item) => AstTarget::ForeignStatic(static_item),
165 ForeignItemKind::Fn(f) => AstTarget::ForeignFn(f),
166 ForeignItemKind::TyAlias(ty_alias) => AstTarget::ForeignTy(ty_alias),
167 ForeignItemKind::MacCall(_) => AstTarget::MacroCall,
168 }
169 }
170
171 pub fn from_assoc_item_kind(kind: &'a ast::AssocItemKind) -> Self {
172 match kind {
173 AssocItemKind::Const(const_item) => AstTarget::AssocConst(const_item),
174 AssocItemKind::Fn(f) => AstTarget::Method(f),
175 AssocItemKind::Type(type_alias) => AstTarget::AssocTy(type_alias),
176 AssocItemKind::Delegation(_) => AstTarget::Delegation,
177 AssocItemKind::DelegationMac(_) => AstTarget::Delegation,
178 AssocItemKind::MacCall(_) => AstTarget::MacroCall,
179 }
180 }
181
182 pub fn from_ast_item(kind: &'a ast::ItemKind) -> Self {
183 match kind {
184 ast::ItemKind::ExternCrate(symbol, ident) => AstTarget::ExternCrate(symbol, ident),
185 ast::ItemKind::Use(use_tree) => AstTarget::Use(use_tree),
186 ast::ItemKind::Static(static_item) => AstTarget::Static(static_item),
187 ast::ItemKind::Const(const_item) => {
188 AstTarget::Const(ConstTypeAstTarget::ConstItem(const_item))
189 }
190 ast::ItemKind::ConstBlock(const_block_item) => {
191 AstTarget::Const(ConstTypeAstTarget::ConstBlockItem(const_block_item))
192 }
193 ast::ItemKind::Fn(f) => AstTarget::Fn(f),
194 ast::ItemKind::Mod(s, i, mk) => AstTarget::Mod(s, i, mk),
195 ast::ItemKind::ForeignMod(foreign_mod) => AstTarget::ForeignMod(foreign_mod),
196 ast::ItemKind::GlobalAsm(inline_asm) => AstTarget::GlobalAsm(inline_asm),
197 ast::ItemKind::TyAlias(ty_alias) => AstTarget::TyAlias(ty_alias),
198 ast::ItemKind::Enum(i, g, ed) => AstTarget::Enum(i, g, ed),
199 ast::ItemKind::Struct(i, g, vd) => AstTarget::Struct(i, g, vd),
200 ast::ItemKind::Union(i, g, vd) => AstTarget::Union(i, g, vd),
201 ast::ItemKind::Trait(trait_kind) => AstTarget::Trait(trait_kind),
202 ast::ItemKind::TraitAlias(trait_alias) => AstTarget::TraitAlias(trait_alias),
203 ast::ItemKind::Impl(i) => AstTarget::Impl(i),
204 ast::ItemKind::MacCall(..) => AstTarget::MacroCall,
205 ast::ItemKind::MacroDef(ident, macro_def) => AstTarget::MacroDef(ident, macro_def),
206 ast::ItemKind::Delegation(..) => AstTarget::Delegation,
207 ast::ItemKind::DelegationMac(..) => AstTarget::Delegation,
208 ast::ItemKind::TestBinderConstraints(..) => AstTarget::MacroCall,
209 }
210 }
211}
212
213impl Display for Target {
214 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
215 f.write_fmt(format_args!("{0}", Self::name(*self)))write!(f, "{}", Self::name(*self))
216 }
217}
218
219impl ::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);
220
221impl Target {
222 pub fn is_associated_item(self) -> bool {
223 match self {
224 Target::AssocConst(_) | Target::AssocTy(_) | Target::Method(_) => true,
225 Target::ExternCrate
226 | Target::Use
227 | Target::Static
228 | Target::Const
229 | Target::Fn
230 | Target::Closure
231 | Target::Mod
232 | Target::ForeignMod
233 | Target::GlobalAsm
234 | Target::TyAlias
235 | Target::Enum
236 | Target::Variant
237 | Target::Struct
238 | Target::Field
239 | Target::Union
240 | Target::Trait
241 | Target::TraitAlias
242 | Target::Impl { .. }
243 | Target::Expression
244 | Target::Statement
245 | Target::Arm
246 | Target::ForeignFn
247 | Target::ForeignStatic
248 | Target::ForeignTy
249 | Target::TypeParam
250 | Target::LifetimeParam
251 | Target::ConstParam
252 | Target::MacroDef
253 | Target::Param
254 | Target::PatField
255 | Target::ExprField
256 | Target::MacroCall
257 | Target::Crate
258 | Target::WherePredicate
259 | Target::Delegation { .. }
260 | Target::Loop
261 | Target::While
262 | Target::ForLoop
263 | Target::Break => false,
264 }
265 }
266 pub fn from_ast_item(item: &ast::Item) -> Target {
267 match item.kind {
268 ast::ItemKind::ExternCrate(..) => Target::ExternCrate,
269 ast::ItemKind::Use(..) => Target::Use,
270 ast::ItemKind::Static { .. } => Target::Static,
271 ast::ItemKind::Const(..) => Target::Const,
272 ast::ItemKind::ConstBlock(..) => Target::Const,
273 ast::ItemKind::Fn { .. } => Target::Fn,
274 ast::ItemKind::Mod(..) => Target::Mod,
275 ast::ItemKind::ForeignMod { .. } => Target::ForeignMod,
276 ast::ItemKind::GlobalAsm { .. } => Target::GlobalAsm,
277 ast::ItemKind::TyAlias(..) => Target::TyAlias,
278 ast::ItemKind::Enum(..) => Target::Enum,
279 ast::ItemKind::Struct(..) => Target::Struct,
280 ast::ItemKind::Union(..) => Target::Union,
281 ast::ItemKind::Trait(..) => Target::Trait,
282 ast::ItemKind::TraitAlias(..) => Target::TraitAlias,
283 ast::ItemKind::Impl(ref i) => Target::Impl { of_trait: i.of_trait.is_some() },
284 ast::ItemKind::MacCall(..) => Target::MacroCall,
285 ast::ItemKind::MacroDef(..) => Target::MacroDef,
286 ast::ItemKind::Delegation(..) => Target::Delegation { mac: false },
287 ast::ItemKind::DelegationMac(..) => Target::Delegation { mac: true },
288 ast::ItemKind::TestBinderConstraints(..) => Target::MacroCall,
289 }
290 }
291
292 pub fn from_foreign_item_kind(kind: &ast::ForeignItemKind) -> Target {
293 match kind {
294 ForeignItemKind::Static(_) => Target::ForeignStatic,
295 ForeignItemKind::Fn(_) => Target::ForeignFn,
296 ForeignItemKind::TyAlias(_) => Target::ForeignTy,
297 ForeignItemKind::MacCall(_) => Target::MacroCall,
298 }
299 }
300
301 pub fn from_assoc_item_kind(kind: &ast::AssocItemKind, assoc_ctxt: AssocCtxt) -> Target {
302 match kind {
303 AssocItemKind::Const(_) => Target::AssocConst(assoc_ctxt),
304 AssocItemKind::Fn(f) => Target::Method(match assoc_ctxt {
305 AssocCtxt::Trait => MethodKind::Trait { body: f.body.is_some() },
306 AssocCtxt::Impl { of_trait, .. } => {
307 if of_trait {
308 MethodKind::TraitImpl
309 } else {
310 MethodKind::Inherent
311 }
312 }
313 }),
314 AssocItemKind::Type(_) => Target::AssocTy(assoc_ctxt),
315 AssocItemKind::Delegation(_) => Target::Delegation { mac: false },
316 AssocItemKind::DelegationMac(_) => Target::Delegation { mac: true },
317 AssocItemKind::MacCall(_) => Target::MacroCall,
318 }
319 }
320
321 pub fn from_expr(expr: &ast::Expr) -> Self {
322 match &expr.kind {
323 ast::ExprKind::Closure(..) | ast::ExprKind::Gen(..) => Self::Closure,
324 ast::ExprKind::Paren(e) => Self::from_expr(&e),
325 ast::ExprKind::ForLoop { .. } => Self::ForLoop,
326 ast::ExprKind::Loop(..) => Self::Loop,
327 ast::ExprKind::While(..) => Self::While,
328 ast::ExprKind::Break(..) => Self::Break,
329 _ => Self::Expression,
330 }
331 }
332
333 pub fn name(self) -> &'static str {
334 match self {
335 Target::ExternCrate => "extern crate",
336 Target::Use => "use",
337 Target::Static => "static",
338 Target::Const => "constant",
339 Target::Fn => "function",
340 Target::Closure => "closure",
341 Target::Mod => "module",
342 Target::ForeignMod => "foreign module",
343 Target::GlobalAsm => "global asm",
344 Target::TyAlias => "type alias",
345 Target::Enum => "enum",
346 Target::Variant => "enum variant",
347 Target::Struct => "struct",
348 Target::Field => "struct field",
349 Target::Union => "union",
350 Target::Trait => "trait",
351 Target::TraitAlias => "trait alias",
352 Target::Impl { .. } => "implementation block",
353 Target::Expression => "expression",
354 Target::Statement => "statement",
355 Target::Arm => "match arm",
356 Target::AssocConst(_) => "associated const",
357 Target::Method(kind) => match kind {
358 MethodKind::Inherent => "inherent method",
359 MethodKind::Trait { body: false } => "required trait method",
360 MethodKind::Trait { body: true } => "provided trait method",
361 MethodKind::TraitImpl => "trait method in an impl block",
362 },
363 Target::AssocTy(_) => "associated type",
364 Target::ForeignFn => "foreign function",
365 Target::ForeignStatic => "foreign static item",
366 Target::ForeignTy => "foreign type",
367 Target::TypeParam => "type parameter",
368 Target::LifetimeParam => "lifetime parameter",
369 Target::ConstParam => "const parameter",
370 Target::MacroDef => "macro def",
371 Target::Param => "function param",
372 Target::PatField => "pattern field",
373 Target::ExprField => "struct field",
374 Target::WherePredicate => "where predicate",
375 Target::MacroCall => "macro call",
376 Target::Crate => "crate",
377 Target::Delegation { .. } => "delegation",
378 Target::Loop => "loop",
379 Target::ForLoop => "for loop",
380 Target::While => "while loop",
381 Target::Break => "break expression",
382 }
383 }
384
385 pub fn plural_name(self) -> &'static str {
386 match self {
387 Target::ExternCrate => "extern crates",
388 Target::Use => "use statements",
389 Target::Static => "statics",
390 Target::Const => "constants",
391 Target::Fn => "functions",
392 Target::Closure => "closures",
393 Target::Mod => "modules",
394 Target::ForeignMod => "foreign modules",
395 Target::GlobalAsm => "global asms",
396 Target::TyAlias => "type aliases",
397 Target::Enum => "enums",
398 Target::Variant => "enum variants",
399 Target::Struct => "structs",
400 Target::Field => "struct fields",
401 Target::Union => "unions",
402 Target::Trait => "traits",
403 Target::TraitAlias => "trait aliases",
404 Target::Impl { of_trait: false } => "inherent impl blocks",
405 Target::Impl { of_trait: true } => "trait impl blocks",
406 Target::Expression => "expressions",
407 Target::Statement => "statements",
408 Target::Arm => "match arms",
409 Target::AssocConst(_) => "associated consts",
410 Target::Method(kind) => match kind {
411 MethodKind::Inherent => "inherent methods",
412 MethodKind::Trait { body: false } => "required trait methods",
413 MethodKind::Trait { body: true } => "provided trait methods",
414 MethodKind::TraitImpl => "trait methods in impl blocks",
415 },
416 Target::AssocTy(_) => "associated types",
417 Target::ForeignFn => "foreign functions",
418 Target::ForeignStatic => "foreign statics",
419 Target::ForeignTy => "foreign types",
420 Target::TypeParam => "type parameters",
421 Target::LifetimeParam => "lifetime parameters",
422 Target::ConstParam => "const parameters",
423 Target::MacroDef => "macro defs",
424 Target::Param => "function params",
425 Target::PatField => "pattern fields",
426 Target::ExprField => "struct fields",
427 Target::WherePredicate => "where predicates",
428 Target::MacroCall => "macro calls",
429 Target::Crate => "crates",
430 Target::Delegation { .. } => "delegations",
431 Target::ForLoop => "for loops",
432 Target::Loop => "loops",
433 Target::While => "while loops",
434 Target::Break => "break expressions",
435 }
436 }
437}