Skip to main content

rustc_attr_parsing/attributes/
rustc_dump.rs

1use 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}