Rollup merge of #87659 - FabianWolff:issue-87397, r=davidtwco
Fix invalid suggestions for non-ASCII characters in byte constants Fixes #87397.
This commit is contained in:
commit
4380056397
6 changed files with 98 additions and 20 deletions
|
@ -153,16 +153,37 @@ pub(crate) fn emit_unescape_error(
|
|||
EscapeError::NonAsciiCharInByte => {
|
||||
assert!(mode.is_bytes());
|
||||
let (c, span) = last_char();
|
||||
handler
|
||||
.struct_span_err(span, "non-ASCII character in byte constant")
|
||||
.span_label(span, "byte constant must be ASCII")
|
||||
.span_suggestion(
|
||||
let mut err = handler.struct_span_err(span, "non-ASCII character in byte constant");
|
||||
err.span_label(span, "byte constant must be ASCII");
|
||||
if (c as u32) <= 0xFF {
|
||||
err.span_suggestion(
|
||||
span,
|
||||
"use a \\xHH escape for a non-ASCII byte",
|
||||
&format!(
|
||||
"if you meant to use the unicode code point for '{}', use a \\xHH escape",
|
||||
c
|
||||
),
|
||||
format!("\\x{:X}", c as u32),
|
||||
Applicability::MachineApplicable,
|
||||
)
|
||||
.emit();
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
} else if matches!(mode, Mode::Byte) {
|
||||
err.span_label(span, "this multibyte character does not fit into a single byte");
|
||||
} else if matches!(mode, Mode::ByteStr) {
|
||||
let mut utf8 = String::new();
|
||||
utf8.push(c);
|
||||
err.span_suggestion(
|
||||
span,
|
||||
&format!(
|
||||
"if you meant to use the UTF-8 encoding of '{}', use \\xHH escapes",
|
||||
c
|
||||
),
|
||||
utf8.as_bytes()
|
||||
.iter()
|
||||
.map(|b: &u8| format!("\\x{:X}", *b))
|
||||
.fold("".to_string(), |a, c| a + &c),
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
err.emit();
|
||||
}
|
||||
EscapeError::NonAsciiCharInByteString => {
|
||||
assert!(mode.is_bytes());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue