Reorder attribute parsers in traits.rs

This commit is contained in:
Pavel Grigorenko
2025-06-24 23:41:07 +03:00
parent 1bdf703171
commit a6bc8160d6

View File

@@ -11,7 +11,6 @@ use crate::context::{AcceptContext, Stage};
use crate::parser::ArgParser; use crate::parser::ArgParser;
pub(crate) struct SkipDuringMethodDispatchParser; pub(crate) struct SkipDuringMethodDispatchParser;
impl<S: Stage> SingleAttributeParser<S> for SkipDuringMethodDispatchParser { impl<S: Stage> SingleAttributeParser<S> for SkipDuringMethodDispatchParser {
const PATH: &[Symbol] = &[sym::rustc_skip_during_method_dispatch]; const PATH: &[Symbol] = &[sym::rustc_skip_during_method_dispatch];
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepFirst; const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepFirst;
@@ -55,11 +54,27 @@ impl<S: Stage> SingleAttributeParser<S> for SkipDuringMethodDispatchParser {
} }
} }
pub(crate) struct ConstTraitParser; pub(crate) struct ParenSugarParser;
impl<S: Stage> NoArgsAttributeParser<S> for ConstTraitParser { impl<S: Stage> NoArgsAttributeParser<S> for ParenSugarParser {
const PATH: &[Symbol] = &[sym::const_trait]; const PATH: &[Symbol] = &[sym::rustc_paren_sugar];
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
const CREATE: fn(Span) -> AttributeKind = AttributeKind::ParenSugar;
}
pub(crate) struct TypeConstParser;
impl<S: Stage> NoArgsAttributeParser<S> for TypeConstParser {
const PATH: &[Symbol] = &[sym::type_const];
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
const CREATE: fn(Span) -> AttributeKind = AttributeKind::TypeConst;
}
// Markers
pub(crate) struct MarkerParser;
impl<S: Stage> NoArgsAttributeParser<S> for MarkerParser {
const PATH: &[Symbol] = &[sym::marker];
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn; const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
const CREATE: fn(Span) -> AttributeKind = AttributeKind::ConstTrait; const CREATE: fn(Span) -> AttributeKind = AttributeKind::Marker;
} }
pub(crate) struct DenyExplicitImplParser; pub(crate) struct DenyExplicitImplParser;
@@ -76,19 +91,16 @@ impl<S: Stage> NoArgsAttributeParser<S> for DoNotImplementViaObjectParser {
const CREATE: fn(Span) -> AttributeKind = AttributeKind::DoNotImplementViaObject; const CREATE: fn(Span) -> AttributeKind = AttributeKind::DoNotImplementViaObject;
} }
pub(crate) struct CoinductiveParser; // Const traits
impl<S: Stage> NoArgsAttributeParser<S> for CoinductiveParser {
const PATH: &[Symbol] = &[sym::rustc_coinductive]; pub(crate) struct ConstTraitParser;
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error; impl<S: Stage> NoArgsAttributeParser<S> for ConstTraitParser {
const CREATE: fn(Span) -> AttributeKind = AttributeKind::Coinductive; const PATH: &[Symbol] = &[sym::const_trait];
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
const CREATE: fn(Span) -> AttributeKind = AttributeKind::ConstTrait;
} }
pub(crate) struct TypeConstParser; // Specialization
impl<S: Stage> NoArgsAttributeParser<S> for TypeConstParser {
const PATH: &[Symbol] = &[sym::type_const];
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
const CREATE: fn(Span) -> AttributeKind = AttributeKind::TypeConst;
}
pub(crate) struct SpecializationTraitParser; pub(crate) struct SpecializationTraitParser;
impl<S: Stage> NoArgsAttributeParser<S> for SpecializationTraitParser { impl<S: Stage> NoArgsAttributeParser<S> for SpecializationTraitParser {
@@ -104,11 +116,13 @@ impl<S: Stage> NoArgsAttributeParser<S> for UnsafeSpecializationMarkerParser {
const CREATE: fn(Span) -> AttributeKind = AttributeKind::UnsafeSpecializationMarker; const CREATE: fn(Span) -> AttributeKind = AttributeKind::UnsafeSpecializationMarker;
} }
pub(crate) struct MarkerParser; // Coherence
impl<S: Stage> NoArgsAttributeParser<S> for MarkerParser {
const PATH: &[Symbol] = &[sym::marker]; pub(crate) struct CoinductiveParser;
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn; impl<S: Stage> NoArgsAttributeParser<S> for CoinductiveParser {
const CREATE: fn(Span) -> AttributeKind = AttributeKind::Marker; const PATH: &[Symbol] = &[sym::rustc_coinductive];
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
const CREATE: fn(Span) -> AttributeKind = AttributeKind::Coinductive;
} }
pub(crate) struct FundamentalParser; pub(crate) struct FundamentalParser;
@@ -117,10 +131,3 @@ impl<S: Stage> NoArgsAttributeParser<S> for FundamentalParser {
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error; const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::Fundamental; const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::Fundamental;
} }
pub(crate) struct ParenSugarParser;
impl<S: Stage> NoArgsAttributeParser<S> for ParenSugarParser {
const PATH: &[Symbol] = &[sym::rustc_paren_sugar];
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
const CREATE: fn(Span) -> AttributeKind = AttributeKind::ParenSugar;
}