pub struct LateContext<'tcx> {
    pub tcx: TyCtxt<'tcx>,
    pub enclosing_body: Option<BodyId>,
    pub(crate) cached_typeck_results: Cell<Option<&'tcx TypeckResults<'tcx>>>,
    pub param_env: ParamEnv<'tcx>,
    pub access_levels: &'tcx AccessLevels,
    pub lint_store: &'tcx LintStore,
    pub last_node_with_lint_attrs: HirId,
    pub generics: Option<&'tcx Generics<'tcx>>,
    pub only_module: bool,
}
Expand description

Context for lint checking outside of type inference.

Fields

tcx: TyCtxt<'tcx>

Type context we’re checking in.

enclosing_body: Option<BodyId>

Current body, or None if outside a body.

cached_typeck_results: Cell<Option<&'tcx TypeckResults<'tcx>>>

Type-checking results for the current body. Access using the typeck_results and maybe_typeck_results methods, which handle querying the typeck results on demand.

param_env: ParamEnv<'tcx>

Parameter environment for the item we are in.

access_levels: &'tcx AccessLevels

Items accessible from the crate being checked.

lint_store: &'tcx LintStore

The store of registered lints and the lint levels.

last_node_with_lint_attrs: HirIdgenerics: Option<&'tcx Generics<'tcx>>

Generic type parameters in scope for the item we are in.

only_module: bool

We are only looking at one module

Implementations

Gets the type-checking results for the current body, or None if outside a body.

Gets the type-checking results for the current body. As this will ICE if called outside bodies, only call when working with Expr or Pat nodes (they are guaranteed to be found only in bodies).

Returns the final resolution of a QPath, or Res::Err if unavailable. Unlike .typeck_results().qpath_res(qpath, id), this can be used even outside bodies (e.g. for paths in hir::Ty), without any risk of ICE-ing.

Check if a DefId’s path matches the given absolute type path usage.

Anonymous scopes such as extern imports are matched with kw::Empty; inherent impl blocks are matched with the name of the type.

Instead of using this method, it is often preferable to instead use rustc_diagnostic_item or a lang_item. This is less prone to errors as paths get invalidated if the target definition moves.

Examples
if cx.match_def_path(def_id, &[sym::core, sym::option, sym::Option]) {
    // The given `def_id` is that of an `Option` type
}

Used by clippy, but should be replaced by diagnostic items eventually.

Gets the absolute path of def_id as a vector of Symbol.

Examples
let def_path = cx.get_def_path(def_id);
if let &[sym::core, sym::option, sym::Option] = &def_path[..] {
    // The given `def_id` is that of an `Option` type
}

Trait Implementations

The TyAndLayout-wrapping type (or TyAndLayout itself), which will be returned from layout_of (see also handle_layout_err). Read more

Helper used for layout_of, to adapt tcx.layout_of(...) into a Self::LayoutOfResult (which does not need to be a Result<...>). Read more

Span to use for tcx.at(span), from layout_of.

Gets the overall compiler Session object.

Emit a lint at the appropriate level, with no associated span.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

Computes the layout of a type. Note that this implicitly executes in “reveal all” mode, and will normalize the input type. Read more

Computes the layout of a type, at span. Note that this implicitly executes in “reveal all” mode, and will normalize the input type. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

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