Enum hir_expand::ExpandTo
source · 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,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
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
§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<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