Clippy lints / Performance
Clippy lint · Performance · checked with Clippy 0.1.99
clippy::manual_clear: truncating to zero length
What it meansChecks for .truncate(0) calls on standard library types where it can be replaced with .clear(). Currently this includes Vec, VecDeque, String, and OsString. It is in the performance group and warns by default.
What you see
warning: truncating to zero length --> main.rs:4:1 | 4 | v.truncate(0); | ^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#manual_clear = note: `#[warn(clippy::manual_clear)]` on by default help: use `clear()` instead | 4 - v.truncate(0); 4 + v.clear(); |
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?
clear() expresses the intent better and is likely to be more efficient than truncate(0).
Code that could be written to run faster. Warns by default.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
let mut v = vec![1, 2, 3];
v.truncate(0);
Write this instead
let mut v = vec![1, 2, 3];
v.clear();
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::manual_clear)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
manual_clear = "allow"One run
cargo clippy -- -A clippy::manual-clearThe [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 .truncate(0) calls on standard library types where it can be replaced with .clear().
Currently this includes Vec, VecDeque, String, and OsString.
Why is this bad?
clear() expresses the intent better and is likely to be more efficient than truncate(0).
Example
let mut v = vec![1, 2, 3];
v.truncate(0);
Use instead:
let mut v = vec![1, 2, 3];
v.clear();
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- large_enum_variantlarge size difference between variants
- iter_overeager_clonedChecks for usage of _.cloned().<func>() where call to .cloned() can be postponed
- large_const_arraysChecks for large const arrays that should be defined as static instead
- manual_containsusing `contains()` instead of `iter().any()` is more efficient
- manual_ignore_case_cmpmanual case-insensitive ASCII comparison
- manual_memcpyChecks for for-loops that manually copy items between slices that could be optimized by having a memcpy
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::large_enum_variantlarge size difference between variantsRead it next →Did this answer your question?