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