Skip to content

Commit 3492856

Browse files
committed
Auto merge of #10047 - Alexendoo:collapsible-str-replace-msrv, r=xFrednet
Add 1.58 MSRV for `collapsible_str_replace` The `Pattern` impl for `[char; N]` was added in 1.58 changelog: Enhancement: [`collapsible_str_replace`]: Now takes MSRV into consideration. The minimal version is 1.58 [#10047](#10047)
2 parents 5a3a722 + 591c18d commit 3492856

File tree

5 files changed

+47
-16
lines changed

5 files changed

+47
-16
lines changed

clippy_lints/src/methods/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3672,7 +3672,10 @@ impl Methods {
36723672
no_effect_replace::check(cx, expr, arg1, arg2);
36733673

36743674
// Check for repeated `str::replace` calls to perform `collapsible_str_replace` lint
3675-
if name == "replace" && let Some(("replace", ..)) = method_call(recv) {
3675+
if self.msrv.meets(msrvs::PATTERN_TRAIT_CHAR_ARRAY)
3676+
&& name == "replace"
3677+
&& let Some(("replace", ..)) = method_call(recv)
3678+
{
36763679
collapsible_str_replace::check(cx, expr, arg1, arg2);
36773680
}
36783681
},

clippy_utils/src/msrvs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ macro_rules! msrv_aliases {
2121
msrv_aliases! {
2222
1,65,0 { LET_ELSE }
2323
1,62,0 { BOOL_THEN_SOME }
24-
1,58,0 { FORMAT_ARGS_CAPTURE }
24+
1,58,0 { FORMAT_ARGS_CAPTURE, PATTERN_TRAIT_CHAR_ARRAY }
2525
1,53,0 { OR_PATTERNS, MANUAL_BITS, BTREE_MAP_RETAIN, BTREE_SET_RETAIN, ARRAY_INTO_ITERATOR }
2626
1,52,0 { STR_SPLIT_ONCE, REM_EUCLID_CONST }
2727
1,51,0 { BORROW_AS_PTR, SEEK_FROM_CURRENT, UNSIGNED_ABS }

tests/ui/collapsible_str_replace.fixed

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// run-rustfix
22

3+
#![allow(unused)]
34
#![warn(clippy::collapsible_str_replace)]
45

56
fn get_filter() -> char {
@@ -71,3 +72,13 @@ fn main() {
7172
.replace('u', iter.next().unwrap())
7273
.replace('s', iter.next().unwrap());
7374
}
75+
76+
#[clippy::msrv = "1.57"]
77+
fn msrv_1_57() {
78+
let _ = "".replace('a', "1.57").replace('b', "1.57");
79+
}
80+
81+
#[clippy::msrv = "1.58"]
82+
fn msrv_1_58() {
83+
let _ = "".replace(['a', 'b'], "1.58");
84+
}

tests/ui/collapsible_str_replace.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// run-rustfix
22

3+
#![allow(unused)]
34
#![warn(clippy::collapsible_str_replace)]
45

56
fn get_filter() -> char {
@@ -74,3 +75,13 @@ fn main() {
7475
.replace('u', iter.next().unwrap())
7576
.replace('s', iter.next().unwrap());
7677
}
78+
79+
#[clippy::msrv = "1.57"]
80+
fn msrv_1_57() {
81+
let _ = "".replace('a', "1.57").replace('b', "1.57");
82+
}
83+
84+
#[clippy::msrv = "1.58"]
85+
fn msrv_1_58() {
86+
let _ = "".replace('a', "1.58").replace('b', "1.58");
87+
}
Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
error: used consecutive `str::replace` call
2-
--> $DIR/collapsible_str_replace.rs:19:27
2+
--> $DIR/collapsible_str_replace.rs:20:27
33
|
44
LL | let _ = "hesuo worpd".replace('s', "l").replace('u', "l");
55
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['s', 'u'], "l")`
66
|
77
= note: `-D clippy::collapsible-str-replace` implied by `-D warnings`
88

99
error: used consecutive `str::replace` call
10-
--> $DIR/collapsible_str_replace.rs:21:27
10+
--> $DIR/collapsible_str_replace.rs:22:27
1111
|
1212
LL | let _ = "hesuo worpd".replace('s', l).replace('u', l);
1313
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['s', 'u'], l)`
1414

1515
error: used consecutive `str::replace` call
16-
--> $DIR/collapsible_str_replace.rs:23:27
16+
--> $DIR/collapsible_str_replace.rs:24:27
1717
|
1818
LL | let _ = "hesuo worpd".replace('s', "l").replace('u', "l").replace('p', "l");
1919
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['s', 'u', 'p'], "l")`
2020

2121
error: used consecutive `str::replace` call
22-
--> $DIR/collapsible_str_replace.rs:26:10
22+
--> $DIR/collapsible_str_replace.rs:27:10
2323
|
2424
LL | .replace('s', "l")
2525
| __________^
@@ -29,58 +29,64 @@ LL | | .replace('d', "l");
2929
| |__________________________^ help: replace with: `replace(['s', 'u', 'p', 'd'], "l")`
3030

3131
error: used consecutive `str::replace` call
32-
--> $DIR/collapsible_str_replace.rs:31:27
32+
--> $DIR/collapsible_str_replace.rs:32:27
3333
|
3434
LL | let _ = "hesuo world".replace(s, "l").replace('u', "l");
3535
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([s, 'u'], "l")`
3636

3737
error: used consecutive `str::replace` call
38-
--> $DIR/collapsible_str_replace.rs:33:27
38+
--> $DIR/collapsible_str_replace.rs:34:27
3939
|
4040
LL | let _ = "hesuo worpd".replace(s, "l").replace('u', "l").replace('p', "l");
4141
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([s, 'u', 'p'], "l")`
4242

4343
error: used consecutive `str::replace` call
44-
--> $DIR/collapsible_str_replace.rs:35:27
44+
--> $DIR/collapsible_str_replace.rs:36:27
4545
|
4646
LL | let _ = "hesuo worpd".replace(s, "l").replace(u, "l").replace('p', "l");
4747
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([s, u, 'p'], "l")`
4848

4949
error: used consecutive `str::replace` call
50-
--> $DIR/collapsible_str_replace.rs:37:27
50+
--> $DIR/collapsible_str_replace.rs:38:27
5151
|
5252
LL | let _ = "hesuo worpd".replace(s, "l").replace(u, "l").replace(p, "l");
5353
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([s, u, p], "l")`
5454

5555
error: used consecutive `str::replace` call
56-
--> $DIR/collapsible_str_replace.rs:39:27
56+
--> $DIR/collapsible_str_replace.rs:40:27
5757
|
5858
LL | let _ = "hesuo worlp".replace('s', "l").replace('u', "l").replace('p', "d");
5959
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['s', 'u'], "l")`
6060

6161
error: used consecutive `str::replace` call
62-
--> $DIR/collapsible_str_replace.rs:41:45
62+
--> $DIR/collapsible_str_replace.rs:42:45
6363
|
6464
LL | let _ = "hesuo worpd".replace('s', "x").replace('u', "l").replace('p', "l");
6565
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['u', 'p'], "l")`
6666

6767
error: used consecutive `str::replace` call
68-
--> $DIR/collapsible_str_replace.rs:44:47
68+
--> $DIR/collapsible_str_replace.rs:45:47
6969
|
7070
LL | let _ = "hesudo worpd".replace("su", "l").replace('d', "l").replace('p', "l");
7171
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['d', 'p'], "l")`
7272

7373
error: used consecutive `str::replace` call
74-
--> $DIR/collapsible_str_replace.rs:46:28
74+
--> $DIR/collapsible_str_replace.rs:47:28
7575
|
7676
LL | let _ = "hesudo worpd".replace(d, "l").replace('p', "l").replace("su", "l");
7777
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([d, 'p'], "l")`
7878

7979
error: used consecutive `str::replace` call
80-
--> $DIR/collapsible_str_replace.rs:48:27
80+
--> $DIR/collapsible_str_replace.rs:49:27
8181
|
8282
LL | let _ = "hesuo world".replace(get_filter(), "l").replace('s', "l");
8383
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([get_filter(), 's'], "l")`
8484

85-
error: aborting due to 13 previous errors
85+
error: used consecutive `str::replace` call
86+
--> $DIR/collapsible_str_replace.rs:86:16
87+
|
88+
LL | let _ = "".replace('a', "1.58").replace('b', "1.58");
89+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['a', 'b'], "1.58")`
90+
91+
error: aborting due to 14 previous errors
8692

0 commit comments

Comments
 (0)