Clippy lints / Performance
Clippy lint · Performance · checked with Clippy 0.1.99
clippy::collapsible_str_replace: Checks for consecutive calls to str::replace (2 or more) that can be collapsed into a single call
What it meansChecks for consecutive calls to str::replace (2 or more) that can be collapsed into a single call. It is in the performance group and warns by default.
Does it matter?
Consecutive str::replace calls scan the string multiple times with repetitive code.
Code that could be written to run faster. Warns by default.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
let hello = "hesuo worpd"
.replace('s', "l")
.replace("u", "l")
.replace('p', "l");
Write this instead
let hello = "hesuo worpd".replace(['s', 'u', 'p'], "l");
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::collapsible_str_replace)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
collapsible_str_replace = "allow"One run
cargo clippy -- -A clippy::collapsible-str-replaceThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Settings in clippy.toml
msrv: The minimum rust version that the project supports. Defaults to the rust-version field in Cargo.toml
Clippy's own documentation
What it does
Checks for consecutive calls to str::replace (2 or more)
that can be collapsed into a single call.
Why is this bad?
Consecutive str::replace calls scan the string multiple times
with repetitive code.
Example
let hello = "hesuo worpd"
.replace('s', "l")
.replace("u", "l")
.replace('p', "l");
Use instead:
let hello = "hesuo worpd".replace(['s', 'u', 'p'], "l");
Configuration
-
msrv: The minimum rust version that the project supports. Defaults to therust-versionfield inCargo.toml(default:
current version)
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- large_enum_variantlarge size difference between variants
- boxed_locallocal variable doesn't need to be boxed here
- cloned_ref_to_slice_refsChecks for slice references with cloned references such as &[f.clone()]
- cmp_ownedChecks for conversions to owned values just for the sake of a comparison
- double_ended_iterator_lastcalled `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator
- drain_collectdraining all elements of a collection into a new collection of the same type
- expect_fun_callChecks for calls to .expect(&format!(...)), .expect(foo(..)), etc., and suggests to use unwrap_or_else instead
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::large_enum_variantlarge size difference between variantsRead it next →Did this answer your question?