]> git.lizzy.rs Git - rust.git/blob - tests/ui/iter_nth.rs
Add a new lint for unused self
[rust.git] / tests / ui / iter_nth.rs
1 // aux-build:option_helpers.rs
2
3 #![allow(clippy::unused_self)]
4 #![warn(clippy::iter_nth)]
5
6 #[macro_use]
7 extern crate option_helpers;
8
9 use option_helpers::IteratorFalsePositives;
10 use std::collections::VecDeque;
11
12 /// Struct to generate false positives for things with `.iter()`.
13 #[derive(Copy, Clone)]
14 struct HasIter;
15
16 impl HasIter {
17     fn iter(self) -> IteratorFalsePositives {
18         IteratorFalsePositives { foo: 0 }
19     }
20
21     fn iter_mut(self) -> IteratorFalsePositives {
22         IteratorFalsePositives { foo: 0 }
23     }
24 }
25
26 /// Checks implementation of `ITER_NTH` lint.
27 fn iter_nth() {
28     let mut some_vec = vec![0, 1, 2, 3];
29     let mut boxed_slice: Box<[u8]> = Box::new([0, 1, 2, 3]);
30     let mut some_vec_deque: VecDeque<_> = some_vec.iter().cloned().collect();
31
32     {
33         // Make sure we lint `.iter()` for relevant types.
34         let bad_vec = some_vec.iter().nth(3);
35         let bad_slice = &some_vec[..].iter().nth(3);
36         let bad_boxed_slice = boxed_slice.iter().nth(3);
37         let bad_vec_deque = some_vec_deque.iter().nth(3);
38     }
39
40     {
41         // Make sure we lint `.iter_mut()` for relevant types.
42         let bad_vec = some_vec.iter_mut().nth(3);
43     }
44     {
45         let bad_slice = &some_vec[..].iter_mut().nth(3);
46     }
47     {
48         let bad_vec_deque = some_vec_deque.iter_mut().nth(3);
49     }
50
51     // Make sure we don't lint for non-relevant types.
52     let false_positive = HasIter;
53     let ok = false_positive.iter().nth(3);
54     let ok_mut = false_positive.iter_mut().nth(3);
55 }
56
57 fn main() {}