]> git.lizzy.rs Git - rust.git/blob - tests/ui/manual_split_once.rs
Fix `unnecessary_cast` suggestion when taking a reference
[rust.git] / tests / ui / manual_split_once.rs
1 // run-rustfix
2
3 #![warn(clippy::manual_split_once)]
4 #![allow(unused, clippy::iter_skip_next, clippy::iter_nth_zero)]
5
6 extern crate itertools;
7
8 #[allow(unused_imports)]
9 use itertools::Itertools;
10
11 fn main() {
12     let _ = "key=value".splitn(2, '=').nth(2);
13     let _ = "key=value".splitn(2, '=').nth(1).unwrap();
14     let _ = "key=value".splitn(2, '=').skip(1).next().unwrap();
15     let (_, _) = "key=value".splitn(2, '=').next_tuple().unwrap();
16
17     let s = String::from("key=value");
18     let _ = s.splitn(2, '=').nth(1).unwrap();
19
20     let s = Box::<str>::from("key=value");
21     let _ = s.splitn(2, '=').nth(1).unwrap();
22
23     let s = &"key=value";
24     let _ = s.splitn(2, '=').skip(1).next().unwrap();
25
26     fn _f(s: &str) -> Option<&str> {
27         let _ = s.splitn(2, '=').nth(1)?;
28         let _ = s.splitn(2, '=').skip(1).next()?;
29         let _ = s.rsplitn(2, '=').nth(1)?;
30         let _ = s.rsplitn(2, '=').skip(1).next()?;
31         None
32     }
33
34     // Don't lint, slices don't have `split_once`
35     let _ = [0, 1, 2].splitn(2, |&x| x == 1).nth(1).unwrap();
36
37     // `rsplitn` gives the results in the reverse order of `rsplit_once`
38     let _ = "key=value".rsplitn(2, '=').nth(1).unwrap();
39     let (_, _) = "key=value".rsplitn(2, '=').next_tuple().unwrap();
40     let _ = s.rsplitn(2, '=').nth(1);
41 }
42
43 fn indirect() -> Option<()> {
44     let mut iter = "a.b.c".splitn(2, '.');
45     let l = iter.next().unwrap();
46     let r = iter.next().unwrap();
47
48     let mut iter = "a.b.c".splitn(2, '.');
49     let l = iter.next()?;
50     let r = iter.next()?;
51
52     let mut iter = "a.b.c".rsplitn(2, '.');
53     let r = iter.next().unwrap();
54     let l = iter.next().unwrap();
55
56     let mut iter = "a.b.c".rsplitn(2, '.');
57     let r = iter.next()?;
58     let l = iter.next()?;
59
60     // could lint, currently doesn't
61
62     let mut iter = "a.b.c".splitn(2, '.');
63     let other = 1;
64     let l = iter.next()?;
65     let r = iter.next()?;
66
67     let mut iter = "a.b.c".splitn(2, '.');
68     let mut mut_binding = iter.next()?;
69     let r = iter.next()?;
70
71     let mut iter = "a.b.c".splitn(2, '.');
72     let tuple = (iter.next()?, iter.next()?);
73
74     // should not lint
75
76     let mut missing_unwrap = "a.b.c".splitn(2, '.');
77     let l = missing_unwrap.next();
78     let r = missing_unwrap.next();
79
80     let mut mixed_unrap = "a.b.c".splitn(2, '.');
81     let unwrap = mixed_unrap.next().unwrap();
82     let question_mark = mixed_unrap.next()?;
83
84     let mut iter = "a.b.c".splitn(2, '.');
85     let same_name = iter.next()?;
86     let same_name = iter.next()?;
87
88     let mut iter = "a.b.c".splitn(2, '.');
89     let shadows_existing = "d";
90     let shadows_existing = iter.next()?;
91     let r = iter.next()?;
92
93     let mut iter = "a.b.c".splitn(2, '.');
94     let becomes_shadowed = iter.next()?;
95     let becomes_shadowed = "d";
96     let r = iter.next()?;
97
98     let mut iter = "a.b.c".splitn(2, '.');
99     let l = iter.next()?;
100     let r = iter.next()?;
101     let third_usage = iter.next()?;
102
103     let mut n_three = "a.b.c".splitn(3, '.');
104     let l = n_three.next()?;
105     let r = n_three.next()?;
106
107     let mut iter = "a.b.c".splitn(2, '.');
108     {
109         let in_block = iter.next()?;
110     }
111     let r = iter.next()?;
112
113     let mut lacks_binding = "a.b.c".splitn(2, '.');
114     let _ = lacks_binding.next()?;
115     let r = lacks_binding.next()?;
116
117     let mut mapped = "a.b.c".splitn(2, '.').map(|_| "~");
118     let l = iter.next()?;
119     let r = iter.next()?;
120
121     let mut assigned = "";
122     let mut iter = "a.b.c".splitn(2, '.');
123     let l = iter.next()?;
124     assigned = iter.next()?;
125
126     None
127 }
128
129 #[clippy::msrv = "1.51"]
130 fn _msrv_1_51() {
131     // `str::split_once` was stabilized in 1.52. Do not lint this
132     let _ = "key=value".splitn(2, '=').nth(1).unwrap();
133
134     let mut iter = "a.b.c".splitn(2, '.');
135     let a = iter.next().unwrap();
136     let b = iter.next().unwrap();
137 }
138
139 #[clippy::msrv = "1.52"]
140 fn _msrv_1_52() {
141     let _ = "key=value".splitn(2, '=').nth(1).unwrap();
142
143     let mut iter = "a.b.c".splitn(2, '.');
144     let a = iter.next().unwrap();
145     let b = iter.next().unwrap();
146 }