needless_collect: Lint LinkedList
and BinaryHeap
in direct usage.
Those two types are supported already when used indirectly. This commit adds support for direct usage as well.
This commit is contained in:
parent
59ccc1efb3
commit
171789eb45
|
@ -31,7 +31,9 @@ fn check_needless_collect_direct_usage<'tcx>(expr: &'tcx Expr<'_>, cx: &LateCont
|
||||||
let is_empty_sugg = Some("next().is_none()".to_string());
|
let is_empty_sugg = Some("next().is_none()".to_string());
|
||||||
let method_name = &*method.ident.name.as_str();
|
let method_name = &*method.ident.name.as_str();
|
||||||
let sugg = if is_type_diagnostic_item(cx, ty, sym::vec_type) ||
|
let sugg = if is_type_diagnostic_item(cx, ty, sym::vec_type) ||
|
||||||
is_type_diagnostic_item(cx, ty, sym::vecdeque_type) {
|
is_type_diagnostic_item(cx, ty, sym::vecdeque_type) ||
|
||||||
|
is_type_diagnostic_item(cx, ty, sym::LinkedList) ||
|
||||||
|
is_type_diagnostic_item(cx, ty, sym::BinaryHeap) {
|
||||||
match method_name {
|
match method_name {
|
||||||
"len" => Some("count()".to_string()),
|
"len" => Some("count()".to_string()),
|
||||||
"is_empty" => is_empty_sugg,
|
"is_empty" => is_empty_sugg,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#![allow(unused, clippy::suspicious_map, clippy::iter_count)]
|
#![allow(unused, clippy::suspicious_map, clippy::iter_count)]
|
||||||
|
|
||||||
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
|
use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList};
|
||||||
|
|
||||||
#[warn(clippy::needless_collect)]
|
#[warn(clippy::needless_collect)]
|
||||||
#[allow(unused_variables, clippy::iter_cloned_collect, clippy::iter_next_slice)]
|
#[allow(unused_variables, clippy::iter_cloned_collect, clippy::iter_next_slice)]
|
||||||
|
@ -24,4 +24,13 @@ fn main() {
|
||||||
sample.iter().collect::<HashSet<_>>().len();
|
sample.iter().collect::<HashSet<_>>().len();
|
||||||
// Neither should this
|
// Neither should this
|
||||||
sample.iter().collect::<BTreeSet<_>>().len();
|
sample.iter().collect::<BTreeSet<_>>().len();
|
||||||
|
|
||||||
|
sample.iter().count();
|
||||||
|
sample.iter().next().is_none();
|
||||||
|
sample.iter().cloned().any(|x| x == 1);
|
||||||
|
sample.iter().any(|x| x == &1);
|
||||||
|
|
||||||
|
// `BinaryHeap` doesn't have `contains` method
|
||||||
|
sample.iter().count();
|
||||||
|
sample.iter().next().is_none();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#![allow(unused, clippy::suspicious_map, clippy::iter_count)]
|
#![allow(unused, clippy::suspicious_map, clippy::iter_count)]
|
||||||
|
|
||||||
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
|
use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList};
|
||||||
|
|
||||||
#[warn(clippy::needless_collect)]
|
#[warn(clippy::needless_collect)]
|
||||||
#[allow(unused_variables, clippy::iter_cloned_collect, clippy::iter_next_slice)]
|
#[allow(unused_variables, clippy::iter_cloned_collect, clippy::iter_next_slice)]
|
||||||
|
@ -24,4 +24,13 @@ fn main() {
|
||||||
sample.iter().collect::<HashSet<_>>().len();
|
sample.iter().collect::<HashSet<_>>().len();
|
||||||
// Neither should this
|
// Neither should this
|
||||||
sample.iter().collect::<BTreeSet<_>>().len();
|
sample.iter().collect::<BTreeSet<_>>().len();
|
||||||
|
|
||||||
|
sample.iter().collect::<LinkedList<_>>().len();
|
||||||
|
sample.iter().collect::<LinkedList<_>>().is_empty();
|
||||||
|
sample.iter().cloned().collect::<LinkedList<_>>().contains(&1);
|
||||||
|
sample.iter().collect::<LinkedList<_>>().contains(&&1);
|
||||||
|
|
||||||
|
// `BinaryHeap` doesn't have `contains` method
|
||||||
|
sample.iter().collect::<BinaryHeap<_>>().len();
|
||||||
|
sample.iter().collect::<BinaryHeap<_>>().is_empty();
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,5 +30,41 @@ error: avoid using `collect()` when not needed
|
||||||
LL | sample.iter().map(|x| (x, x)).collect::<BTreeMap<_, _>>().is_empty();
|
LL | sample.iter().map(|x| (x, x)).collect::<BTreeMap<_, _>>().is_empty();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `next().is_none()`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `next().is_none()`
|
||||||
|
|
||||||
error: aborting due to 5 previous errors
|
error: avoid using `collect()` when not needed
|
||||||
|
--> $DIR/needless_collect.rs:28:19
|
||||||
|
|
|
||||||
|
LL | sample.iter().collect::<LinkedList<_>>().len();
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `count()`
|
||||||
|
|
||||||
|
error: avoid using `collect()` when not needed
|
||||||
|
--> $DIR/needless_collect.rs:29:19
|
||||||
|
|
|
||||||
|
LL | sample.iter().collect::<LinkedList<_>>().is_empty();
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `next().is_none()`
|
||||||
|
|
||||||
|
error: avoid using `collect()` when not needed
|
||||||
|
--> $DIR/needless_collect.rs:30:28
|
||||||
|
|
|
||||||
|
LL | sample.iter().cloned().collect::<LinkedList<_>>().contains(&1);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `any(|x| x == 1)`
|
||||||
|
|
||||||
|
error: avoid using `collect()` when not needed
|
||||||
|
--> $DIR/needless_collect.rs:31:19
|
||||||
|
|
|
||||||
|
LL | sample.iter().collect::<LinkedList<_>>().contains(&&1);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `any(|x| x == &1)`
|
||||||
|
|
||||||
|
error: avoid using `collect()` when not needed
|
||||||
|
--> $DIR/needless_collect.rs:34:19
|
||||||
|
|
|
||||||
|
LL | sample.iter().collect::<BinaryHeap<_>>().len();
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `count()`
|
||||||
|
|
||||||
|
error: avoid using `collect()` when not needed
|
||||||
|
--> $DIR/needless_collect.rs:35:19
|
||||||
|
|
|
||||||
|
LL | sample.iter().collect::<BinaryHeap<_>>().is_empty();
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `next().is_none()`
|
||||||
|
|
||||||
|
error: aborting due to 11 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue