rustc_lint::context

Struct LintStore

source
pub struct LintStore {
    lints: Vec<&'static Lint>,
    pub pre_expansion_passes: Vec<Box<dyn Fn() -> Box<dyn EarlyLintPass + 'static> + DynSend + DynSync>>,
    pub early_passes: Vec<Box<dyn Fn() -> Box<dyn EarlyLintPass + 'static> + DynSend + DynSync>>,
    pub late_passes: Vec<Box<dyn for<'tcx> Fn(TyCtxt<'tcx>) -> Box<dyn LateLintPass<'tcx> + 'tcx> + DynSend + DynSync>>,
    pub late_module_passes: Vec<Box<dyn for<'tcx> Fn(TyCtxt<'tcx>) -> Box<dyn LateLintPass<'tcx> + 'tcx> + DynSend + DynSync>>,
    by_name: UnordMap<String, TargetLint>,
    lint_groups: FxIndexMap<&'static str, LintGroup>,
}
Expand description

Information about the registered lints.

This is basically the subset of Context that we can build early in the compile pipeline.

Fields§

§lints: Vec<&'static Lint>

Registered lints.

§pre_expansion_passes: Vec<Box<dyn Fn() -> Box<dyn EarlyLintPass + 'static> + DynSend + DynSync>>

Constructor functions for each variety of lint pass.

These should only be called once, but since we want to avoid locks or interior mutability, we don’t enforce this (and lints should, in theory, be compatible with being constructed more than once, though not necessarily in a sane manner. This is safe though.)

§early_passes: Vec<Box<dyn Fn() -> Box<dyn EarlyLintPass + 'static> + DynSend + DynSync>>§late_passes: Vec<Box<dyn for<'tcx> Fn(TyCtxt<'tcx>) -> Box<dyn LateLintPass<'tcx> + 'tcx> + DynSend + DynSync>>§late_module_passes: Vec<Box<dyn for<'tcx> Fn(TyCtxt<'tcx>) -> Box<dyn LateLintPass<'tcx> + 'tcx> + DynSend + DynSync>>

This is unique in that we construct them per-module, so not once.

§by_name: UnordMap<String, TargetLint>

Lints indexed by name.

§lint_groups: FxIndexMap<&'static str, LintGroup>

Map of registered lint groups to what lints they expand to.

Implementations§

source§

impl LintStore

source

pub fn new() -> LintStore

source

pub fn get_lints<'t>(&'t self) -> &'t [&'static Lint]

source

pub fn get_lint_groups<'t>( &'t self, ) -> impl Iterator<Item = (&'static str, Vec<LintId>, bool)> + 't

source

pub fn register_early_pass( &mut self, pass: impl Fn() -> Box<dyn EarlyLintPass + 'static> + 'static + DynSend + DynSync, )

source

pub fn register_pre_expansion_pass( &mut self, pass: impl Fn() -> Box<dyn EarlyLintPass + 'static> + 'static + DynSend + DynSync, )

This lint pass is softly deprecated. It misses expanded code and has caused a few errors in the past. Currently, it is only used in Clippy. New implementations should avoid using this interface, as it might be removed in the future.

source

pub fn register_late_pass( &mut self, pass: impl for<'tcx> Fn(TyCtxt<'tcx>) -> Box<dyn LateLintPass<'tcx> + 'tcx> + 'static + DynSend + DynSync, )

source

pub fn register_late_mod_pass( &mut self, pass: impl for<'tcx> Fn(TyCtxt<'tcx>) -> Box<dyn LateLintPass<'tcx> + 'tcx> + 'static + DynSend + DynSync, )

source

pub fn register_lints(&mut self, lints: &[&'static Lint])

Helper method for register_early/late_pass

source

pub fn register_group_alias( &mut self, lint_name: &'static str, alias: &'static str, )

source

pub fn register_group( &mut self, is_externally_loaded: bool, name: &'static str, deprecated_name: Option<&'static str>, to: Vec<LintId>, )

source

pub fn register_ignored(&mut self, name: &str)

This lint should give no warning and have no effect.

This is used by rustc to avoid warning about old rustdoc lints before rustdoc registers them as tool lints.

source

pub fn register_renamed(&mut self, old_name: &str, new_name: &str)

This lint has been renamed; warn about using the new name and apply the lint.

source

pub fn register_removed(&mut self, name: &str, reason: &str)

source

pub fn find_lints(&self, lint_name: &str) -> Result<Vec<LintId>, FindLintError>

source

pub fn is_lint_group(&self, lint_name: Symbol) -> bool

True if this symbol represents a lint group name.

source

pub fn check_lint_name( &self, lint_name: &str, tool_name: Option<Symbol>, registered_tools: &RegisteredTools, ) -> CheckLintNameResult<'_>

Checks the name of a lint for its existence, and whether it was renamed or removed. Generates a Diag containing a warning for renamed and removed lints. This is over both lint names from attributes and those passed on the command line. Since it emits non-fatal warnings and there are two lint passes that inspect attributes, this is only run from the late pass to avoid printing duplicate warnings.

source

fn no_lint_suggestion( &self, lint_name: &str, tool_name: &str, ) -> CheckLintNameResult<'_>

source

fn check_tool_name_for_backwards_compat( &self, lint_name: &str, tool_name: &str, ) -> CheckLintNameResult<'_>

Trait Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = _

Alignment of Self.
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, R> CollectAndApply<T, R> for T

source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

source§

type Output = R

source§

impl<T> Filterable for T

source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. 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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<P> IntoQueryParam<P> for P

source§

impl<T> MaybeResult<T> for T

source§

type Error = !

source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
source§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
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<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

source§

fn upcast(self, interner: I) -> U

source§

impl<I, T> UpcastFrom<I, T> for T

source§

fn upcast_from(from: T, _tcx: I) -> T

source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

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

impl<'a, T> Captures<'a> for T
where T: ?Sized,

source§

impl<T> ErasedDestructor for T
where T: 'static,

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: 208 bytes