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](https://github.com/rust-lang/rust-clippy/pull/10047)
This commit is contained in:
bors 2022-12-09 12:05:20 +00:00
commit 3492856c07
5 changed files with 47 additions and 16 deletions

View file

@ -3672,7 +3672,10 @@ impl Methods {
no_effect_replace::check(cx, expr, arg1, arg2);
// Check for repeated `str::replace` calls to perform `collapsible_str_replace` lint
if name == "replace" && let Some(("replace", ..)) = method_call(recv) {
if self.msrv.meets(msrvs::PATTERN_TRAIT_CHAR_ARRAY)
&& name == "replace"
&& let Some(("replace", ..)) = method_call(recv)
{
collapsible_str_replace::check(cx, expr, arg1, arg2);
}
},

View file

@ -21,7 +21,7 @@ macro_rules! msrv_aliases {
msrv_aliases! {
1,65,0 { LET_ELSE }
1,62,0 { BOOL_THEN_SOME }
1,58,0 { FORMAT_ARGS_CAPTURE }
1,58,0 { FORMAT_ARGS_CAPTURE, PATTERN_TRAIT_CHAR_ARRAY }
1,53,0 { OR_PATTERNS, MANUAL_BITS, BTREE_MAP_RETAIN, BTREE_SET_RETAIN, ARRAY_INTO_ITERATOR }
1,52,0 { STR_SPLIT_ONCE, REM_EUCLID_CONST }
1,51,0 { BORROW_AS_PTR, SEEK_FROM_CURRENT, UNSIGNED_ABS }

View file

@ -1,5 +1,6 @@
// run-rustfix
#![allow(unused)]
#![warn(clippy::collapsible_str_replace)]
fn get_filter() -> char {
@ -71,3 +72,13 @@ fn main() {
.replace('u', iter.next().unwrap())
.replace('s', iter.next().unwrap());
}
#[clippy::msrv = "1.57"]
fn msrv_1_57() {
let _ = "".replace('a', "1.57").replace('b', "1.57");
}
#[clippy::msrv = "1.58"]
fn msrv_1_58() {
let _ = "".replace(['a', 'b'], "1.58");
}

View file

@ -1,5 +1,6 @@
// run-rustfix
#![allow(unused)]
#![warn(clippy::collapsible_str_replace)]
fn get_filter() -> char {
@ -74,3 +75,13 @@ fn main() {
.replace('u', iter.next().unwrap())
.replace('s', iter.next().unwrap());
}
#[clippy::msrv = "1.57"]
fn msrv_1_57() {
let _ = "".replace('a', "1.57").replace('b', "1.57");
}
#[clippy::msrv = "1.58"]
fn msrv_1_58() {
let _ = "".replace('a', "1.58").replace('b', "1.58");
}

View file

@ -1,5 +1,5 @@
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:19:27
--> $DIR/collapsible_str_replace.rs:20:27
|
LL | let _ = "hesuo worpd".replace('s', "l").replace('u', "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['s', 'u'], "l")`
@ -7,19 +7,19 @@ LL | let _ = "hesuo worpd".replace('s', "l").replace('u', "l");
= note: `-D clippy::collapsible-str-replace` implied by `-D warnings`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:21:27
--> $DIR/collapsible_str_replace.rs:22:27
|
LL | let _ = "hesuo worpd".replace('s', l).replace('u', l);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['s', 'u'], l)`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:23:27
--> $DIR/collapsible_str_replace.rs:24:27
|
LL | let _ = "hesuo worpd".replace('s', "l").replace('u', "l").replace('p', "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['s', 'u', 'p'], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:26:10
--> $DIR/collapsible_str_replace.rs:27:10
|
LL | .replace('s', "l")
| __________^
@ -29,58 +29,64 @@ LL | | .replace('d', "l");
| |__________________________^ help: replace with: `replace(['s', 'u', 'p', 'd'], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:31:27
--> $DIR/collapsible_str_replace.rs:32:27
|
LL | let _ = "hesuo world".replace(s, "l").replace('u', "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([s, 'u'], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:33:27
--> $DIR/collapsible_str_replace.rs:34:27
|
LL | let _ = "hesuo worpd".replace(s, "l").replace('u', "l").replace('p', "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([s, 'u', 'p'], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:35:27
--> $DIR/collapsible_str_replace.rs:36:27
|
LL | let _ = "hesuo worpd".replace(s, "l").replace(u, "l").replace('p', "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([s, u, 'p'], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:37:27
--> $DIR/collapsible_str_replace.rs:38:27
|
LL | let _ = "hesuo worpd".replace(s, "l").replace(u, "l").replace(p, "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([s, u, p], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:39:27
--> $DIR/collapsible_str_replace.rs:40:27
|
LL | let _ = "hesuo worlp".replace('s', "l").replace('u', "l").replace('p', "d");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['s', 'u'], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:41:45
--> $DIR/collapsible_str_replace.rs:42:45
|
LL | let _ = "hesuo worpd".replace('s', "x").replace('u', "l").replace('p', "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['u', 'p'], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:44:47
--> $DIR/collapsible_str_replace.rs:45:47
|
LL | let _ = "hesudo worpd".replace("su", "l").replace('d', "l").replace('p', "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['d', 'p'], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:46:28
--> $DIR/collapsible_str_replace.rs:47:28
|
LL | let _ = "hesudo worpd".replace(d, "l").replace('p', "l").replace("su", "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([d, 'p'], "l")`
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:48:27
--> $DIR/collapsible_str_replace.rs:49:27
|
LL | let _ = "hesuo world".replace(get_filter(), "l").replace('s', "l");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace([get_filter(), 's'], "l")`
error: aborting due to 13 previous errors
error: used consecutive `str::replace` call
--> $DIR/collapsible_str_replace.rs:86:16
|
LL | let _ = "".replace('a', "1.58").replace('b', "1.58");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `replace(['a', 'b'], "1.58")`
error: aborting due to 14 previous errors