Skip to content

Commit

Permalink
Restructure pattern replacement loop
Browse files Browse the repository at this point in the history
  • Loading branch information
dtolnay committed Oct 11, 2021
1 parent 8bda8fe commit da86ba7
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions src/normalize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -316,13 +316,19 @@ fn replace_case_insensitive(line: &str, pattern: &str, replacement: &str) -> Str
let line_lower = line.to_ascii_lowercase().replace('\\', "/");
let pattern_lower = pattern.to_ascii_lowercase().replace('\\', "/");
let mut replaced = String::with_capacity(line.len());
for (i, keep) in line_lower.split(&pattern_lower).enumerate() {
if i > 0 {

let line_lower = line_lower.as_str();
let mut split = line_lower.split(&pattern_lower);
let mut pos = 0;
while let Some(keep) = split.next() {
if !replaced.is_empty() {
replaced.push_str(replacement);
pos += pattern.len();
}
let begin = replaced.len() - i * replacement.len() + i * pattern.len();
let end = begin + keep.len();
replaced.push_str(&line[begin..end]);
let keep = &line[pos..pos + keep.len()];
replaced.push_str(keep);
pos += keep.len();
}

replaced
}

0 comments on commit da86ba7

Please sign in to comment.