#![allow( unused, clippy::needless_if, clippy::suspicious_map, clippy::iter_count, clippy::manual_contains )] use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList}; #[warn(clippy::needless_collect)] #[allow(unused_variables, clippy::iter_cloned_collect, clippy::iter_next_slice)] fn main() { let sample = [1; 5]; let len = sample.iter().count(); //~^ needless_collect if sample.iter().next().is_none() { //~^ needless_collect // Empty } sample.iter().cloned().any(|x| x == 1); //~^ needless_collect // #7164 HashMap's and BTreeMap's `len` usage should not be linted sample.iter().map(|x| (x, x)).collect::>().len(); sample.iter().map(|x| (x, x)).collect::>().len(); sample.iter().map(|x| (x, x)).next().is_none(); //~^ needless_collect sample.iter().map(|x| (x, x)).next().is_none(); //~^ needless_collect // Notice the `HashSet`--this should not be linted sample.iter().collect::>().len(); // Neither should this sample.iter().collect::>().len(); sample.iter().count(); //~^ needless_collect sample.iter().next().is_none(); //~^ needless_collect sample.iter().cloned().any(|x| x == 1); //~^ needless_collect sample.iter().any(|x| x == &1); //~^ needless_collect // `BinaryHeap` doesn't have `contains` method sample.iter().count(); //~^ needless_collect sample.iter().next().is_none(); //~^ needless_collect // Don't lint string from str let _ = ["", ""].into_iter().collect::().is_empty(); let _ = sample.iter().next().is_none(); //~^ needless_collect let _ = sample.iter().any(|x| x == &0); //~^ needless_collect struct VecWrapper(Vec); impl core::ops::Deref for VecWrapper { type Target = Vec; fn deref(&self) -> &Self::Target { &self.0 } } impl IntoIterator for VecWrapper { type IntoIter = as IntoIterator>::IntoIter; type Item = as IntoIterator>::Item; fn into_iter(self) -> Self::IntoIter { self.0.into_iter() } } impl FromIterator for VecWrapper { fn from_iter>(iter: I) -> Self { Self(Vec::from_iter(iter)) } } let _ = sample.iter().next().is_none(); //~^ needless_collect let _ = sample.iter().any(|x| x == &0); //~^ needless_collect #[allow(clippy::double_parens)] { Vec::::new().extend((0..10)); //~^ needless_collect foo((0..10)); //~^ needless_collect bar((0..10).collect::>(), (0..10)); //~^ needless_collect baz((0..10), (), ('a'..='z')) //~^ needless_collect } let values = [1, 2, 3, 4]; let mut out = vec![]; values.iter().cloned().map(|x| out.push(x)).collect::>(); let _y = values.iter().cloned().map(|x| out.push(x)).collect::>(); // this is fine } fn foo(_: impl IntoIterator) {} fn bar>(_: Vec, _: I) {} fn baz>(_: I, _: (), _: impl IntoIterator) {}