rustc_errors: enforce OUTPUT_REPLACEMENTS is sorted with a compile-time assertion
This commit is contained in:
parent
8c7e0e1608
commit
b0a8944120
@ -2564,9 +2564,7 @@ fn num_decimal_digits(num: usize) -> usize {
|
|||||||
|
|
||||||
// We replace some characters so the CLI output is always consistent and underlines aligned.
|
// We replace some characters so the CLI output is always consistent and underlines aligned.
|
||||||
// Keep the following list in sync with `rustc_span::char_width`.
|
// Keep the following list in sync with `rustc_span::char_width`.
|
||||||
// ATTENTION: keep lexicografically sorted so that the binary search will work
|
|
||||||
const OUTPUT_REPLACEMENTS: &[(char, &str)] = &[
|
const OUTPUT_REPLACEMENTS: &[(char, &str)] = &[
|
||||||
// tidy-alphabetical-start
|
|
||||||
// In terminals without Unicode support the following will be garbled, but in *all* terminals
|
// In terminals without Unicode support the following will be garbled, but in *all* terminals
|
||||||
// the underlying codepoint will be as well. We could gate this replacement behind a "unicode
|
// the underlying codepoint will be as well. We could gate this replacement behind a "unicode
|
||||||
// support" gate.
|
// support" gate.
|
||||||
@ -2579,7 +2577,7 @@ fn num_decimal_digits(num: usize) -> usize {
|
|||||||
('\u{0006}', "␆"),
|
('\u{0006}', "␆"),
|
||||||
('\u{0007}', "␇"),
|
('\u{0007}', "␇"),
|
||||||
('\u{0008}', "␈"),
|
('\u{0008}', "␈"),
|
||||||
('\u{0009}', " "), // We do our own tab replacement
|
('\t', " "), // We do our own tab replacement
|
||||||
('\u{000b}', "␋"),
|
('\u{000b}', "␋"),
|
||||||
('\u{000c}', "␌"),
|
('\u{000c}', "␌"),
|
||||||
('\u{000d}', "␍"),
|
('\u{000d}', "␍"),
|
||||||
@ -2612,10 +2610,20 @@ fn num_decimal_digits(num: usize) -> usize {
|
|||||||
('\u{2067}', "<EFBFBD>"),
|
('\u{2067}', "<EFBFBD>"),
|
||||||
('\u{2068}', "<EFBFBD>"),
|
('\u{2068}', "<EFBFBD>"),
|
||||||
('\u{2069}', "<EFBFBD>"),
|
('\u{2069}', "<EFBFBD>"),
|
||||||
// tidy-alphabetical-end
|
|
||||||
];
|
];
|
||||||
|
|
||||||
fn normalize_whitespace(s: &str) -> String {
|
fn normalize_whitespace(s: &str) -> String {
|
||||||
|
const {
|
||||||
|
let mut i = 1;
|
||||||
|
while i < OUTPUT_REPLACEMENTS.len() {
|
||||||
|
assert!(
|
||||||
|
OUTPUT_REPLACEMENTS[i - 1].0 < OUTPUT_REPLACEMENTS[i].0,
|
||||||
|
"The OUTPUT_REPLACEMENTS array must be sorted (for binary search to work) \
|
||||||
|
and must contain no duplicate entries"
|
||||||
|
);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
// Scan the input string for a character in the ordered table above. If it's present, replace
|
// 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
|
// 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.
|
// char. At the end, allocate all chars into a string in one operation.
|
||||||
|
Loading…
Reference in New Issue
Block a user