@@ -2557,62 +2557,60 @@ fn num_decimal_digits(num: usize) -> usize {
2557
2557
MAX_DIGITS
2558
2558
}
2559
2559
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
-
2610
2560
fn 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 ( )
2616
2614
}
2617
2615
2618
2616
fn draw_col_separator ( buffer : & mut StyledBuffer , line : usize , col : usize ) {
0 commit comments