1 use std::collections::{BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
2 
main()3 fn main() {
4     let sample = [1; 5];
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<_>>();
8     indirect_len.len();
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();
15     indirect_negative
16         .into_iter()
17         .map(|x| (*x, *x + 1))
18         .collect::<HashMap<_, _>>();
19 
20     // #6202
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);
25 
26     // Fix #5991
27     let vec_a = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
28     let vec_b = vec_a.iter().collect::<Vec<_>>();
29     if vec_b.len() > 3 {}
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<_>>();
32 
33     // Fix #6297
34     let sample = [1; 5];
35     let multiple_indirect = sample.iter().collect::<Vec<_>>();
36     let sample2 = vec![2, 3];
37     if multiple_indirect.is_empty() {
38         // do something
39     } else {
40         let found = sample2
41             .iter()
42             .filter(|i| multiple_indirect.iter().any(|s| **s % **i == 0))
43             .collect::<Vec<_>>();
44     }
45 }
46 
47 mod issue7110 {
48     // #7110 - lint for type annotation cases
49     use super::*;
50 
lint_vec(string: &str) -> usize51     fn lint_vec(string: &str) -> usize {
52         let buffer: Vec<&str> = string.split('/').collect();
53         buffer.len()
54     }
lint_vec_deque() -> usize55     fn lint_vec_deque() -> usize {
56         let sample = [1; 5];
57         let indirect_len: VecDeque<_> = sample.iter().collect();
58         indirect_len.len()
59     }
lint_linked_list() -> usize60     fn lint_linked_list() -> usize {
61         let sample = [1; 5];
62         let indirect_len: LinkedList<_> = sample.iter().collect();
63         indirect_len.len()
64     }
lint_binary_heap() -> usize65     fn lint_binary_heap() -> usize {
66         let sample = [1; 5];
67         let indirect_len: BinaryHeap<_> = sample.iter().collect();
68         indirect_len.len()
69     }
dont_lint(string: &str) -> usize70     fn dont_lint(string: &str) -> usize {
71         let buffer: Vec<&str> = string.split('/').collect();
72         for buff in &buffer {
73             println!("{}", buff);
74         }
75         buffer.len()
76     }
77 }
78 
allow_test()79 fn allow_test() {
80     #[allow(clippy::needless_collect)]
81     let v = [1].iter().collect::<Vec<_>>();
82     v.into_iter().collect::<HashSet<_>>();
83 }
84