@@ -2,14 +2,15 @@ use core::mem;
2
2
3
3
use rustc_attr_data_structures:: AttributeKind ;
4
4
use rustc_feature:: { AttributeTemplate , template} ;
5
- use rustc_span:: { Symbol , sym} ;
5
+ use rustc_span:: { Span , Symbol , sym} ;
6
6
7
- use crate :: attributes:: { AttributeOrder , OnDuplicate , SingleAttributeParser } ;
7
+ use crate :: attributes:: {
8
+ AttributeOrder , NoArgsAttributeParser , OnDuplicate , SingleAttributeParser ,
9
+ } ;
8
10
use crate :: context:: { AcceptContext , Stage } ;
9
11
use crate :: parser:: ArgParser ;
10
12
11
13
pub ( crate ) struct SkipDuringMethodDispatchParser ;
12
-
13
14
impl < S : Stage > SingleAttributeParser < S > for SkipDuringMethodDispatchParser {
14
15
const PATH : & [ Symbol ] = & [ sym:: rustc_skip_during_method_dispatch] ;
15
16
const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepInnermost ;
@@ -52,3 +53,95 @@ impl<S: Stage> SingleAttributeParser<S> for SkipDuringMethodDispatchParser {
52
53
Some ( AttributeKind :: SkipDuringMethodDispatch { array, boxed_slice, span : cx. attr_span } )
53
54
}
54
55
}
56
+
57
+ pub ( crate ) struct ParenSugarParser ;
58
+ impl < S : Stage > NoArgsAttributeParser < S > for ParenSugarParser {
59
+ const PATH : & [ Symbol ] = & [ sym:: rustc_paren_sugar] ;
60
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
61
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: ParenSugar ;
62
+ }
63
+
64
+ pub ( crate ) struct TypeConstParser ;
65
+ impl < S : Stage > NoArgsAttributeParser < S > for TypeConstParser {
66
+ const PATH : & [ Symbol ] = & [ sym:: type_const] ;
67
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
68
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: TypeConst ;
69
+ }
70
+
71
+ // Markers
72
+
73
+ pub ( crate ) struct MarkerParser ;
74
+ impl < S : Stage > NoArgsAttributeParser < S > for MarkerParser {
75
+ const PATH : & [ Symbol ] = & [ sym:: marker] ;
76
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Warn ;
77
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: Marker ;
78
+ }
79
+
80
+ pub ( crate ) struct DenyExplicitImplParser ;
81
+ impl < S : Stage > NoArgsAttributeParser < S > for DenyExplicitImplParser {
82
+ const PATH : & [ Symbol ] = & [ sym:: rustc_deny_explicit_impl] ;
83
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
84
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: DenyExplicitImpl ;
85
+ }
86
+
87
+ pub ( crate ) struct DoNotImplementViaObjectParser ;
88
+ impl < S : Stage > NoArgsAttributeParser < S > for DoNotImplementViaObjectParser {
89
+ const PATH : & [ Symbol ] = & [ sym:: rustc_do_not_implement_via_object] ;
90
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
91
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: DoNotImplementViaObject ;
92
+ }
93
+
94
+ // Const traits
95
+
96
+ pub ( crate ) struct ConstTraitParser ;
97
+ impl < S : Stage > NoArgsAttributeParser < S > for ConstTraitParser {
98
+ const PATH : & [ Symbol ] = & [ sym:: const_trait] ;
99
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Warn ;
100
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: ConstTrait ;
101
+ }
102
+
103
+ // Specialization
104
+
105
+ pub ( crate ) struct SpecializationTraitParser ;
106
+ impl < S : Stage > NoArgsAttributeParser < S > for SpecializationTraitParser {
107
+ const PATH : & [ Symbol ] = & [ sym:: rustc_specialization_trait] ;
108
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
109
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: SpecializationTrait ;
110
+ }
111
+
112
+ pub ( crate ) struct UnsafeSpecializationMarkerParser ;
113
+ impl < S : Stage > NoArgsAttributeParser < S > for UnsafeSpecializationMarkerParser {
114
+ const PATH : & [ Symbol ] = & [ sym:: rustc_unsafe_specialization_marker] ;
115
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
116
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: UnsafeSpecializationMarker ;
117
+ }
118
+
119
+ // Coherence
120
+
121
+ pub ( crate ) struct CoinductiveParser ;
122
+ impl < S : Stage > NoArgsAttributeParser < S > for CoinductiveParser {
123
+ const PATH : & [ Symbol ] = & [ sym:: rustc_coinductive] ;
124
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
125
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: Coinductive ;
126
+ }
127
+
128
+ pub ( crate ) struct AllowIncoherentImplParser ;
129
+ impl < S : Stage > NoArgsAttributeParser < S > for AllowIncoherentImplParser {
130
+ const PATH : & [ Symbol ] = & [ sym:: rustc_allow_incoherent_impl] ;
131
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
132
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: AllowIncoherentImpl ;
133
+ }
134
+
135
+ pub ( crate ) struct CoherenceIsCoreParser ;
136
+ impl < S : Stage > NoArgsAttributeParser < S > for CoherenceIsCoreParser {
137
+ const PATH : & [ Symbol ] = & [ sym:: rustc_coherence_is_core] ;
138
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
139
+ const CREATE : fn ( Span ) -> AttributeKind = |_| AttributeKind :: CoherenceIsCore ;
140
+ }
141
+
142
+ pub ( crate ) struct FundamentalParser ;
143
+ impl < S : Stage > NoArgsAttributeParser < S > for FundamentalParser {
144
+ const PATH : & [ Symbol ] = & [ sym:: fundamental] ;
145
+ const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Error ;
146
+ const CREATE : fn ( Span ) -> AttributeKind = |_| AttributeKind :: Fundamental ;
147
+ }
0 commit comments