rustc_pattern_analysis

Trait PatCx

source
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§

source

type Ty: Clone + Debug

The type of a pattern.

source

type Error: Debug

Errors that can abort analysis.

source

type VariantIdx: Clone + Idx + Debug

The index of an enum variant.

source

type StrLit: Clone + PartialEq + Debug

A string literal

source

type ArmData: Copy + Clone + Debug

Extra data to store in a match arm.

source

type PatData: Clone

Extra data to store in a pattern.

Required Methods§

source

fn is_exhaustive_patterns_feature_on(&self) -> bool

source

fn ctor_arity(&self, ctor: &Constructor<Self>, ty: &Self::Ty) -> usize

The number of fields for this constructor.

source

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.

source

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

source

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.

source

fn bug(&self, fmt: Arguments<'_>) -> Self::Error

Raise a bug.

source

fn complexity_exceeded(&self) -> Result<(), Self::Error>

The maximum pattern complexity limit was reached.

Provided Methods§

source

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.

source

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.

Implementors§