@@ -2,14 +2,15 @@ use core::mem;
22
33use rustc_attr_data_structures:: AttributeKind ;
44use rustc_feature:: { AttributeTemplate , template} ;
5- use rustc_span:: { Symbol , sym} ;
5+ use rustc_span:: { Span , Symbol , sym} ;
66
7- use crate :: attributes:: { AttributeOrder , OnDuplicate , SingleAttributeParser } ;
7+ use crate :: attributes:: {
8+ AttributeOrder , NoArgsAttributeParser , OnDuplicate , SingleAttributeParser ,
9+ } ;
810use crate :: context:: { AcceptContext , Stage } ;
911use crate :: parser:: ArgParser ;
1012
1113pub ( crate ) struct SkipDuringMethodDispatchParser ;
12-
1314impl < S : Stage > SingleAttributeParser < S > for SkipDuringMethodDispatchParser {
1415 const PATH : & [ Symbol ] = & [ sym:: rustc_skip_during_method_dispatch] ;
1516 const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepInnermost ;
@@ -52,3 +53,95 @@ impl<S: Stage> SingleAttributeParser<S> for SkipDuringMethodDispatchParser {
5253 Some ( AttributeKind :: SkipDuringMethodDispatch { array, boxed_slice, span : cx. attr_span } )
5354 }
5455}
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