Clippy lints / Suspicious
Clippy lint · Suspicious · checked with Clippy 0.1.99
clippy::iter_out_of_bounds: this `.take()` call takes more items than the iterator will produce
What it meansLooks for iterator combinator calls such as .take(x) or .skip(x) where x is greater than the amount of items that an iterator will produce. It is in the suspicious group and warns by default.
What you see
warning: this `.take()` call takes more items than the iterator will produce --> main.rs:3:10 | 3 | for _ in [1, 2, 3].iter().take(4) {} | ^^^^^^^^^^^^^^^^^^^^^^^^ | = note: this operation is useless and the returned iterator will simply yield the same items = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#iter_out_of_bounds = note: `#[warn(clippy::iter_out_of_bounds)]` 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?
Taking or skipping more items than there are in an iterator either creates an iterator with all items from the original iterator or an iterator with no items at all. This is most likely not what the user intended to do.
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
for _ in [1, 2, 3].iter().take(4) {}
Write this instead
for _ in [1, 2, 3].iter() {}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::iter_out_of_bounds)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
iter_out_of_bounds = "allow"One run
cargo clippy -- -A clippy::iter-out-of-boundsThe [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
Looks for iterator combinator calls such as .take(x) or .skip(x)
where x is greater than the amount of items that an iterator will produce.
Why is this bad?
Taking or skipping more items than there are in an iterator either creates an iterator with all items from the original iterator or an iterator with no items at all. This is most likely not what the user intended to do.
Example
for _ in [1, 2, 3].iter().take(4) {}
Use instead:
for _ in [1, 2, 3].iter() {}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- incompatible_msrvThis lint checks that no function newer than the defined MSRV (minimum supported rust version) is used in the crate
- ineffective_open_optionsChecks if both .write(true) and .append(true) methods are called on a same OpenOptions
- infallible_try_frominfallible TryFrom impl; consider implementing From instead
- join_absolute_pathsChecks for calls to Path::join that start with a path separator (\\ or /)
- let_underscore_futurenon-binding `let` on a future
- lines_filter_map_okChecks for usage of lines.filter_map(Result::ok) or lines.flat_map(Result::ok) when lines has type std::io::Lines
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::incompatible_msrvThis lint checks that no function newer than the defined MSRV (minimum supported rust version) is used in the crateRead it next →Did this answer your question?