pub struct ExpnId {
pub krate: CrateNum,
pub local_id: ExpnIndex,
}
Expand description
A unique ID associated with a macro invocation and expansion.
Fields§
§krate: CrateNum
§local_id: ExpnIndex
Implementations§
Source§impl ExpnId
impl ExpnId
Sourcepub const fn root() -> ExpnId
pub const fn root() -> ExpnId
The ID of the theoretical expansion that generates freshly parsed, unexpanded AST. Invariant: we do not create any ExpnId with local_id == 0 and krate != 0.
pub fn expn_hash(self) -> ExpnHash
pub fn from_hash(hash: ExpnHash) -> Option<ExpnId>
pub fn as_local(self) -> Option<LocalExpnId>
pub fn expect_local(self) -> LocalExpnId
pub fn expn_data(self) -> ExpnData
pub fn is_descendant_of(self, ancestor: ExpnId) -> bool
Sourcepub fn outer_expn_is_descendant_of(self, ctxt: SyntaxContext) -> bool
pub fn outer_expn_is_descendant_of(self, ctxt: SyntaxContext) -> bool
expn_id.outer_expn_is_descendant_of(ctxt)
is equivalent to but faster than
expn_id.is_descendant_of(ctxt.outer_expn())
.
Sourcepub fn expansion_cause(self) -> Option<Span>
pub fn expansion_cause(self) -> Option<Span>
Returns span for the macro which originally caused this expansion to happen.
Stops backtracing at include! boundary.
Trait Implementations§
Source§impl<CTX: HashStableContext> HashStable<CTX> for ExpnId
impl<CTX: HashStableContext> HashStable<CTX> for ExpnId
fn hash_stable(&self, ctx: &mut CTX, hasher: &mut StableHasher)
impl Copy for ExpnId
impl Eq for ExpnId
impl StructuralPartialEq for ExpnId
Auto Trait Implementations§
impl DynSend for ExpnId
impl DynSync for ExpnId
impl Freeze for ExpnId
impl RefUnwindSafe for ExpnId
impl Send for ExpnId
impl Sync for ExpnId
impl Unpin for ExpnId
impl UnwindSafe for ExpnId
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§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for 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<'a, T> Captures<'a> for Twhere
T: ?Sized,
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: 8 bytes