Struct rustc_lint::context::LateContext
source · 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 effective_visibilities: &'tcx EffectiveVisibilities,
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.
effective_visibilities: &'tcx EffectiveVisibilities
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: HirId
§generics: 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§
source§impl<'tcx> LateContext<'tcx>
impl<'tcx> LateContext<'tcx>
sourcepub fn maybe_typeck_results(&self) -> Option<&'tcx TypeckResults<'tcx>>
pub fn maybe_typeck_results(&self) -> Option<&'tcx TypeckResults<'tcx>>
Gets the type-checking results for the current body,
or None
if outside a body.
sourcepub fn typeck_results(&self) -> &'tcx TypeckResults<'tcx>
pub fn typeck_results(&self) -> &'tcx TypeckResults<'tcx>
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).
sourcepub fn qpath_res(&self, qpath: &QPath<'_>, id: HirId) -> Res
pub fn qpath_res(&self, qpath: &QPath<'_>, id: HirId) -> Res
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.
sourcepub fn match_def_path(&self, def_id: DefId, path: &[Symbol]) -> bool
pub fn match_def_path(&self, def_id: DefId, path: &[Symbol]) -> bool
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.
Trait Implementations§
source§impl<'tcx> HasDataLayout for LateContext<'tcx>
impl<'tcx> HasDataLayout for LateContext<'tcx>
fn data_layout(&self) -> &TargetDataLayout
source§impl<'tcx> HasParamEnv<'tcx> for LateContext<'tcx>
impl<'tcx> HasParamEnv<'tcx> for LateContext<'tcx>
source§impl<'tcx> LayoutOfHelpers<'tcx> for LateContext<'tcx>
impl<'tcx> LayoutOfHelpers<'tcx> for LateContext<'tcx>
§type LayoutOfResult = Result<TyAndLayout<'tcx, Ty<'tcx>>, LayoutError<'tcx>>
type LayoutOfResult = Result<TyAndLayout<'tcx, Ty<'tcx>>, LayoutError<'tcx>>
TyAndLayout
-wrapping type (or TyAndLayout
itself), which will be
returned from layout_of
(see also handle_layout_err
). Read moresource§fn handle_layout_err(
&self,
err: LayoutError<'tcx>,
_: Span,
_: Ty<'tcx>
) -> LayoutError<'tcx>
fn handle_layout_err(
&self,
err: LayoutError<'tcx>,
_: Span,
_: Ty<'tcx>
) -> LayoutError<'tcx>
layout_of
, to adapt tcx.layout_of(...)
into a
Self::LayoutOfResult
(which does not need to be a Result<...>
). Read moresource§fn layout_tcx_at_span(&self) -> Span
fn layout_tcx_at_span(&self) -> Span
Span
to use for tcx.at(span)
, from layout_of
.source§impl<'tcx> LintContext for LateContext<'tcx>
impl<'tcx> LintContext for LateContext<'tcx>
type PassObject = Box<dyn LateLintPass<'tcx> + 'tcx, Global>
fn lints(&self) -> &LintStore
source§fn lookup<S: Into<MultiSpan>>(
&self,
lint: &'static Lint,
span: Option<S>,
msg: impl Into<DiagnosticMessage>,
decorate: impl for<'a, 'b> FnOnce(&'b mut DiagnosticBuilder<'a, ()>) -> &'b mut DiagnosticBuilder<'a, ()>
)
fn lookup<S: Into<MultiSpan>>(
&self,
lint: &'static Lint,
span: Option<S>,
msg: impl Into<DiagnosticMessage>,
decorate: impl for<'a, 'b> FnOnce(&'b mut DiagnosticBuilder<'a, ()>) -> &'b mut DiagnosticBuilder<'a, ()>
)
source§fn get_lint_level(&self, lint: &'static Lint) -> Level
fn get_lint_level(&self, lint: &'static Lint) -> Level
source§fn lookup_with_diagnostics(
&self,
lint: &'static Lint,
span: Option<impl Into<MultiSpan>>,
msg: impl Into<DiagnosticMessage>,
decorate: impl for<'a, 'b> FnOnce(&'b mut DiagnosticBuilder<'a, ()>) -> &'b mut DiagnosticBuilder<'a, ()>,
diagnostic: BuiltinLintDiagnostics
)
fn lookup_with_diagnostics(
&self,
lint: &'static Lint,
span: Option<impl Into<MultiSpan>>,
msg: impl Into<DiagnosticMessage>,
decorate: impl for<'a, 'b> FnOnce(&'b mut DiagnosticBuilder<'a, ()>) -> &'b mut DiagnosticBuilder<'a, ()>,
diagnostic: BuiltinLintDiagnostics
)
source§fn emit_spanned_lint<S: Into<MultiSpan>>(
&self,
lint: &'static Lint,
span: S,
decorator: impl for<'a> DecorateLint<'a, ()>
)
fn emit_spanned_lint<S: Into<MultiSpan>>(
&self,
lint: &'static Lint,
span: S,
decorator: impl for<'a> DecorateLint<'a, ()>
)
span
from a lint struct (some type that implements DecorateLint
,
typically generated by #[derive(LintDiagnostic)]
). Read moresource§fn struct_span_lint<S: Into<MultiSpan>>(
&self,
lint: &'static Lint,
span: S,
msg: impl Into<DiagnosticMessage>,
decorate: impl for<'a, 'b> FnOnce(&'b mut DiagnosticBuilder<'a, ()>) -> &'b mut DiagnosticBuilder<'a, ()>
)
fn struct_span_lint<S: Into<MultiSpan>>(
&self,
lint: &'static Lint,
span: S,
msg: impl Into<DiagnosticMessage>,
decorate: impl for<'a, 'b> FnOnce(&'b mut DiagnosticBuilder<'a, ()>) -> &'b mut DiagnosticBuilder<'a, ()>
)
source§fn emit_lint(
&self,
lint: &'static Lint,
decorator: impl for<'a> DecorateLint<'a, ()>
)
fn emit_lint(
&self,
lint: &'static Lint,
decorator: impl for<'a> DecorateLint<'a, ()>
)
DecorateLint
, typically
generated by #[derive(LintDiagnostic)]
). Read moresource§fn lint(
&self,
lint: &'static Lint,
msg: impl Into<DiagnosticMessage>,
decorate: impl for<'a, 'b> FnOnce(&'b mut DiagnosticBuilder<'a, ()>) -> &'b mut DiagnosticBuilder<'a, ()>
)
fn lint(
&self,
lint: &'static Lint,
msg: impl Into<DiagnosticMessage>,
decorate: impl for<'a, 'b> FnOnce(&'b mut DiagnosticBuilder<'a, ()>) -> &'b mut DiagnosticBuilder<'a, ()>
)
source§fn fulfill_expectation(&self, expectation: LintExpectationId)
fn fulfill_expectation(&self, expectation: LintExpectationId)
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for LateContext<'tcx>
impl<'tcx> !Send for LateContext<'tcx>
impl<'tcx> !Sync for LateContext<'tcx>
impl<'tcx> Unpin for LateContext<'tcx>
impl<'tcx> !UnwindSafe for LateContext<'tcx>
Blanket Implementations§
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