@@ -2557,62 +2557,60 @@ fn num_decimal_digits(num: usize) -> usize {
25572557 MAX_DIGITS
25582558}
25592559
2560- // We replace some characters so the CLI output is always consistent and underlines aligned.
2561- // Keep the following list in sync with `rustc_span::char_width`.
2562- const OUTPUT_REPLACEMENTS : & [ ( char , & str ) ] = & [
2563- ( '\t' , " " ) , // We do our own tab replacement
2564- ( '\u{200D}' , "" ) , // Replace ZWJ with nothing for consistent terminal output of grapheme clusters.
2565- ( '\u{202A}' , "�" ) , // The following unicode text flow control characters are inconsistently
2566- ( '\u{202B}' , "�" ) , // supported across CLIs and can cause confusion due to the bytes on disk
2567- ( '\u{202D}' , "�" ) , // not corresponding to the visible source code, so we replace them always.
2568- ( '\u{202E}' , "�" ) ,
2569- ( '\u{2066}' , "�" ) ,
2570- ( '\u{2067}' , "�" ) ,
2571- ( '\u{2068}' , "�" ) ,
2572- ( '\u{202C}' , "�" ) ,
2573- ( '\u{2069}' , "�" ) ,
2574- // In terminals without Unicode support the following will be garbled, but in *all* terminals
2575- // the underlying codepoint will be as well. We could gate this replacement behind a "unicode
2576- // support" gate.
2577- ( '\u{0000}' , "␀" ) ,
2578- ( '\u{0001}' , "␁" ) ,
2579- ( '\u{0002}' , "␂" ) ,
2580- ( '\u{0003}' , "␃" ) ,
2581- ( '\u{0004}' , "␄" ) ,
2582- ( '\u{0005}' , "␅" ) ,
2583- ( '\u{0006}' , "␆" ) ,
2584- ( '\u{0007}' , "␇" ) ,
2585- ( '\u{0008}' , "␈" ) ,
2586- ( '\u{000B}' , "␋" ) ,
2587- ( '\u{000C}' , "␌" ) ,
2588- ( '\u{000D}' , "␍" ) ,
2589- ( '\u{000E}' , "␎" ) ,
2590- ( '\u{000F}' , "␏" ) ,
2591- ( '\u{0010}' , "␐" ) ,
2592- ( '\u{0011}' , "␑" ) ,
2593- ( '\u{0012}' , "␒" ) ,
2594- ( '\u{0013}' , "␓" ) ,
2595- ( '\u{0014}' , "␔" ) ,
2596- ( '\u{0015}' , "␕" ) ,
2597- ( '\u{0016}' , "␖" ) ,
2598- ( '\u{0017}' , "␗" ) ,
2599- ( '\u{0018}' , "␘" ) ,
2600- ( '\u{0019}' , "␙" ) ,
2601- ( '\u{001A}' , "␚" ) ,
2602- ( '\u{001B}' , "␛" ) ,
2603- ( '\u{001C}' , "␜" ) ,
2604- ( '\u{001D}' , "␝" ) ,
2605- ( '\u{001E}' , "␞" ) ,
2606- ( '\u{001F}' , "␟" ) ,
2607- ( '\u{007F}' , "␡" ) ,
2608- ] ;
2609-
26102560fn normalize_whitespace ( str : & str ) -> String {
2611- let mut s = str. to_string ( ) ;
2612- for ( c, replacement) in OUTPUT_REPLACEMENTS {
2613- s = s. replace ( * c, replacement) ;
2614- }
2615- s
2561+ // We replace some characters so the CLI output is always consistent and underlines aligned.
2562+ // Keep the following list in sync with `rustc_span::char_width`.
2563+ let output_replacements = FxHashMap :: from_iter ( [
2564+ ( '\t' , " " ) , // We do our own tab replacement
2565+ ( '\u{200D}' , "" ) , // Replace ZWJ for consistent terminal output of grapheme clusters.
2566+ ( '\u{202A}' , "�" ) , // The following unicode text flow control characters are inconsistently
2567+ ( '\u{202B}' , "�" ) , // supported across CLIs and can cause confusion due to the bytes on disk
2568+ ( '\u{202D}' , "�" ) , // not corresponding to the visible source code, so we replace them always.
2569+ ( '\u{202E}' , "�" ) ,
2570+ ( '\u{2066}' , "�" ) ,
2571+ ( '\u{2067}' , "�" ) ,
2572+ ( '\u{2068}' , "�" ) ,
2573+ ( '\u{202C}' , "�" ) ,
2574+ ( '\u{2069}' , "�" ) ,
2575+ // In terminals without Unicode support the following will be garbled, but in *all* terminals
2576+ // the underlying codepoint will be as well. We could gate this replacement behind a "unicode
2577+ // support" gate.
2578+ ( '\u{0000}' , "␀" ) ,
2579+ ( '\u{0001}' , "␁" ) ,
2580+ ( '\u{0002}' , "␂" ) ,
2581+ ( '\u{0003}' , "␃" ) ,
2582+ ( '\u{0004}' , "␄" ) ,
2583+ ( '\u{0005}' , "␅" ) ,
2584+ ( '\u{0006}' , "␆" ) ,
2585+ ( '\u{0007}' , "␇" ) ,
2586+ ( '\u{0008}' , "␈" ) ,
2587+ ( '\u{000B}' , "␋" ) ,
2588+ ( '\u{000C}' , "␌" ) ,
2589+ ( '\u{000D}' , "␍" ) ,
2590+ ( '\u{000E}' , "␎" ) ,
2591+ ( '\u{000F}' , "␏" ) ,
2592+ ( '\u{0010}' , "␐" ) ,
2593+ ( '\u{0011}' , "␑" ) ,
2594+ ( '\u{0012}' , "␒" ) ,
2595+ ( '\u{0013}' , "␓" ) ,
2596+ ( '\u{0014}' , "␔" ) ,
2597+ ( '\u{0015}' , "␕" ) ,
2598+ ( '\u{0016}' , "␖" ) ,
2599+ ( '\u{0017}' , "␗" ) ,
2600+ ( '\u{0018}' , "␘" ) ,
2601+ ( '\u{0019}' , "␙" ) ,
2602+ ( '\u{001A}' , "␚" ) ,
2603+ ( '\u{001B}' , "␛" ) ,
2604+ ( '\u{001C}' , "␜" ) ,
2605+ ( '\u{001D}' , "␝" ) ,
2606+ ( '\u{001E}' , "␞" ) ,
2607+ ( '\u{001F}' , "␟" ) ,
2608+ ( '\u{007F}' , "␡" ) ,
2609+ ] ) ;
2610+
2611+ str. chars ( )
2612+ . map ( |c| output_replacements. get ( & c) . map_or ( c. to_string ( ) , |s| s. to_string ( ) ) )
2613+ . collect ( )
26162614}
26172615
26182616fn draw_col_separator ( buffer : & mut StyledBuffer , line : usize , col : usize ) {
0 commit comments