Clippy lints / Style
Clippy lint · Style · checked with Clippy 0.1.99
clippy::len_without_is_empty: Checks for items that implement .len() but not .is_empty()
What it meansChecks for items that implement .len() but not .is_empty(). It is in the style group and warns by default.
Does it matter?
It is good custom to have both methods, because for some data structures, asking about the length will be a costly operation, whereas .is_empty() can usually answer in constant time. Also it used to lead to false positives on the len_zero lint - currently that lint will ignore such entities.
Code that works but is not idiomatic Rust. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
impl X {
pub fn len(&self) -> usize {
..
}
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::len_without_is_empty)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
len_without_is_empty = "allow"One run
cargo clippy -- -A clippy::len-without-is-emptyThe [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 items that implement .len() but not
.is_empty().
Why is this bad?
It is good custom to have both methods, because for
some data structures, asking about the length will be a costly operation,
whereas .is_empty() can usually answer in constant time. Also it used to
lead to false positives on the len_zero lint - currently that
lint will ignore such entities.
Example
impl X {
pub fn len(&self) -> usize {
..
}
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- len_zeroChecks for getting the length of something via .len() just to compare to zero, and suggests using .is_empty() where applicable
- needless_returnunneeded `return` statement
- new_without_defaultChecks for public types with a pub fn new() -> Self method and no implementation of Default
- iter_skip_nextcalled `skip(..).next()` on an iterator
- just_underscores_and_digitsconsider choosing a more descriptive name
- legacy_numeric_constantsusage of a legacy numeric constant
- let_and_returnreturning the result of a `let` binding from a block
- let_unit_valuethis let-binding has unit value
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::len_zeroChecks for getting the length of something via .len() just to compare to zero, and suggests using .is_empty() where applicableRead it next →Did this answer your question?