Trait CombineAttributeParser

Source
pub(crate) trait CombineAttributeParser<S: Stage>: 'static {
    type Item;

    const PATH: &[Symbol];
    const CONVERT: fn(ThinVec<Self::Item>) -> AttributeKind;
    const TEMPLATE: AttributeTemplate;

    // Required method
    fn extend<'c>(
        cx: &'c mut AcceptContext<'_, '_, S>,
        args: &'c ArgParser<'_>,
    ) -> impl IntoIterator<Item = Self::Item> + 'c;
}
Expand description

Alternative to AttributeParser that automatically handles state management. If multiple attributes appear on an element, combines the values of each into a ThinVec. Combine<T> where T: CombineAttributeParser implements AttributeParser.

CombineAttributeParser can only convert a single kind of attribute, and cannot combine multiple attributes together like is necessary for #[stable()] and #[unstable()] for example.

Required Associated Constants§

Source

const PATH: &[Symbol]

Source

const CONVERT: fn(ThinVec<Self::Item>) -> AttributeKind

A function that converts individual items (of type Item) into the final attribute.

For example, individual representations fomr #[repr(...)] attributes into an AttributeKind::Repr(x), where x is a vec of these individual reprs.

Source

const TEMPLATE: AttributeTemplate

The template this attribute parser should implement. Used for diagnostics.

Required Associated Types§

Required Methods§

Source

fn extend<'c>( cx: &'c mut AcceptContext<'_, '_, S>, args: &'c ArgParser<'_>, ) -> impl IntoIterator<Item = Self::Item> + 'c

Converts a single syntactical attribute to a number of elements of the semantic attribute, or AttributeKind

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<S: Stage> CombineAttributeParser<S> for AllowConstFnUnstableParser

Source§

const PATH: &[Symbol]

Source§

const CONVERT: fn(ThinVec<Self::Item>) -> AttributeKind = {rustc_attr_data_structures::AttributeKind::AllowConstFnUnstable as fn(thin_vec::ThinVec<<attributes::allow_unstable::AllowConstFnUnstableParser as attributes::CombineAttributeParser<S>>::Item>) -> rustc_attr_data_structures::AttributeKind}

Source§

const TEMPLATE: AttributeTemplate

Source§

type Item = Symbol

Source§

impl<S: Stage> CombineAttributeParser<S> for AllowInternalUnstableParser

Source§

const PATH: &[Symbol]

Source§

const CONVERT: fn(ThinVec<Self::Item>) -> AttributeKind = {rustc_attr_data_structures::AttributeKind::AllowInternalUnstable as fn(thin_vec::ThinVec<<attributes::allow_unstable::AllowInternalUnstableParser as attributes::CombineAttributeParser<S>>::Item>) -> rustc_attr_data_structures::AttributeKind}

Source§

const TEMPLATE: AttributeTemplate

Source§

type Item = (Symbol, Span)

Source§

impl<S: Stage> CombineAttributeParser<S> for ReprParser

Source§

const PATH: &[Symbol]

Source§

const CONVERT: fn(ThinVec<Self::Item>) -> AttributeKind = {rustc_attr_data_structures::AttributeKind::Repr as fn(thin_vec::ThinVec<<attributes::repr::ReprParser as attributes::CombineAttributeParser<S>>::Item>) -> rustc_attr_data_structures::AttributeKind}

Source§

const TEMPLATE: AttributeTemplate

Source§

type Item = (ReprAttr, Span)