Skip to content

Commit 7b4121a

Browse files
committed
Port #[rustc_paren_sugar] to the new attribute system
1 parent 82154ad commit 7b4121a

File tree

7 files changed

+19
-5
lines changed

7 files changed

+19
-5
lines changed

compiler/rustc_attr_data_structures/src/attributes.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,9 @@ pub enum AttributeKind {
302302
/// Represents `#[optimize(size|speed)]`
303303
Optimize(OptimizeAttr, Span),
304304

305+
/// Represents `#[rustc_paren_sugar]`.
306+
ParenSugar(Span),
307+
305308
/// Represents `#[rustc_pub_transparent]` (used by the `repr_transparent_external_private_fields` lint).
306309
PubTransparent(Span),
307310

compiler/rustc_attr_data_structures/src/encode_cross_crate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ impl AttributeKind {
4242
Naked(..) => No,
4343
NoMangle(..) => No,
4444
Optimize(..) => No,
45+
ParenSugar(..) => No,
4546
PubTransparent(..) => Yes,
4647
Repr(..) => No,
4748
RustcLayoutScalarValidRangeEnd(..) => Yes,

compiler/rustc_attr_parsing/src/attributes/traits.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,10 @@ impl<S: Stage> NoArgsAttributeParser<S> for FundamentalParser {
117117
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
118118
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::Fundamental;
119119
}
120+
121+
pub(crate) struct ParenSugarParser;
122+
impl<S: Stage> NoArgsAttributeParser<S> for ParenSugarParser {
123+
const PATH: &[Symbol] = &[sym::rustc_paren_sugar];
124+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
125+
const CREATE: fn(Span) -> AttributeKind = AttributeKind::ParenSugar;
126+
}

compiler/rustc_attr_parsing/src/context.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ use crate::attributes::stability::{
3737
};
3838
use crate::attributes::traits::{
3939
CoinductiveParser, ConstTraitParser, DenyExplicitImplParser, DoNotImplementViaObjectParser,
40-
FundamentalParser, MarkerParser, SkipDuringMethodDispatchParser, SpecializationTraitParser,
41-
TypeConstParser, UnsafeSpecializationMarkerParser,
40+
FundamentalParser, MarkerParser, ParenSugarParser, SkipDuringMethodDispatchParser,
41+
SpecializationTraitParser, TypeConstParser, UnsafeSpecializationMarkerParser,
4242
};
4343
use crate::attributes::transparency::TransparencyParser;
4444
use crate::attributes::{AttributeParser as _, Combine, Single, WithoutArgs};
@@ -152,6 +152,7 @@ attribute_parsers!(
152152
Single<WithoutArgs<MarkerParser>>,
153153
Single<WithoutArgs<MayDangleParser>>,
154154
Single<WithoutArgs<NoMangleParser>>,
155+
Single<WithoutArgs<ParenSugarParser>>,
155156
Single<WithoutArgs<PubTransparentParser>>,
156157
Single<WithoutArgs<SpecializationTraitParser>>,
157158
Single<WithoutArgs<TrackCallerParser>>,

compiler/rustc_hir_analysis/src/collect.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -863,7 +863,7 @@ fn trait_def(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::TraitDef {
863863
hir::Constness::NotConst
864864
};
865865

866-
let paren_sugar = attrs.iter().any(|attr| attr.has_name(sym::rustc_paren_sugar));
866+
let paren_sugar = find_attr!(attrs, AttributeKind::ParenSugar(_));
867867
if paren_sugar && !tcx.features().unboxed_closures() {
868868
tcx.dcx().emit_err(errors::ParenSugarAttribute { span: item.span });
869869
}

compiler/rustc_parse/src/validate_attr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ fn emit_malformed_attribute(
301301
| sym::rustc_unsafe_specialization_marker
302302
| sym::marker
303303
| sym::fundamental
304+
| sym::rustc_paren_sugar
304305
| sym::type_const
305306
| sym::repr
306307
| sym::align

compiler/rustc_passes/src/check_attr.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,10 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
131131
}
132132
&Attribute::Parsed(
133133
AttributeKind::SpecializationTrait(attr_span)
134-
| AttributeKind::UnsafeSpecializationMarker(attr_span),
134+
| AttributeKind::UnsafeSpecializationMarker(attr_span)
135+
| AttributeKind::ParenSugar(attr_span),
135136
) => {
136-
// FIXME(specialization): more validation is needed
137+
// FIXME: more validation is needed
137138
self.check_must_be_applied_to_trait(attr_span, span, target);
138139
}
139140
&Attribute::Parsed(AttributeKind::TypeConst(attr_span)) => {

0 commit comments

Comments
 (0)