pub enum ExpandTo {
Statements,
Items,
Pattern,
Type,
Expr,
}Expand description
In Rust, macros expand token trees to token trees. When we want to turn a
token tree into an AST node, we need to figure out what kind of AST node we
want: something like foo can be a type, an expression, or a pattern.
Naively, one would think that “what this expands to” is a property of a
particular macro: macro m1 returns an item, while macro m2 returns an
expression, etc. That’s not the case – macros are polymorphic in the
result, and can expand to any type of the AST node.
What defines the actual AST node is the syntactic context of the macro
invocation. As a contrived example, in let T![*] = T![*]; the first T
expands to a pattern, while the second one expands to an expression.
ExpandTo captures this bit of information about a particular macro call
site.
Variants§
Implementations§
Trait Implementations§
impl Copy for ExpandTo
impl Eq for ExpandTo
impl StructuralPartialEq for ExpandTo
Auto Trait Implementations§
impl Freeze for ExpandTo
impl RefUnwindSafe for ExpandTo
impl Send for ExpandTo
impl Sync for ExpandTo
impl Unpin for ExpandTo
impl UnwindSafe for ExpandTo
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,
§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
§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
key and return true if they are equal.§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
§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>
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 more