Clippy lints / Performance
Clippy lint · Performance · checked with Clippy 0.1.99
clippy::regex_creation_in_loops: Checks for regex compilation inside a loop with a literal
What it meansChecks for regex compilation inside a loop with a literal. It is in the performance group and warns by default.
Does it matter?
Compiling a regex is a much more expensive operation than using one, and a compiled regex can be used multiple times. This is documented as an antipattern on the regex documentation
Code that could be written to run faster. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
for haystack in haystacks {
let regex = regex::Regex::new(MY_REGEX).unwrap();
if regex.is_match(haystack) {
// Perform operation
}
}
Write this instead
let regex = regex::Regex::new(MY_REGEX).unwrap();
for haystack in haystacks {
if regex.is_match(haystack) {
// Perform operation
}
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::regex_creation_in_loops)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
regex_creation_in_loops = "allow"One run
cargo clippy -- -A clippy::regex-creation-in-loopsThe [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.
Clippy's own documentation
What it does
Checks for regex compilation inside a loop with a literal.
Why is this bad?
Compiling a regex is a much more expensive operation than using one, and a compiled regex can be used multiple times. This is documented as an antipattern on the regex documentation
Example
for haystack in haystacks {
let regex = regex::Regex::new(MY_REGEX).unwrap();
if regex.is_match(haystack) {
// Perform operation
}
}
can be replaced with
let regex = regex::Regex::new(MY_REGEX).unwrap();
for haystack in haystacks {
if regex.is_match(haystack) {
// Perform operation
}
}
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
- readonly_write_lockthis write lock is used only for reading
- redundant_allocationChecks for usage of redundant allocations anywhere in the code
- redundant_iter_clonedunneeded cloning of iterator items
- replace_boxcreating a new box with default content
- result_large_errthe `Err`-variant returned from this function is very large
- sliced_string_as_bytescalling `as_bytes` after slicing a string
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?