pub struct Pat<'hir> {
pub hir_id: HirId,
pub kind: PatKind<'hir>,
pub span: Span,
pub default_binding_modes: bool,
}
Fields§
§hir_id: HirId
§kind: PatKind<'hir>
§span: Span
§default_binding_modes: bool
Whether to use default binding modes. At present, this is false only for destructuring assignment.
Implementations§
source§impl<'hir> Pat<'hir>
impl<'hir> Pat<'hir>
fn walk_short_(&self, it: &mut impl FnMut(&Pat<'hir>) -> bool) -> bool
sourcepub fn walk_short(&self, it: impl FnMut(&Pat<'hir>) -> bool) -> bool
pub fn walk_short(&self, it: impl FnMut(&Pat<'hir>) -> bool) -> bool
Walk the pattern in left-to-right order,
short circuiting (with .all(..)
) if false
is returned.
Note that when visiting e.g. Tuple(ps)
,
if visiting ps[0]
returns false
,
then ps[1]
will not be visited.
fn walk_(&self, it: &mut impl FnMut(&Pat<'hir>) -> bool)
sourcepub fn walk(&self, it: impl FnMut(&Pat<'hir>) -> bool)
pub fn walk(&self, it: impl FnMut(&Pat<'hir>) -> bool)
Walk the pattern in left-to-right order.
If it(pat)
returns false
, the children are not visited.
sourcepub fn walk_always(&self, it: impl FnMut(&Pat<'_>))
pub fn walk_always(&self, it: impl FnMut(&Pat<'_>))
Walk the pattern in left-to-right order.
If you always want to recurse, prefer this method over walk
.
sourcepub fn is_never_pattern(&self) -> bool
pub fn is_never_pattern(&self) -> bool
Whether this a never pattern.
source§impl Pat<'_>
impl Pat<'_>
sourcepub fn each_binding(&self, f: impl FnMut(BindingMode, HirId, Span, Ident))
pub fn each_binding(&self, f: impl FnMut(BindingMode, HirId, Span, Ident))
Call f
on every “binding” in a pattern, e.g., on a
in
match foo() { Some(a) => (), None => () }
sourcepub fn each_binding_or_first(
&self,
f: &mut impl FnMut(BindingMode, HirId, Span, Ident),
)
pub fn each_binding_or_first( &self, f: &mut impl FnMut(BindingMode, HirId, Span, Ident), )
Call f
on every “binding” in a pattern, e.g., on a
in
match foo() { Some(a) => (), None => () }
.
When encountering an or-pattern p_0 | ... | p_n
only the first non-never pattern will be
visited. If they’re all never patterns we visit nothing, which is ok since a never pattern
cannot have bindings.
pub fn simple_ident(&self) -> Option<Ident>
sourcepub fn necessary_variants(&self) -> Vec<DefId>
pub fn necessary_variants(&self) -> Vec<DefId>
Returns variants that are necessary to exist for the pattern to match.
sourcepub fn contains_explicit_ref_binding(&self) -> Option<Mutability>
pub fn contains_explicit_ref_binding(&self) -> Option<Mutability>
Checks if the pattern contains any ref
or ref mut
bindings, and if
yes whether it contains mutable or just immutables ones.
Trait Implementations§
source§impl<'hir, __CTX> HashStable<__CTX> for Pat<'hir>where
__CTX: HashStableContext,
impl<'hir, __CTX> HashStable<__CTX> for Pat<'hir>where
__CTX: HashStableContext,
fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)
impl<'hir> Copy for Pat<'hir>
Auto Trait Implementations§
impl<'hir> DynSend for Pat<'hir>
impl<'hir> DynSync for Pat<'hir>
impl<'hir> Freeze for Pat<'hir>
impl<'hir> RefUnwindSafe for Pat<'hir>
impl<'hir> Send for Pat<'hir>
impl<'hir> Sync for Pat<'hir>
impl<'hir> Unpin for Pat<'hir>
impl<'hir> UnwindSafe for Pat<'hir>
Blanket Implementations§
source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
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
)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>
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 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: 72 bytes