Expand description

The type system. We currently use this to infer types for completion, hover information and various assists.

Re-exports

pub use traits::TraitEnvironment;

Modules

Constant evaluation details

The home of HirDatabase, which is the Salsa database containing all the type inference-related queries.

Type inference-based diagnostics.

The HirDisplay trait, which serves two purposes: Turning various bits from HIR back into source code, and just displaying them for debugging/testing purposes.

This module is concerned with finding methods that a given type provides. For details about how this works in rustc, see the method lookup page in the rustc guide and the corresponding code mostly in librustc_typeck/check/method/probe.rs.

A few helper functions for dealing with primitives.

Trait solving using Chalk.

Macros

Structs

Represents coercing a value to a different type of value.

The id for an Abstract Data Type (i.e. structs, unions and enums).

Identifies a particular bound variable within a binder. Variables are identified by the combination of a DebruijnIndex, which identifies the binder, and an index within that binder.

A function signature as seen by type inference: Several parameter types and one return type.

References the binder at the given depth. The index is a de Bruijn index, so it counts back through the in-scope binders, with 0 being the innermost binder. This is used in impls and the like. For example, if we had a rule like for<T> { (T: Clone) :- (T: Copy) }, then T would be represented as a BoundVar(0) (as the for is the innermost binder).

A wrapper for the substs on a Fn.

The result of type inference: A mapping from expressions and patterns to types.

This is a builder for Ty or anything that needs a Substitution.

Enums

Whether a type is mutable or not.

Whether a function is safe or not.

Types of scalar values.

Represents some extra knowledge we may have about the type variable.

Traits

The Cast trait is used to make annoying upcasts between logically equivalent types that imply wrappers. For example, one could convert a DomainGoal into a Goal by doing:

This allows walking structures that contain types to do something with those types, similar to Chalk’s Fold trait.

Functions

Returns an iterator over the whole super trait hierarchy (including the trait itself).

Return an index of a parameter in the generic type parameter list by it’s id.

‘Canonicalizes’ the t by replacing any errors with new variables. Also ensures there are no unbound variables or inference variables anywhere in the t.

Type Definitions