Skip to main content

RecursionProfile

Enum RecursionProfile 

Source
pub enum RecursionProfile {
Show 13 variants SubtypeCheck, TypeEvaluation, TypeApplication, PropertyAccess, Variance, ShapeExtraction, ShallowTraversal, ConstAssertion, ExpressionCheck, TypeNodeCheck, CallResolution, CheckerRecursion, Custom { max_depth: u32, max_iterations: u32, },
}
Expand description

Named recursion limit presets.

Each profile encodes a (max_depth, max_iterations) pair that is appropriate for a particular kind of recursive computation. Using profiles instead of raw numbers:

  • Documents why a guard exists at every call site
  • Centralises limit values so they can be tuned in one place
  • Prevents copy-paste of magic numbers

Variants§

§

SubtypeCheck

Subtype checking: deep structural comparison of recursive types.

Used by SubtypeChecker and SubtypeTracer. Needs the deepest depth limit because structural comparison of recursive types can legitimately nest deeply before a cycle is found.

depth = 100, iterations = 100,000

§

TypeEvaluation

Type evaluation: conditional types, mapped types, indexed access.

Used by TypeEvaluator (both TypeId guard and DefId guard).

depth = 50, iterations = 100,000

§

TypeApplication

Generic type application / instantiation.

Used by TypeApplicationEvaluator. Matches TypeScript’s instantiation depth limit for TS2589.

depth = 50, iterations = 100,000

§

PropertyAccess

Property access resolution on complex types.

Used by PropertyAccessEvaluator.

depth = 50, iterations = 100,000

§

Variance

Variance computation.

Used by VarianceVisitor.

depth = 50, iterations = 100,000

§

ShapeExtraction

Shape extraction for compatibility checking.

Used by ShapeExtractor.

depth = 50, iterations = 100,000

§

ShallowTraversal

Shallow type traversal: contains-type checks, type collection.

Used by RecursiveTypeCollector, ContainsTypeChecker. Intentionally shallow — these just walk the top-level structure.

depth = 20, iterations = 100,000

§

ConstAssertion

Const assertion processing.

Used by ConstAssertionVisitor.

depth = 50, iterations = 100,000

§

ExpressionCheck

Expression type checking depth.

Used by ExpressionChecker. Generous limit for deeply nested expressions.

depth = 500

§

TypeNodeCheck

Type node resolution depth.

Used by TypeNodeChecker. Generous limit for deeply nested type annotations.

depth = 500

§

CallResolution

Function call resolution depth.

Used by get_type_of_call_expression. Relatively low to catch infinite recursion in overload resolution.

depth = 20

§

CheckerRecursion

General checker recursion depth.

Used by enter_recursion/leave_recursion on checker functions.

depth = 50

§

Custom

Custom limits for one-off or test scenarios.

Fields

§max_depth: u32
§max_iterations: u32

Implementations§

Source§

impl RecursionProfile

Source

pub const fn max_depth(self) -> u32

Maximum recursion depth for this profile.

Source

pub const fn max_iterations(self) -> u32

Maximum iteration count for this profile.

Trait Implementations§

Source§

impl Clone for RecursionProfile

Source§

fn clone(&self) -> RecursionProfile

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RecursionProfile

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for RecursionProfile

Source§

fn eq(&self, other: &RecursionProfile) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for RecursionProfile

Source§

impl Eq for RecursionProfile

Source§

impl StructuralPartialEq for RecursionProfile

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more