Use fold instead of flat_map

This commit is contained in:
Esteban Küber 2024-07-29 18:35:11 +00:00
parent 6d9ee6ee26
commit 3945480ce7
3 changed files with 8 additions and 10 deletions

View file

@ -16,7 +16,6 @@ use std::iter;
use std::path::Path;
use derive_setters::Setters;
use either::Either;
use rustc_data_structures::fx::{FxHashMap, FxIndexMap, FxIndexSet};
use rustc_data_structures::sync::{DynSend, IntoDynSyncSend, Lrc};
use rustc_error_messages::{FluentArgs, SpanLabel};
@ -2609,16 +2608,17 @@ const OUTPUT_REPLACEMENTS: &[(char, &str)] = &[
('\u{2069}', "<EFBFBD>"),
];
fn normalize_whitespace(str: &str) -> String {
fn normalize_whitespace(s: &str) -> String {
// Scan the input string for a character in the ordered table above. If it's present, replace
// it with it's alternative string (it can be more than 1 char!). Otherwise, retain the input
// char. At the end, allocate all chars into a string in one operation.
str.chars()
.flat_map(|c| match OUTPUT_REPLACEMENTS.binary_search_by_key(&c, |(k, _)| *k) {
Ok(i) => Either::Left(OUTPUT_REPLACEMENTS[i].1.chars()),
_ => Either::Right([c].into_iter()),
})
.collect()
s.chars().fold(String::with_capacity(s.len()), |mut s, c| {
match OUTPUT_REPLACEMENTS.binary_search_by_key(&c, |(k, _)| *k) {
Ok(i) => s.push_str(OUTPUT_REPLACEMENTS[i].1),
_ => s.push(c),
}
s
})
}
fn draw_col_separator(buffer: &mut StyledBuffer, line: usize, col: usize) {