rustc_attr_parsing/attributes/
rustc_dump.rs1use rustc_hir::attrs::AttributeKind;
2use rustc_hir::{MethodKind, Target};
3use rustc_span::{Span, Symbol, sym};
4
5use crate::attributes::prelude::Allow;
6use crate::attributes::{NoArgsAttributeParser, OnDuplicate};
7use crate::context::Stage;
8use crate::target_checking::AllowedTargets;
9
10pub(crate) struct RustcDumpUserArgsParser;
11
12impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpUserArgsParser {
13 const PATH: &[Symbol] = &[sym::rustc_dump_user_args];
14 const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
15 const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Fn)]);
16 const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpUserArgs;
17}
18
19pub(crate) struct RustcDumpDefParentsParser;
20
21impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpDefParentsParser {
22 const PATH: &[Symbol] = &[sym::rustc_dump_def_parents];
23 const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
24 const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Fn)]);
25 const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpDefParents;
26}
27
28pub(crate) struct RustcDumpInferredOutlivesParser;
29
30impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpInferredOutlivesParser {
31 const PATH: &[Symbol] = &[sym::rustc_dump_inferred_outlives];
32 const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
33 const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
34 Allow(Target::Struct),
35 Allow(Target::Enum),
36 Allow(Target::Union),
37 Allow(Target::TyAlias),
38 ]);
39 const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpInferredOutlives;
40}
41
42pub(crate) struct RustcDumpItemBoundsParser;
43
44impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpItemBoundsParser {
45 const PATH: &[Symbol] = &[sym::rustc_dump_item_bounds];
46 const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
47 const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::AssocTy)]);
48 const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpItemBounds;
49}
50
51pub(crate) struct RustcDumpObjectLifetimeDefaultsParser;
52
53impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpObjectLifetimeDefaultsParser {
54 const PATH: &[Symbol] = &[sym::rustc_dump_object_lifetime_defaults];
55 const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
56 const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
57 Allow(Target::AssocConst),
58 Allow(Target::AssocTy),
59 Allow(Target::Const),
60 Allow(Target::Enum),
61 Allow(Target::Fn),
62 Allow(Target::ForeignFn),
63 Allow(Target::Impl { of_trait: false }),
64 Allow(Target::Impl { of_trait: true }),
65 Allow(Target::Method(MethodKind::Inherent)),
66 Allow(Target::Method(MethodKind::Trait { body: false })),
67 Allow(Target::Method(MethodKind::Trait { body: true })),
68 Allow(Target::Method(MethodKind::TraitImpl)),
69 Allow(Target::Struct),
70 Allow(Target::Trait),
71 Allow(Target::TraitAlias),
72 Allow(Target::TyAlias),
73 Allow(Target::Union),
74 ]);
75 const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpObjectLifetimeDefaults;
76}
77
78pub(crate) struct RustcDumpPredicatesParser;
79
80impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpPredicatesParser {
81 const PATH: &[Symbol] = &[sym::rustc_dump_predicates];
82 const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
83 const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
84 Allow(Target::AssocConst),
85 Allow(Target::AssocTy),
86 Allow(Target::Const),
87 Allow(Target::Delegation { mac: false }),
88 Allow(Target::Delegation { mac: true }),
89 Allow(Target::Enum),
90 Allow(Target::Fn),
91 Allow(Target::Impl { of_trait: false }),
92 Allow(Target::Impl { of_trait: true }),
93 Allow(Target::Method(MethodKind::Inherent)),
94 Allow(Target::Method(MethodKind::Trait { body: false })),
95 Allow(Target::Method(MethodKind::Trait { body: true })),
96 Allow(Target::Method(MethodKind::TraitImpl)),
97 Allow(Target::Struct),
98 Allow(Target::Trait),
99 Allow(Target::TraitAlias),
100 Allow(Target::TyAlias),
101 Allow(Target::Union),
102 ]);
103 const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpPredicates;
104}
105
106pub(crate) struct RustcDumpVariancesParser;
107
108impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpVariancesParser {
109 const PATH: &[Symbol] = &[sym::rustc_dump_variances];
110 const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
111 const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
112 Allow(Target::Enum),
113 Allow(Target::Fn),
114 Allow(Target::Method(MethodKind::Inherent)),
115 Allow(Target::Method(MethodKind::Trait { body: false })),
116 Allow(Target::Method(MethodKind::Trait { body: true })),
117 Allow(Target::Method(MethodKind::TraitImpl)),
118 Allow(Target::Struct),
119 Allow(Target::Union),
120 ]);
121 const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpVariances;
122}
123
124pub(crate) struct RustcDumpVariancesOfOpaquesParser;
125
126impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpVariancesOfOpaquesParser {
127 const PATH: &[Symbol] = &[sym::rustc_dump_variances_of_opaques];
128 const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
129 const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
130 const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpVariancesOfOpaques;
131}
132
133pub(crate) struct RustcDumpVtableParser;
134
135impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpVtableParser {
136 const PATH: &[Symbol] = &[sym::rustc_dump_vtable];
137 const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
138 const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
139 Allow(Target::Impl { of_trait: true }),
140 Allow(Target::TyAlias),
141 ]);
142 const CREATE: fn(Span) -> AttributeKind = AttributeKind::RustcDumpVtable;
143}