1 use std
::collections
::{BinaryHeap, HashMap, HashSet, LinkedList, VecDeque}
;
5 let indirect_iter
= sample
.iter().collect
::<Vec
<_
>>();
6 indirect_iter
.into_iter().map(|x
| (x
, x
+ 1)).collect
::<HashMap
<_
, _
>>();
7 let indirect_len
= sample
.iter().collect
::<VecDeque
<_
>>();
9 let indirect_empty
= sample
.iter().collect
::<VecDeque
<_
>>();
10 indirect_empty
.is_empty();
11 let indirect_contains
= sample
.iter().collect
::<VecDeque
<_
>>();
12 indirect_contains
.contains(&&5);
13 let indirect_negative
= sample
.iter().collect
::<Vec
<_
>>();
14 indirect_negative
.len();
17 .map(|x
| (*x
, *x
+ 1))
18 .collect
::<HashMap
<_
, _
>>();
21 let a
= "a".to_string();
22 let sample
= vec
![a
.clone(), "b".to_string(), "c".to_string()];
23 let non_copy_contains
= sample
.into_iter().collect
::<Vec
<_
>>();
24 non_copy_contains
.contains(&a
);
27 let vec_a
= vec
![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
28 let vec_b
= vec_a
.iter().collect
::<Vec
<_
>>();
30 let other_vec
= vec
![1, 3, 12, 4, 16, 2];
31 let we_got_the_same_numbers
= other_vec
.iter().filter(|item
| vec_b
.contains(item
)).collect
::<Vec
<_
>>();
35 let multiple_indirect
= sample
.iter().collect
::<Vec
<_
>>();
36 let sample2
= vec
![2, 3];
37 if multiple_indirect
.is_empty() {
42 .filter(|i
| multiple_indirect
.iter().any(|s
| **s
% **i
== 0))
48 // #7110 - lint for type annotation cases
51 fn lint_vec(string
: &str) -> usize {
52 let buffer
: Vec
<&str> = string
.split('
/'
).collect();
55 fn lint_vec_deque() -> usize {
57 let indirect_len
: VecDeque
<_
> = sample
.iter().collect();
60 fn lint_linked_list() -> usize {
62 let indirect_len
: LinkedList
<_
> = sample
.iter().collect();
65 fn lint_binary_heap() -> usize {
67 let indirect_len
: BinaryHeap
<_
> = sample
.iter().collect();
70 fn dont_lint(string
: &str) -> usize {
71 let buffer
: Vec
<&str> = string
.split('
/'
).collect();
82 fn direct_mapping_with_used_mutable_reference() -> Vec
<()> {
83 let test_vec
: Vec
<()> = vec
![];
84 let mut vec_2
: Vec
<()> = vec
![];
85 let mut_ref
= &mut vec_2
;
86 let collected_vec
: Vec
<_
> = test_vec
.into_iter().map(|_
| mut_ref
.push(())).collect();
87 collected_vec
.into_iter().map(|_
| mut_ref
.push(())).collect()
90 fn indirectly_mapping_with_used_mutable_reference() -> Vec
<()> {
91 let test_vec
: Vec
<()> = vec
![];
92 let mut vec_2
: Vec
<()> = vec
![];
93 let mut_ref
= &mut vec_2
;
94 let collected_vec
: Vec
<_
> = test_vec
.into_iter().map(|_
| mut_ref
.push(())).collect();
95 let iter
= collected_vec
.into_iter();
96 iter
.map(|_
| mut_ref
.push(())).collect()
99 fn indirect_collect_after_indirect_mapping_with_used_mutable_reference() -> Vec
<()> {
100 let test_vec
: Vec
<()> = vec
![];
101 let mut vec_2
: Vec
<()> = vec
![];
102 let mut_ref
= &mut vec_2
;
103 let collected_vec
: Vec
<_
> = test_vec
.into_iter().map(|_
| mut_ref
.push(())).collect();
104 let iter
= collected_vec
.into_iter();
105 let mapped_iter
= iter
.map(|_
| mut_ref
.push(()));
106 mapped_iter
.collect()
111 #[allow(clippy::needless_collect)]
112 let v
= [1].iter().collect
::<Vec
<_
>>();
113 v
.into_iter().collect
::<HashSet
<_
>>();
118 let vec
= vec
![1, 2];
119 let w
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
122 // Do not lint, because this method call is in the loop
127 let y
: Vec
<usize> = vec
.iter().map(|k
| k
* k
).collect();
128 let z
: Vec
<usize> = vec
.iter().map(|k
| k
* k
).collect();
132 // Do not lint, because this method call is in the loop
137 // Do not lint, because this variable is used.
142 let vec
= vec
![1, 2];
143 let x
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
146 // Do not lint, because this method call is in the loop
152 let y
: Vec
<usize> = vec
.iter().map(|k
| k
* k
).collect();
153 let z
: Vec
<usize> = vec
.iter().map(|k
| k
* k
).collect();
158 // Do not lint, because this method call is in the loop
166 let vec
= vec
![1, 2];
167 let x
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
171 // Do not lint, because this method call is in the loop
181 let y
: Vec
<usize> = vec
.iter().map(|k
| k
* k
).collect();
182 let z
: Vec
<usize> = vec
.iter().map(|k
| k
* k
).collect();
188 // Do not lint, because this method call is in the loop
201 fn test_while_let() {
202 let vec
= vec
![1, 2];
203 let x
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
204 let optional
= Some(0);
206 while let Some(value
) = optional
{
208 // Do not lint, because this method call is in the loop
216 while let Some(value
) = optional
{
217 let y
: Vec
<usize> = vec
.iter().map(|k
| k
* k
).collect();
218 let z
: Vec
<usize> = vec
.iter().map(|k
| k
* k
).collect();
227 while let Some(value
) = optional
{
229 // Do not lint, because this method call is in the loop
240 let vec
= vec
![1, 2];
241 let v
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
242 let w
= v
.iter().collect
::<Vec
<_
>>();
244 for _
in 0..w
.len() {
249 fn test_if_cond_false_case() {
250 let vec
= vec
![1, 2];
251 let v
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
252 let w
= v
.iter().collect
::<Vec
<_
>>();
253 // Do not lint, because w is used.
254 for _
in 0..w
.len() {
261 fn test_while_cond() {
262 let mut vec
= vec
![1, 2];
263 let mut v
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
264 let mut w
= v
.iter().collect
::<Vec
<_
>>();
271 fn test_while_cond_false_case() {
272 let mut vec
= vec
![1, 2];
273 let mut v
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
274 let mut w
= v
.iter().collect
::<Vec
<_
>>();
275 // Do not lint, because w is used.
283 fn test_while_let_cond() {
284 let mut vec
= vec
![1, 2];
285 let mut v
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
286 let mut w
= v
.iter().collect
::<Vec
<_
>>();
288 while let Some(i
) = Some(w
.len()) {
293 fn test_while_let_cond_false_case() {
294 let mut vec
= vec
![1, 2];
295 let mut v
: Vec
<usize> = vec
.iter().map(|i
| i
* i
).collect();
296 let mut w
= v
.iter().collect
::<Vec
<_
>>();
297 // Do not lint, because w is used.
298 while let Some(i
) = Some(w
.len()) {