pub struct MetaItemParser<'a> {
path: PathParser<'a>,
args: ArgParser<'a>,
}
Expand description
Utility that deconstructs a MetaItem into usable parts.
MetaItems are syntactically extremely flexible, but specific attributes want to parse them in custom, more restricted ways. This can be done using this struct.
MetaItems consist of some path, and some args. The args could be empty. In other words:
name
-> args are emptyname(...)
-> args are alist
, which is the bit between the parenthesesname = value
-> arg isname_value
, where the argument is the= value
part
The syntax of MetaItems can be found at https://doc.rust-lang.org/reference/attributes.html
Fields§
§path: PathParser<'a>
§args: ArgParser<'a>
Implementations§
Source§impl<'a> MetaItemParser<'a>
impl<'a> MetaItemParser<'a>
Sourcepub fn from_attr(attr: &'a NormalAttr, dcx: DiagCtxtHandle<'a>) -> Self
pub fn from_attr(attr: &'a NormalAttr, dcx: DiagCtxtHandle<'a>) -> Self
Create a new parser from a NormalAttr
, which is stored inside of any
ast::Attribute
Source§impl<'a> MetaItemParser<'a>
impl<'a> MetaItemParser<'a>
pub fn span(&self) -> Span
Sourcepub fn path_without_args(&self) -> PathParser<'a>
pub fn path_without_args(&self) -> PathParser<'a>
Gets just the path, without the args.
pub fn deconstruct(&self) -> (PathParser<'a>, &ArgParser<'a>)
Sourcepub fn path(&self) -> (PathParser<'a>, &ArgParser<'a>)
pub fn path(&self) -> (PathParser<'a>, &ArgParser<'a>)
Asserts that this MetaItem starts with a path. Some examples:
#[rustfmt::skip]
:rustfmt::skip
is a path#[allow(clippy::complexity)]
:clippy::complexity
is a path#[inline]
:inline
is a single segment path
Sourcepub fn word_without_args(&self) -> Option<Ident>
pub fn word_without_args(&self) -> Option<Ident>
Asserts that this MetaItem starts with a word, or single segment path. Doesn’t return the args parser.
For examples. see Self::word
Sourcepub fn word_or_empty_without_args(&self) -> Ident
pub fn word_or_empty_without_args(&self) -> Ident
Like word
, but returns an empty symbol instead of None
Sourcepub fn word(&self) -> Option<(Ident, &ArgParser<'a>)>
pub fn word(&self) -> Option<(Ident, &ArgParser<'a>)>
Asserts that this MetaItem starts with a word, or single segment path.
Some examples:
#[inline]
:inline
is a word#[rustfmt::skip]
:rustfmt::skip
is a path, and not a word and should instead be parsed usingpath
Sourcepub fn word_or_empty(&self) -> (Ident, &ArgParser<'a>)
pub fn word_or_empty(&self) -> (Ident, &ArgParser<'a>)
Like word
, but returns an empty symbol instead of None
Trait Implementations§
Source§impl<'a> Clone for MetaItemParser<'a>
impl<'a> Clone for MetaItemParser<'a>
Source§fn clone(&self) -> MetaItemParser<'a>
fn clone(&self) -> MetaItemParser<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl<'a> DynSend for MetaItemParser<'a>
impl<'a> DynSync for MetaItemParser<'a>
impl<'a> Freeze for MetaItemParser<'a>
impl<'a> !RefUnwindSafe for MetaItemParser<'a>
impl<'a> !Send for MetaItemParser<'a>
impl<'a> !Sync for MetaItemParser<'a>
impl<'a> Unpin for MetaItemParser<'a>
impl<'a> !UnwindSafe for MetaItemParser<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 80 bytes