diff options
| author | Jason Newcomb <jsnewcomb@pm.me> | 2022-04-20 16:10:18 -0400 |
|---|---|---|
| committer | Jason Newcomb <jsnewcomb@pm.me> | 2022-11-07 14:14:04 -0500 |
| commit | 8bfc8bc5e0210dabd2976edad5bf285a96dcb360 (patch) | |
| tree | 0e662336a1e381462695686c6d648bac7b45d0bc /tests | |
| parent | b0dcb862c60c87c55f4e34c2ecce8914ffe3c4c7 (diff) | |
Lint `needless_collect` on non-std collection types
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/needless_collect.fixed | 29 | ||||
| -rw-r--r-- | tests/ui/needless_collect.rs | 29 | ||||
| -rw-r--r-- | tests/ui/needless_collect.stderr | 26 |
3 files changed, 83 insertions, 1 deletions
diff --git a/tests/ui/needless_collect.fixed b/tests/ui/needless_collect.fixed index 6ecbbcb6249..2659ad38488 100644 --- a/tests/ui/needless_collect.fixed +++ b/tests/ui/needless_collect.fixed @@ -33,4 +33,33 @@ fn main() { // `BinaryHeap` doesn't have `contains` method sample.iter().count(); sample.iter().next().is_none(); + + // Don't lint string from str + let _ = ["", ""].into_iter().collect::<String>().is_empty(); + + let _ = sample.iter().next().is_none(); + let _ = sample.iter().any(|x| x == &0); + + struct VecWrapper<T>(Vec<T>); + impl<T> core::ops::Deref for VecWrapper<T> { + type Target = Vec<T>; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl<T> IntoIterator for VecWrapper<T> { + type IntoIter = <Vec<T> as IntoIterator>::IntoIter; + type Item = <Vec<T> as IntoIterator>::Item; + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } + } + impl<T> FromIterator<T> for VecWrapper<T> { + fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self { + Self(Vec::from_iter(iter)) + } + } + + let _ = sample.iter().next().is_none(); + let _ = sample.iter().any(|x| x == &0); } diff --git a/tests/ui/needless_collect.rs b/tests/ui/needless_collect.rs index 8dc69bcf5b3..535ec82982b 100644 --- a/tests/ui/needless_collect.rs +++ b/tests/ui/needless_collect.rs @@ -33,4 +33,33 @@ fn main() { // `BinaryHeap` doesn't have `contains` method sample.iter().collect::<BinaryHeap<_>>().len(); sample.iter().collect::<BinaryHeap<_>>().is_empty(); + + // Don't lint string from str + let _ = ["", ""].into_iter().collect::<String>().is_empty(); + + let _ = sample.iter().collect::<HashSet<_>>().is_empty(); + let _ = sample.iter().collect::<HashSet<_>>().contains(&&0); + + struct VecWrapper<T>(Vec<T>); + impl<T> core::ops::Deref for VecWrapper<T> { + type Target = Vec<T>; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl<T> IntoIterator for VecWrapper<T> { + type IntoIter = <Vec<T> as IntoIterator>::IntoIter; + type Item = <Vec<T> as IntoIterator>::Item; + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } + } + impl<T> FromIterator<T> for VecWrapper<T> { + fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self { + Self(Vec::from_iter(iter)) + } + } + + let _ = sample.iter().collect::<VecWrapper<_>>().is_empty(); + let _ = sample.iter().collect::<VecWrapper<_>>().contains(&&0); } diff --git a/tests/ui/needless_collect.stderr b/tests/ui/needless_collect.stderr index 039091627a8..584d2a1d835 100644 --- a/tests/ui/needless_collect.stderr +++ b/tests/ui/needless_collect.stderr @@ -66,5 +66,29 @@ error: avoid using `collect()` when not needed LL | sample.iter().collect::<BinaryHeap<_>>().is_empty(); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `next().is_none()` -error: aborting due to 11 previous errors +error: avoid using `collect()` when not needed + --> $DIR/needless_collect.rs:40:27 + | +LL | let _ = sample.iter().collect::<HashSet<_>>().is_empty(); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `next().is_none()` + +error: avoid using `collect()` when not needed + --> $DIR/needless_collect.rs:41:27 + | +LL | let _ = sample.iter().collect::<HashSet<_>>().contains(&&0); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `any(|x| x == &0)` + +error: avoid using `collect()` when not needed + --> $DIR/needless_collect.rs:63:27 + | +LL | let _ = sample.iter().collect::<VecWrapper<_>>().is_empty(); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `next().is_none()` + +error: avoid using `collect()` when not needed + --> $DIR/needless_collect.rs:64:27 + | +LL | let _ = sample.iter().collect::<VecWrapper<_>>().contains(&&0); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `any(|x| x == &0)` + +error: aborting due to 15 previous errors |
