rustc_attr_parsing/attributes/
rustc_dump.rs

1use rustc_hir::Target;
2use rustc_hir::attrs::AttributeKind;
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 RustcDumpUserArgs;
11
12impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpUserArgs {
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 RustcDumpDefParents;
20
21impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpDefParents {
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 RustcDumpItemBounds;
29
30impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpItemBounds {
31    const PATH: &[Symbol] = &[sym::rustc_dump_item_bounds];
32    const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
33    const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::AssocTy)]);
34    const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpItemBounds;
35}
36
37pub(crate) struct RustcDumpPredicates;
38
39impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpPredicates {
40    const PATH: &[Symbol] = &[sym::rustc_dump_predicates];
41    const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
42    const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
43        Allow(Target::Struct),
44        Allow(Target::Enum),
45        Allow(Target::Union),
46        Allow(Target::Trait),
47        Allow(Target::AssocTy),
48    ]);
49    const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpPredicates;
50}
51
52pub(crate) struct RustcDumpVtable;
53
54impl<S: Stage> NoArgsAttributeParser<S> for RustcDumpVtable {
55    const PATH: &[Symbol] = &[sym::rustc_dump_vtable];
56    const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
57    const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
58        Allow(Target::Impl { of_trait: true }),
59        Allow(Target::TyAlias),
60    ]);
61    const CREATE: fn(Span) -> AttributeKind = AttributeKind::RustcDumpVtable;
62}