-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: use multipart_suggestions for str_splitn (#13789)
This addresses #13099 for the manual_split_once test, using the str_splitn lint. changelog: [str_splitn]: Updated str_splitn to use multipart_suggestions where appropriate
- Loading branch information
Showing
4 changed files
with
196 additions
and
80 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
#![warn(clippy::manual_split_once)] | ||
#![allow(unused, clippy::iter_skip_next, clippy::iter_nth_zero)] | ||
|
||
extern crate itertools; | ||
|
||
#[allow(unused_imports)] | ||
use itertools::Itertools; | ||
|
||
fn main() { | ||
let _ = "key=value".splitn(2, '=').nth(2); | ||
let _ = "key=value".split_once('=').unwrap().1; | ||
let _ = "key=value".split_once('=').unwrap().1; | ||
let (_, _) = "key=value".split_once('=').unwrap(); | ||
|
||
let s = String::from("key=value"); | ||
let _ = s.split_once('=').unwrap().1; | ||
|
||
let s = Box::<str>::from("key=value"); | ||
let _ = s.split_once('=').unwrap().1; | ||
|
||
let s = &"key=value"; | ||
let _ = s.split_once('=').unwrap().1; | ||
|
||
fn _f(s: &str) -> Option<&str> { | ||
let _ = s.split_once('=')?.1; | ||
let _ = s.split_once('=')?.1; | ||
let _ = s.rsplit_once('=')?.0; | ||
let _ = s.rsplit_once('=')?.0; | ||
None | ||
} | ||
|
||
// Don't lint, slices don't have `split_once` | ||
let _ = [0, 1, 2].splitn(2, |&x| x == 1).nth(1).unwrap(); | ||
|
||
// `rsplitn` gives the results in the reverse order of `rsplit_once` | ||
let _ = "key=value".rsplit_once('=').unwrap().0; | ||
let (_, _) = "key=value".rsplit_once('=').map(|(x, y)| (y, x)).unwrap(); | ||
let _ = s.rsplit_once('=').map(|x| x.0); | ||
} | ||
|
||
fn indirect() -> Option<()> { | ||
let (l, r) = "a.b.c".split_once('.').unwrap(); | ||
|
||
|
||
|
||
let (l, r) = "a.b.c".split_once('.')?; | ||
|
||
|
||
|
||
let (l, r) = "a.b.c".rsplit_once('.').unwrap(); | ||
|
||
|
||
|
||
let (l, r) = "a.b.c".rsplit_once('.')?; | ||
|
||
|
||
|
||
// could lint, currently doesn't | ||
|
||
let mut iter = "a.b.c".splitn(2, '.'); | ||
let other = 1; | ||
let l = iter.next()?; | ||
let r = iter.next()?; | ||
|
||
let mut iter = "a.b.c".splitn(2, '.'); | ||
let mut mut_binding = iter.next()?; | ||
let r = iter.next()?; | ||
|
||
let mut iter = "a.b.c".splitn(2, '.'); | ||
let tuple = (iter.next()?, iter.next()?); | ||
|
||
// should not lint | ||
|
||
let mut missing_unwrap = "a.b.c".splitn(2, '.'); | ||
let l = missing_unwrap.next(); | ||
let r = missing_unwrap.next(); | ||
|
||
let mut mixed_unrap = "a.b.c".splitn(2, '.'); | ||
let unwrap = mixed_unrap.next().unwrap(); | ||
let question_mark = mixed_unrap.next()?; | ||
|
||
let mut iter = "a.b.c".splitn(2, '.'); | ||
let same_name = iter.next()?; | ||
let same_name = iter.next()?; | ||
|
||
let mut iter = "a.b.c".splitn(2, '.'); | ||
let shadows_existing = "d"; | ||
let shadows_existing = iter.next()?; | ||
let r = iter.next()?; | ||
|
||
let mut iter = "a.b.c".splitn(2, '.'); | ||
let becomes_shadowed = iter.next()?; | ||
let becomes_shadowed = "d"; | ||
let r = iter.next()?; | ||
|
||
let mut iter = "a.b.c".splitn(2, '.'); | ||
let l = iter.next()?; | ||
let r = iter.next()?; | ||
let third_usage = iter.next()?; | ||
|
||
let mut n_three = "a.b.c".splitn(3, '.'); | ||
let l = n_three.next()?; | ||
let r = n_three.next()?; | ||
|
||
let mut iter = "a.b.c".splitn(2, '.'); | ||
{ | ||
let in_block = iter.next()?; | ||
} | ||
let r = iter.next()?; | ||
|
||
let mut lacks_binding = "a.b.c".splitn(2, '.'); | ||
let _ = lacks_binding.next()?; | ||
let r = lacks_binding.next()?; | ||
|
||
let mut mapped = "a.b.c".splitn(2, '.').map(|_| "~"); | ||
let l = iter.next()?; | ||
let r = iter.next()?; | ||
|
||
let mut assigned = ""; | ||
let mut iter = "a.b.c".splitn(2, '.'); | ||
let l = iter.next()?; | ||
assigned = iter.next()?; | ||
|
||
None | ||
} | ||
|
||
#[clippy::msrv = "1.51"] | ||
fn _msrv_1_51() { | ||
// `str::split_once` was stabilized in 1.52. Do not lint this | ||
let _ = "key=value".splitn(2, '=').nth(1).unwrap(); | ||
|
||
let mut iter = "a.b.c".splitn(2, '.'); | ||
let a = iter.next().unwrap(); | ||
let b = iter.next().unwrap(); | ||
} | ||
|
||
#[clippy::msrv = "1.52"] | ||
fn _msrv_1_52() { | ||
let _ = "key=value".split_once('=').unwrap().1; | ||
|
||
let (a, b) = "a.b.c".split_once('.').unwrap(); | ||
|
||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.