Crate rustc_lint

source ·
Expand description

Lints, aka compiler warnings.

A ‘lint’ check is a kind of miscellaneous constraint that a user might want to enforce, but might reasonably want to permit as well, on a module-by-module basis. They contrast with static constraints enforced by other phases of the compiler, which are generally required to hold in order to compile the program at all.

Most lints can be written as LintPass instances. These run after all other analyses. The LintPasses built into rustc are defined within rustc_session::lint::builtin, which has further comments on how to add such a lint. rustc can also load user-defined lint plugins via the plugin mechanism.

Some of rustc’s lints are defined elsewhere in the compiler and work by calling add_lint() on the overall Session object. This works when it happens before the main lint pass, which emits the lints stored by add_lint(). To emit lints after the main lint pass (from codegen, for example) requires more effort. See emit_lint and GatherNodeLevels in context.rs.

Some code also exists in rustc_session::lint, rustc_middle::lint.

Note

This API is completely unstable and subject to change.

Re-exports

pub use builtin::SoftLints;
pub use rustc_session::lint::Level::*;

Modules

Lints in the Rust compiler.
context 🔒
Implementation of lint checking.
early 🔒
Implementation of lint checking.
errors 🔒
expect 🔒
internal 🔒
Some lints that are only useful in the compiler or crates that use compiler internals, such as Clippy.
late 🔒
Implementation of lint checking.
levels 🔒
methods 🔒
passes 🔒
traits 🔒
types 🔒
unused 🔒

Macros

Combines multiple lints passes into a single lint pass, at compile time, for maximum speed. Each check_foo method in $methods within this pass simply calls check_foo once per $pass. Compare with EarlyLintPassObjects, which is similar, but combines lint passes at runtime.
Combines multiple lints passes into a single lint pass, at compile time, for maximum speed. Each check_foo method in $methods within this pass simply calls check_foo once per $pass. Compare with LateLintPassObjects, which is similar, but combines lint passes at runtime.

Structs

Lints that are buffered up early on in the Session before the LintLevels is calculated.
Context for lint checking of the AST, after expansion, before lowering to HIR.
Extra information for a future incompatibility lint.
Context for lint checking outside of type inference.
Specification of a single lint.
Identifies a lint known to the compiler.
Information about the registered lints.

Enums

Setting for how to handle a lint.

Statics

The array_into_iter lint detects calling into_iter on arrays.

Traits

Early lints work on different nodes - either on the crate root, or on freshly loaded modules. This trait generalizes over those nodes.

Functions

Performs lint checking on a crate.
lint_mod 🔒
Tell the LintStore about all the built-in lints (the ones defined in this crate and the ones defined in rustc_session::lint::builtin).
Extract the LintStore from the query context. This function exists because we’ve erased LintStore as dyn Any in the context.

Type Definitions