Print full char literal on error if any are non-printing
This commit is contained in:
parent
02063124f9
commit
de05d3ec31
3 changed files with 37 additions and 0 deletions
|
@ -82,6 +82,16 @@ pub(crate) fn emit_unescape_error(
|
|||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if lit.chars().filter(|x| x.is_whitespace() || x.is_control()).count() >= 1 {
|
||||
handler.span_note(
|
||||
span,
|
||||
&format!(
|
||||
"there are non-printing characters, the full sequence is `{}`",
|
||||
lit.escape_default(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if !has_help {
|
||||
|
|
9
src/test/ui/parser/char/whitespace-character-literal.rs
Normal file
9
src/test/ui/parser/char/whitespace-character-literal.rs
Normal file
|
@ -0,0 +1,9 @@
|
|||
// This tests that the error generated when a character literal has multiple
|
||||
// characters in it contains a note about non-printing characters.
|
||||
|
||||
fn main() {
|
||||
// <hair space>x<zero width space>
|
||||
let _hair_space_around = ' x';
|
||||
//~^ ERROR: character literal may only contain one codepoint
|
||||
//~| NOTE: there are non-printing characters, the full sequence is `\u{200a}x\u{200b}`
|
||||
}
|
18
src/test/ui/parser/char/whitespace-character-literal.stderr
Normal file
18
src/test/ui/parser/char/whitespace-character-literal.stderr
Normal file
|
@ -0,0 +1,18 @@
|
|||
error: character literal may only contain one codepoint
|
||||
--> $DIR/whitespace-character-literal.rs:6:30
|
||||
|
|
||||
LL | let _hair_space_around = ' x';
|
||||
| ^^^^
|
||||
|
|
||||
note: there are non-printing characters, the full sequence is `\u{200a}x\u{200b}`
|
||||
--> $DIR/whitespace-character-literal.rs:6:31
|
||||
|
|
||||
LL | let _hair_space_around = ' x';
|
||||
| ^^
|
||||
help: if you meant to write a `str` literal, use double quotes
|
||||
|
|
||||
LL | let _hair_space_around = " x";
|
||||
| ~~~~
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
Add table
Reference in a new issue