pub trait PatCx: Sized + Debug {
type Ty: Clone + Debug;
type Error: Debug;
type VariantIdx: Clone + Idx + Debug;
type StrLit: Clone + PartialEq + Debug;
type ArmData: Copy + Clone + Debug;
type PatData: Clone;
// Required methods
fn is_exhaustive_patterns_feature_on(&self) -> bool;
fn ctor_arity(&self, ctor: &Constructor<Self>, ty: &Self::Ty) -> usize;
fn ctor_sub_tys<'a>(
&'a self,
ctor: &'a Constructor<Self>,
ty: &'a Self::Ty,
) -> impl Iterator<Item = (Self::Ty, PrivateUninhabitedField)> + ExactSizeIterator + Captures<'a>;
fn ctors_for_ty(
&self,
ty: &Self::Ty,
) -> Result<ConstructorSet<Self>, Self::Error>;
fn write_variant_name(
f: &mut Formatter<'_>,
ctor: &Constructor<Self>,
ty: &Self::Ty,
) -> Result;
fn bug(&self, fmt: Arguments<'_>) -> Self::Error;
fn complexity_exceeded(&self) -> Result<(), Self::Error>;
// Provided methods
fn lint_overlapping_range_endpoints(
&self,
_pat: &DeconstructedPat<Self>,
_overlaps_on: IntRange,
_overlaps_with: &[&DeconstructedPat<Self>],
) { ... }
fn lint_non_contiguous_range_endpoints(
&self,
_pat: &DeconstructedPat<Self>,
_gap: IntRange,
_gapped_with: &[&DeconstructedPat<Self>],
) { ... }
}
Expand description
Context that provides type information about constructors.
Most of the crate is parameterized on a type that implements this trait.
Required Associated Types§
sourcetype VariantIdx: Clone + Idx + Debug
type VariantIdx: Clone + Idx + Debug
The index of an enum variant.
Required Methods§
fn is_exhaustive_patterns_feature_on(&self) -> bool
sourcefn ctor_arity(&self, ctor: &Constructor<Self>, ty: &Self::Ty) -> usize
fn ctor_arity(&self, ctor: &Constructor<Self>, ty: &Self::Ty) -> usize
The number of fields for this constructor.
sourcefn ctor_sub_tys<'a>(
&'a self,
ctor: &'a Constructor<Self>,
ty: &'a Self::Ty,
) -> impl Iterator<Item = (Self::Ty, PrivateUninhabitedField)> + ExactSizeIterator + Captures<'a>
fn ctor_sub_tys<'a>( &'a self, ctor: &'a Constructor<Self>, ty: &'a Self::Ty, ) -> impl Iterator<Item = (Self::Ty, PrivateUninhabitedField)> + ExactSizeIterator + Captures<'a>
The types of the fields for this constructor. The result must contain ctor_arity()
fields.
sourcefn ctors_for_ty(
&self,
ty: &Self::Ty,
) -> Result<ConstructorSet<Self>, Self::Error>
fn ctors_for_ty( &self, ty: &Self::Ty, ) -> Result<ConstructorSet<Self>, Self::Error>
The set of all the constructors for ty
.
This must follow the invariants of ConstructorSet
sourcefn write_variant_name(
f: &mut Formatter<'_>,
ctor: &Constructor<Self>,
ty: &Self::Ty,
) -> Result
fn write_variant_name( f: &mut Formatter<'_>, ctor: &Constructor<Self>, ty: &Self::Ty, ) -> Result
Write the name of the variant represented by pat
. Used for the best-effort Debug
impl of
DeconstructedPat
. Only invoqued when pat.ctor()
is Struct | Variant(_) | UnionField
.
sourcefn complexity_exceeded(&self) -> Result<(), Self::Error>
fn complexity_exceeded(&self) -> Result<(), Self::Error>
The maximum pattern complexity limit was reached.
Provided Methods§
sourcefn lint_overlapping_range_endpoints(
&self,
_pat: &DeconstructedPat<Self>,
_overlaps_on: IntRange,
_overlaps_with: &[&DeconstructedPat<Self>],
)
fn lint_overlapping_range_endpoints( &self, _pat: &DeconstructedPat<Self>, _overlaps_on: IntRange, _overlaps_with: &[&DeconstructedPat<Self>], )
Lint that the range pat
overlapped with all the ranges in overlaps_with
, where the range
they overlapped over is overlaps_on
. We only detect singleton overlaps.
The default implementation does nothing.
sourcefn lint_non_contiguous_range_endpoints(
&self,
_pat: &DeconstructedPat<Self>,
_gap: IntRange,
_gapped_with: &[&DeconstructedPat<Self>],
)
fn lint_non_contiguous_range_endpoints( &self, _pat: &DeconstructedPat<Self>, _gap: IntRange, _gapped_with: &[&DeconstructedPat<Self>], )
Lint that there is a gap gap
between pat
and all of gapped_with
such that the gap is
not matched by another range. If gapped_with
is empty, then gap
is T::MAX
. We only
detect singleton gaps.
The default implementation does nothing.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.