needless_collect: avoid warning if non-iterator methods are used
It can make sense to `collect()` an iterator and then immediately iterate over it if the iterator has special methods that you need. For example, the Map iterator doesn't implement Clone, but the collection iterator might. Or the collection iterator might support slicing.
This commit is contained in:
parent
75e3a2e905
commit
c012693961
3 changed files with 93 additions and 6 deletions
|
|
@ -73,6 +73,20 @@ fn main() {
|
|||
let mut out = vec![];
|
||||
values.iter().cloned().map(|x| out.push(x)).collect::<Vec<_>>();
|
||||
let _y = values.iter().cloned().map(|x| out.push(x)).collect::<Vec<_>>(); // this is fine
|
||||
|
||||
// Don't write a warning if we call `clone()` on the iterator
|
||||
// https://github.com/rust-lang/rust-clippy/issues/13430
|
||||
let my_collection: Vec<()> = vec![()].into_iter().map(|()| {}).collect();
|
||||
let _cloned = my_collection.into_iter().clone();
|
||||
let my_collection: Vec<()> = vec![()].into_iter().map(|()| {}).collect();
|
||||
let my_iter = my_collection.into_iter();
|
||||
let _cloned = my_iter.clone();
|
||||
// Same for `as_slice()`, for same reason.
|
||||
let my_collection: Vec<()> = vec![()].into_iter().map(|()| {}).collect();
|
||||
let _sliced = my_collection.into_iter().as_slice();
|
||||
let my_collection: Vec<()> = vec![()].into_iter().map(|()| {}).collect();
|
||||
let my_iter = my_collection.into_iter();
|
||||
let _sliced = my_iter.as_slice();
|
||||
}
|
||||
|
||||
fn foo(_: impl IntoIterator<Item = usize>) {}
|
||||
|
|
|
|||
|
|
@ -73,6 +73,20 @@ fn main() {
|
|||
let mut out = vec![];
|
||||
values.iter().cloned().map(|x| out.push(x)).collect::<Vec<_>>();
|
||||
let _y = values.iter().cloned().map(|x| out.push(x)).collect::<Vec<_>>(); // this is fine
|
||||
|
||||
// Don't write a warning if we call `clone()` on the iterator
|
||||
// https://github.com/rust-lang/rust-clippy/issues/13430
|
||||
let my_collection: Vec<()> = vec![()].into_iter().map(|()| {}).collect();
|
||||
let _cloned = my_collection.into_iter().clone();
|
||||
let my_collection: Vec<()> = vec![()].into_iter().map(|()| {}).collect();
|
||||
let my_iter = my_collection.into_iter();
|
||||
let _cloned = my_iter.clone();
|
||||
// Same for `as_slice()`, for same reason.
|
||||
let my_collection: Vec<()> = vec![()].into_iter().map(|()| {}).collect();
|
||||
let _sliced = my_collection.into_iter().as_slice();
|
||||
let my_collection: Vec<()> = vec![()].into_iter().map(|()| {}).collect();
|
||||
let my_iter = my_collection.into_iter();
|
||||
let _sliced = my_iter.as_slice();
|
||||
}
|
||||
|
||||
fn foo(_: impl IntoIterator<Item = usize>) {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue