pub(crate) trait AttributeParser<S: Stage>: Default + 'static {
const ATTRIBUTES: &'static [(&'static [Symbol], AttributeTemplate, for<'sess> fn(&mut Self, &mut AcceptContext<'_, 'sess, S>, &ArgParser<'_>))];
// Required method
fn finalize(self, cx: &FinalizeContext<'_, '_, S>) -> Option<AttributeKind>;
}
Expand description
An AttributeParser
is a type which searches for syntactic attributes.
Parsers are often tiny state machines that gets to see all syntactical attributes on an item.
Default::default
creates a fresh instance that sits in some kind of initial state, usually that the
attribute it is looking for was not yet seen.
Then, it defines what paths this group will accept in AttributeParser::ATTRIBUTES
.
These are listed as pairs, of symbols and function pointers. The function pointer will
be called when that attribute is found on an item, which can influence the state of the little
state machine.
Finally, after all attributes on an item have been seen, and possibly been accepted,
the finalize
functions for all attribute parsers are called. Each can then report
whether it has seen the attribute it has been looking for.
The state machine is automatically reset to parse attributes on the next item.
For a simpler attribute parsing interface, consider using SingleAttributeParser
or CombineAttributeParser
instead.
Required Associated Constants§
Sourceconst ATTRIBUTES: &'static [(&'static [Symbol], AttributeTemplate, for<'sess> fn(&mut Self, &mut AcceptContext<'_, 'sess, S>, &ArgParser<'_>))]
const ATTRIBUTES: &'static [(&'static [Symbol], AttributeTemplate, for<'sess> fn(&mut Self, &mut AcceptContext<'_, 'sess, S>, &ArgParser<'_>))]
The symbols for the attributes that this parser is interested in.
If an attribute has this symbol, the accept
function will be called on it.
Required Methods§
Sourcefn finalize(self, cx: &FinalizeContext<'_, '_, S>) -> Option<AttributeKind>
fn finalize(self, cx: &FinalizeContext<'_, '_, S>) -> Option<AttributeKind>
The parser has gotten a chance to accept the attributes on an item, here it can produce an attribute.
All finalize methods of all parsers are unconditionally called.
This means you can’t unconditionally return Some
here,
that’d be equivalent to unconditionally applying an attribute to
every single syntax item that could have attributes applied to it.
Your accept mappings should determine whether this returns something.
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.