Skip to content

Commit 38d1efd

Browse files
committed
Port #[rustc_paren_sugar] to the new attribute system
1 parent 2c158b3 commit 38d1efd

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
@@ -313,6 +313,9 @@ pub enum AttributeKind {
313313
/// Represents `#[optimize(size|speed)]`
314314
Optimize(OptimizeAttr, Span),
315315

316+
/// Represents `#[rustc_paren_sugar]`.
317+
ParenSugar(Span),
318+
316319
/// Represents `#[rustc_pass_by_value]` (used by the `rustc_pass_by_value` lint).
317320
PassByValue(Span),
318321

compiler/rustc_attr_data_structures/src/encode_cross_crate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ impl AttributeKind {
4545
NoMangle(..) => No,
4646
NonExhaustive(..) => Yes,
4747
Optimize(..) => No,
48+
ParenSugar(..) => No,
4849
PassByValue(..) => Yes,
4950
Path(..) => No,
5051
PubTransparent(..) => 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
@@ -41,8 +41,8 @@ use crate::attributes::stability::{
4141
use crate::attributes::test_attrs::IgnoreParser;
4242
use crate::attributes::traits::{
4343
CoinductiveParser, ConstTraitParser, DenyExplicitImplParser, DoNotImplementViaObjectParser,
44-
FundamentalParser, MarkerParser, SkipDuringMethodDispatchParser, SpecializationTraitParser,
45-
TypeConstParser, UnsafeSpecializationMarkerParser,
44+
FundamentalParser, MarkerParser, ParenSugarParser, SkipDuringMethodDispatchParser,
45+
SpecializationTraitParser, TypeConstParser, UnsafeSpecializationMarkerParser,
4646
};
4747
use crate::attributes::transparency::TransparencyParser;
4848
use crate::attributes::{AttributeParser as _, Combine, Single, WithoutArgs};
@@ -160,6 +160,7 @@ attribute_parsers!(
160160
Single<WithoutArgs<NoImplicitPreludeParser>>,
161161
Single<WithoutArgs<NoMangleParser>>,
162162
Single<WithoutArgs<NonExhaustiveParser>>,
163+
Single<WithoutArgs<ParenSugarParser>>,
163164
Single<WithoutArgs<PassByValueParser>>,
164165
Single<WithoutArgs<PubTransparentParser>>,
165166
Single<WithoutArgs<SpecializationTraitParser>>,

compiler/rustc_hir_analysis/src/collect.rs

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

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

compiler/rustc_parse/src/validate_attr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ pub fn check_builtin_meta_item(
287287
| sym::rustc_unsafe_specialization_marker
288288
| sym::marker
289289
| sym::fundamental
290+
| sym::rustc_paren_sugar
290291
| sym::type_const
291292
| sym::repr
292293
| 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)