Struct hir_expand::DeclarativeMacro
pub struct DeclarativeMacro { /* private fields */ }
Expand description
This struct contains AST for a single macro_rules
definition. What might
be very confusing is that AST has almost exactly the same shape as
tt::TokenTree
, but there’s a crucial difference: in macro rules, $ident
and $()*
have special meaning (see Var
and Repeat
data structures)
Implementations§
§impl DeclarativeMacro
impl DeclarativeMacro
pub fn from_err(err: ParseError) -> DeclarativeMacro
pub fn parse_macro_rules(
tt: &Subtree<SpanData<SyntaxContextId>>,
ctx_edition: impl Copy + Fn(SyntaxContextId) -> Edition,
) -> DeclarativeMacro
pub fn parse_macro_rules( tt: &Subtree<SpanData<SyntaxContextId>>, ctx_edition: impl Copy + Fn(SyntaxContextId) -> Edition, ) -> DeclarativeMacro
The old, macro_rules! m {}
flavor.
pub fn parse_macro2(
args: Option<&Subtree<SpanData<SyntaxContextId>>>,
body: &Subtree<SpanData<SyntaxContextId>>,
ctx_edition: impl Copy + Fn(SyntaxContextId) -> Edition,
) -> DeclarativeMacro
pub fn parse_macro2( args: Option<&Subtree<SpanData<SyntaxContextId>>>, body: &Subtree<SpanData<SyntaxContextId>>, ctx_edition: impl Copy + Fn(SyntaxContextId) -> Edition, ) -> DeclarativeMacro
The new, unstable macro m {}
flavor.
pub fn err(&self) -> Option<&ParseError>
pub fn num_rules(&self) -> usize
pub fn expand( &self, tt: &Subtree<SpanData<SyntaxContextId>>, marker: impl Fn(&mut SpanData<SyntaxContextId>) + Copy, call_site: SpanData<SyntaxContextId>, def_site_edition: Edition, ) -> ValueResult<(Subtree<SpanData<SyntaxContextId>>, Option<u32>), ExpandError>
Trait Implementations§
§impl Clone for DeclarativeMacro
impl Clone for DeclarativeMacro
§fn clone(&self) -> DeclarativeMacro
fn clone(&self) -> DeclarativeMacro
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read more§impl Debug for DeclarativeMacro
impl Debug for DeclarativeMacro
§impl PartialEq for DeclarativeMacro
impl PartialEq for DeclarativeMacro
impl Eq for DeclarativeMacro
impl StructuralPartialEq for DeclarativeMacro
Auto Trait Implementations§
impl Freeze for DeclarativeMacro
impl RefUnwindSafe for DeclarativeMacro
impl Send for DeclarativeMacro
impl Sync for DeclarativeMacro
impl Unpin for DeclarativeMacro
impl UnwindSafe for DeclarativeMacro
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
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Checks if this value is equivalent to the given key. Read more
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
Converts
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>
Converts
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 more