Skip to content

Commit def7b3e

Browse files
committed
edit
1 parent c2e56e0 commit def7b3e

File tree

4 files changed

+38
-4
lines changed

4 files changed

+38
-4
lines changed

clippy_lints/src/methods/str_splitn.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,21 +254,25 @@ pub(super) fn check_needless_splitn(
254254
}
255255
let ctxt = expr.span.ctxt();
256256
let mut app = Applicability::MachineApplicable;
257+
let (reverse, message) = if method_name == "splitn" {
258+
(false, "unnecessary use of `splitn`")
259+
} else {
260+
(true, "unnecessary use of `rsplitn`")
261+
};
257262
if_chain! {
258-
if method_name == "splitn";
259263
if count >= 2;
260264
if check_iter(cx, ctxt, cx.tcx.hir().parent_iter(expr.hir_id), count);
261265
then {
262266
span_lint_and_sugg(
263267
cx,
264268
NEEDLESS_SPLITN,
265269
expr.span,
266-
"unnecessary use of `splitn`",
270+
message,
267271
"try this",
268272
format!(
269273
"{}.{}({})",
270274
snippet_with_context(cx, self_arg.span, ctxt, "..", &mut app).0,
271-
"split",
275+
if reverse {"rsplit"} else {"split"},
272276
snippet_with_context(cx, pat_arg.span, ctxt, "..", &mut app).0
273277
),
274278
app,

tests/ui/needless_splitn.fixed

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,10 @@ fn main() {
1818
let (_, _) = str.splitn(2, '=').next_tuple().unwrap();
1919
let (_, _) = str.split('=').next_tuple().unwrap();
2020
let _: Vec<&str> = str.splitn(3, '=').collect();
21+
22+
let _ = str.rsplit('=').next();
23+
let _ = str.rsplit('=').nth(0);
24+
let _ = str.rsplitn(2, '=').nth(1);
25+
let (_, _) = str.rsplitn(2, '=').next_tuple().unwrap();
26+
let (_, _) = str.rsplit('=').next_tuple().unwrap();
2127
}

tests/ui/needless_splitn.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,10 @@ fn main() {
1818
let (_, _) = str.splitn(2, '=').next_tuple().unwrap();
1919
let (_, _) = str.splitn(3, '=').next_tuple().unwrap();
2020
let _: Vec<&str> = str.splitn(3, '=').collect();
21+
22+
let _ = str.rsplitn(2, '=').next();
23+
let _ = str.rsplitn(2, '=').nth(0);
24+
let _ = str.rsplitn(2, '=').nth(1);
25+
let (_, _) = str.rsplitn(2, '=').next_tuple().unwrap();
26+
let (_, _) = str.rsplitn(3, '=').next_tuple().unwrap();
2127
}

tests/ui/needless_splitn.stderr

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,23 @@ error: unnecessary use of `splitn`
1818
LL | let (_, _) = str.splitn(3, '=').next_tuple().unwrap();
1919
| ^^^^^^^^^^^^^^^^^^ help: try this: `str.split('=')`
2020

21-
error: aborting due to 3 previous errors
21+
error: unnecessary use of `rsplitn`
22+
--> $DIR/needless_splitn.rs:22:13
23+
|
24+
LL | let _ = str.rsplitn(2, '=').next();
25+
| ^^^^^^^^^^^^^^^^^^^ help: try this: `str.rsplit('=')`
26+
27+
error: unnecessary use of `rsplitn`
28+
--> $DIR/needless_splitn.rs:23:13
29+
|
30+
LL | let _ = str.rsplitn(2, '=').nth(0);
31+
| ^^^^^^^^^^^^^^^^^^^ help: try this: `str.rsplit('=')`
32+
33+
error: unnecessary use of `rsplitn`
34+
--> $DIR/needless_splitn.rs:26:18
35+
|
36+
LL | let (_, _) = str.rsplitn(3, '=').next_tuple().unwrap();
37+
| ^^^^^^^^^^^^^^^^^^^ help: try this: `str.rsplit('=')`
38+
39+
error: aborting due to 6 previous errors
2240

0 commit comments

Comments
 (0)