Clippy lints / Nursery
Clippy lint · Nursery · checked with Clippy 0.1.99
clippy::clear_with_drain: `drain` used to clear a `Vec`
What it meansChecks for usage of .drain(..) for the sole purpose of clearing a container. It is in the nursery group and off by default.
What you see
warning: `drain` used to clear a `Vec` --> main.rs:4:3 | 4 | v.drain(..); | ^^^^^^^^^ help: try: `clear()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#clear_with_drain = note: `-W clippy::clear-with-drain` implied by `-W clippy::nursery`
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?
This creates an unnecessary iterator that is dropped immediately. Calling .clear() also makes the intent clearer.
New lints still being finished. Off by default and may have false positives.
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.drain(..);
Write this instead
let mut v = vec![1, 2, 3];
v.clear();
Turn it off, or on
It is off by default. To use it, set it to warn or deny:
Whole crate (Cargo.toml)
[lints.clippy]
clear_with_drain = "warn"In code
#![warn(clippy::clear_with_drain)]One run
cargo clippy -- -W clippy::clear-with-drainThe [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 usage of .drain(..) for the sole purpose of clearing a container.
Why is this bad?
This creates an unnecessary iterator that is dropped immediately.
Calling .clear() also makes the intent clearer.
Example
let mut v = vec![1, 2, 3];
v.drain(..);
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
- redundant_cloneChecks for a redundant clone() (and its relatives) which clones an owned value that is going to be dropped without further use
- as_ptr_cast_mutcasting the result of `as_ptr` to *mut u8
- branches_sharing_codeChecks if the blocks of an if/else, or the arms of a match, contain shared code that can be moved out of the branches
- coerce_container_to_anyProtects against unintended coercion of references to container types to &dyn Any when the container type dereferences to a dyn Any which could be directly referenced instead
- collection_is_never_readChecks for collections that are never queried
- debug_assert_with_mut_callChecks for function/method calls with a mutable parameter in debug_assert!, debug_assert_eq! and debug_assert_ne! macros
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::redundant_cloneChecks for a redundant clone() (and its relatives) which clones an owned value that is going to be dropped without further useRead it next →Did this answer your question?