Skip to content

Commit 89698b9

Browse files
committed
Extend and improve initial test cases for collapsible_str_replace
1 parent a4413f7 commit 89698b9

File tree

1 file changed

+39
-13
lines changed

1 file changed

+39
-13
lines changed

tests/ui/collapsible_str_replace.rs

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,70 @@
11
#![warn(clippy::collapsible_str_replace)]
22

3+
fn get_filter() -> &'static str {
4+
"u"
5+
}
6+
37
fn main() {
48
let misspelled = "hesuo worpd";
59

610
let p = 'p';
711
let s = 's';
812
let u = 'u';
913

14+
// LINT CASES
1015
// If the first argument to a single `str::replace` call is a slice and none of the chars
1116
// are variables, recommend `collapsible_str_replace`
1217
let replacement = misspelled.replace(&['s', 'u', 'p'], "l");
1318
println!("{replacement}");
1419

15-
// The first iteration of `collapsible_str_replace` will not create lint if the first argument to
16-
// a single `str::replace` call is a slice and one or more of its chars are variables
17-
let replacement = misspelled.replace(&['s', u, 'p'], "l");
18-
println!("{replacement}");
19-
20-
let replacement = misspelled.replace(&[s, u, 'p'], "l");
20+
// If there are consecutive calls to `str::replace` and none of the chars are variables,
21+
// recommend `collapsible_str_replace`
22+
let replacement = misspelled.replace('s', "l").replace('u', "l");
2123
println!("{replacement}");
2224

23-
let replacement = misspelled.replace(&[s, u, p], "l");
25+
let replacement = misspelled.replace('s', "l").replace('u', "l").replace('p', "l");
2426
println!("{replacement}");
2527

26-
// If there is a single call to `str::replace` and the first argument is a char or a variable, don't
27-
// not recommend `collapsible_str_replace`
28+
// NO LINT CASES
29+
// If there is a single call to `str::replace` and the first argument is a char or a variable,
30+
// do not recommend `collapsible_str_replace`
2831
let replacement = misspelled.replace('s', "l");
2932
println!("{replacement}");
3033

3134
let replacement = misspelled.replace(s, "l");
3235
println!("{replacement}");
3336

34-
// If there are consecutive calls to `str::replace` and none of the chars are variables,
35-
// recommend `collapsible_str_replace`
36-
let replacement = misspelled.replace('s', "l").replace('u', "l");
37+
// If the `from` argument is of kind other than a slice or a char, do not lint
38+
let replacement = misspelled.replace(&get_filter(), "l");
39+
40+
// NO LINT TIL IMPROVEMENT
41+
// If multiple `str::replace` calls contain slices and none of the chars are variables,
42+
// the first iteration does not recommend `collapsible_str_replace`
43+
let replacement = misspelled.replace(&['s', 'u', 'p'], "l").replace(&['s', 'p'], "l");
3744
println!("{replacement}");
3845

39-
let replacement = misspelled.replace('s', "l").replace('u', "l").replace('p', "l");
46+
// If a mixture of `str::replace` calls with slice and char arguments are used for `from` arg,
47+
// the first iteration does not recommend `collapsible_str_replace`
48+
let replacement = misspelled.replace(&['s', 'u'], "l").replace('p', "l");
49+
println!("replacement");
50+
51+
let replacement = misspelled.replace('p', "l").replace(&['s', 'u'], "l");
52+
53+
// The first iteration of `collapsible_str_replace` will not create lint if the first argument to
54+
// a single `str::replace` call is a slice and one or more of its chars are variables
55+
let replacement = misspelled.replace(&['s', u, 'p'], "l");
56+
println!("{replacement}");
57+
58+
let replacement = misspelled.replace(&[s, u, 'p'], "l");
59+
println!("{replacement}");
60+
61+
let replacement = misspelled.replace(&[s, u, p], "l");
62+
println!("{replacement}");
63+
64+
let replacement = misspelled.replace(&[s, u], "l").replace(&[u, p], "l");
4065
println!("{replacement}");
4166

67+
// FALLBACK CASES
4268
// If there are consecutive calls to `str::replace` and all or any chars are variables,
4369
// recommend the fallback `misspelled.replace(&[s, u, p], "l")`
4470
let replacement = misspelled.replace(s, "l").replace('u', "l");

0 commit comments

Comments
 (0)