3 #![feature(custom_inner_attributes)]
4 #![warn(clippy::manual_split_once)]
5 #![allow(unused, clippy::iter_skip_next, clippy::iter_nth_zero)]
7 extern crate itertools;
9 #[allow(unused_imports)]
10 use itertools::Itertools;
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();
18 let s = String::from("key=value");
19 let _ = s.splitn(2, '=').nth(1).unwrap();
21 let s = Box::<str>::from("key=value");
22 let _ = s.splitn(2, '=').nth(1).unwrap();
25 let _ = s.splitn(2, '=').skip(1).next().unwrap();
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()?;
35 // Don't lint, slices don't have `split_once`
36 let _ = [0, 1, 2].splitn(2, |&x| x == 1).nth(1).unwrap();
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);
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();
49 let mut iter = "a.b.c".splitn(2, '.');
53 let mut iter = "a.b.c".rsplitn(2, '.');
54 let r = iter.next().unwrap();
55 let l = iter.next().unwrap();
57 let mut iter = "a.b.c".rsplitn(2, '.');
61 // could lint, currently doesn't
63 let mut iter = "a.b.c".splitn(2, '.');
68 let mut iter = "a.b.c".splitn(2, '.');
69 let mut mut_binding = iter.next()?;
72 let mut iter = "a.b.c".splitn(2, '.');
73 let tuple = (iter.next()?, iter.next()?);
77 let mut missing_unwrap = "a.b.c".splitn(2, '.');
78 let l = missing_unwrap.next();
79 let r = missing_unwrap.next();
81 let mut mixed_unrap = "a.b.c".splitn(2, '.');
82 let unwrap = mixed_unrap.next().unwrap();
83 let question_mark = mixed_unrap.next()?;
85 let mut iter = "a.b.c".splitn(2, '.');
86 let same_name = iter.next()?;
87 let same_name = iter.next()?;
89 let mut iter = "a.b.c".splitn(2, '.');
90 let shadows_existing = "d";
91 let shadows_existing = iter.next()?;
94 let mut iter = "a.b.c".splitn(2, '.');
95 let becomes_shadowed = iter.next()?;
96 let becomes_shadowed = "d";
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()?;
104 let mut n_three = "a.b.c".splitn(3, '.');
105 let l = n_three.next()?;
106 let r = n_three.next()?;
108 let mut iter = "a.b.c".splitn(2, '.');
110 let in_block = iter.next()?;
112 let r = iter.next()?;
114 let mut lacks_binding = "a.b.c".splitn(2, '.');
115 let _ = lacks_binding.next()?;
116 let r = lacks_binding.next()?;
118 let mut mapped = "a.b.c".splitn(2, '.').map(|_| "~");
119 let l = iter.next()?;
120 let r = iter.next()?;
122 let mut assigned = "";
123 let mut iter = "a.b.c".splitn(2, '.');
124 let l = iter.next()?;
125 assigned = iter.next()?;
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();
135 let mut iter = "a.b.c".splitn(2, '.');
136 let a = iter.next().unwrap();
137 let b = iter.next().unwrap();
141 #![clippy::msrv = "1.52"]
142 let _ = "key=value".splitn(2, '=').nth(1).unwrap();
144 let mut iter = "a.b.c".splitn(2, '.');
145 let a = iter.next().unwrap();
146 let b = iter.next().unwrap();