pub static NON_LOCAL_DEFINITIONS: &Lint
Expand description
The non_local_definitions
lint checks for impl
blocks and #[macro_export]
macro inside bodies (functions, enum discriminant, …).
§Example
#![warn(non_local_definitions)]
trait MyTrait {}
struct MyStruct;
fn foo() {
impl MyTrait for MyStruct {}
}
{{produces}}
§Explanation
Creating non-local definitions go against expectation and can create discrepancies in tooling. It should be avoided. It may become deny-by-default in edition 2024 and higher, see the tracking issue https://github.com/rust-lang/rust/issues/120363.
An impl
definition is non-local if it is nested inside an item and neither
the type nor the trait are at the same nesting level as the impl
block.
All nested bodies (functions, enum discriminant, array length, consts) (expect for
const _: Ty = { ... }
in top-level module, which is still undecided) are checked.