diff options
| author | Mateusz Gacek <96mateusz.gacek@gmail.com> | 2021-05-04 12:36:20 -0700 |
|---|---|---|
| committer | Mateusz Gacek <96mateusz.gacek@gmail.com> | 2021-05-04 12:38:30 -0700 |
| commit | 1835d8a2383c8ae3d26cdcba594fdb933a41f3fb (patch) | |
| tree | 63d8b66c1e2b0b119f68f3f3c8aedd0eaf5a7637 | |
| parent | 0dc38c047e742d7d3c9f42866305a8c849eb4894 (diff) | |
| download | rust-1835d8a2383c8ae3d26cdcba594fdb933a41f3fb.tar.gz rust-1835d8a2383c8ae3d26cdcba594fdb933a41f3fb.zip | |
needless_collect: Add `BinaryHeap` for indirect usage lint
| -rw-r--r-- | clippy_lints/src/loops/needless_collect.rs | 1 | ||||
| -rw-r--r-- | tests/ui/needless_collect_indirect.rs | 7 | ||||
| -rw-r--r-- | tests/ui/needless_collect_indirect.stderr | 16 |
3 files changed, 22 insertions, 2 deletions
diff --git a/clippy_lints/src/loops/needless_collect.rs b/clippy_lints/src/loops/needless_collect.rs index 293dd8b6b79..88d586c9346 100644 --- a/clippy_lints/src/loops/needless_collect.rs +++ b/clippy_lints/src/loops/needless_collect.rs @@ -85,6 +85,7 @@ fn check_needless_collect_indirect_usage<'tcx>(expr: &'tcx Expr<'_>, cx: &LateCo if let ty = cx.typeck_results().node_type(hir_id); 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::BinaryHeap) || match_type(cx, ty, &paths::LINKED_LIST); if let Some(iter_calls) = detect_iter_and_into_iters(block, *ident); if let [iter_call] = &*iter_calls; diff --git a/tests/ui/needless_collect_indirect.rs b/tests/ui/needless_collect_indirect.rs index 2647c6401a4..2458bf1e490 100644 --- a/tests/ui/needless_collect_indirect.rs +++ b/tests/ui/needless_collect_indirect.rs @@ -1,4 +1,4 @@ -use std::collections::{HashMap, LinkedList, VecDeque}; +use std::collections::{BinaryHeap, HashMap, LinkedList, VecDeque}; fn main() { let sample = [1; 5]; @@ -62,6 +62,11 @@ mod issue7110 { let indirect_len: LinkedList<_> = sample.iter().collect(); indirect_len.len() } + fn lint_binary_heap() -> usize { + let sample = [1; 5]; + let indirect_len: BinaryHeap<_> = sample.iter().collect(); + indirect_len.len() + } fn dont_lint(string: &str) -> usize { let buffer: Vec<&str> = string.split('/').collect(); for buff in &buffer { diff --git a/tests/ui/needless_collect_indirect.stderr b/tests/ui/needless_collect_indirect.stderr index 642beb2865a..f094e182a48 100644 --- a/tests/ui/needless_collect_indirect.stderr +++ b/tests/ui/needless_collect_indirect.stderr @@ -111,5 +111,19 @@ LL | LL | sample.iter().count() | -error: aborting due to 8 previous errors +error: avoid using `collect()` when not needed + --> $DIR/needless_collect_indirect.rs:67:57 + | +LL | let indirect_len: BinaryHeap<_> = sample.iter().collect(); + | ^^^^^^^ +LL | indirect_len.len() + | ------------------ the iterator could be used here instead + | +help: take the original Iterator's count instead of collecting it and finding the length + | +LL | +LL | sample.iter().count() + | + +error: aborting due to 9 previous errors |
