Clippy lints / Suspicious
Clippy lint · Suspicious · checked with Clippy 0.1.99
clippy::redundant_locals: redundant redefinition of a binding `a`
What it meansChecks for redundant redefinitions of local bindings. It is in the suspicious group and warns by default.
What you see
warning: redundant redefinition of a binding `a` --> main.rs:4:1 | 4 | let a = a; | ^^^^^^^^^^ | help: `a` is initially defined here --> main.rs:3:5 | 3 | let a = 0; | ^ = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#redundant_locals = note: `#[warn(clippy::redundant_locals)]` on by default
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
Redundant redefinitions of local bindings do not change behavior other than variable’s lifetimes and are likely to be unintended. These rebindings can be intentional to shorten the lifetimes of variables because they affect when the Drop implementation is called. Other than that, they do not affect your code’s meaning but they may affect rustc’s stack allocation.
Code that is most likely wrong or useless. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
let a = 0;
let a = a;
fn foo(b: i32) {
let b = b;
}
Write this instead
let a = 0;
// no redefinition with the same name
fn foo(b: i32) {
// no redefinition with the same name
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::redundant_locals)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
redundant_locals = "allow"One run
cargo clippy -- -A clippy::redundant-localsThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Checks for redundant redefinitions of local bindings.
Why is this bad?
Redundant redefinitions of local bindings do not change behavior other than variable’s lifetimes and are likely to be unintended.
These rebindings can be intentional to shorten the lifetimes of variables because they affect when the Drop implementation is called. Other than that, they do not affect your code’s meaning but they may affect rustc’s stack allocation.
Example
let a = 0;
let a = a;
fn foo(b: i32) {
let b = b;
}
Use instead:
let a = 0;
// no redefinition with the same name
fn foo(b: i32) {
// no redefinition with the same name
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- possible_missing_elsethis looks like an `else {..}` but the `else` is missing
- print_in_format_impluse of `println!` in `Display` impl
- rc_clone_in_vec_initinitializing a reference-counted pointer in `vec![elem; len]`
- repeat_vec_with_capacityLooks for patterns such as vec![Vec::with_capacity(x); n] or iter::repeat(Vec::with_capacity(x))
- repr_packed_without_abiitem uses `packed` representation without ABI-qualification
- single_range_in_vec_initan array of `Range` that is only one element
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::possible_missing_elsethis looks like an `else {..}` but the `else` is missingRead it next →Did this answer your question?