//@run-rustfix #![allow(unused, clippy::needless_if, clippy::suspicious_map, clippy::iter_count)] 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().collect::>().len(); if sample.iter().collect::>().is_empty() { // Empty } sample.iter().cloned().collect::>().contains(&1); // #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)).collect::>().is_empty(); sample.iter().map(|x| (x, x)).collect::>().is_empty(); // Notice the `HashSet`--this should not be linted sample.iter().collect::>().len(); // Neither should this sample.iter().collect::>().len(); sample.iter().collect::>().len(); sample.iter().collect::>().is_empty(); sample.iter().cloned().collect::>().contains(&1); sample.iter().collect::>().contains(&&1); // `BinaryHeap` doesn't have `contains` method sample.iter().collect::>().len(); sample.iter().collect::>().is_empty(); // Don't lint string from str let _ = ["", ""].into_iter().collect::().is_empty(); let _ = sample.iter().collect::>().is_empty(); let _ = sample.iter().collect::>().contains(&&0); 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().collect::>().is_empty(); let _ = sample.iter().collect::>().contains(&&0); #[allow(clippy::double_parens)] { Vec::::new().extend((0..10).collect::>()); foo((0..10).collect::>()); bar((0..10).collect::>(), (0..10).collect::>()); baz((0..10), (), ('a'..='z').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) {}