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
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
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
This API is completely unstable and subject to change.
array_into_iterlint detects calling
LintStoreabout all the built-in lints (the ones defined in this crate and the ones defined in
LintStorefrom the query context. This function exists because we’ve erased
dyn Anyin the context.