Rollup merge of #90861 - 5225225:nonprinting-char, r=davidtwco
Print escaped string if char literal has multiple characters, but only one printable character Fixes #90857 I'm not sure about the error message here, it could get rather long and *maybe* using the names of characters would be better? That wouldn't help the length any, though.
This commit is contained in:
commit
ab958a7ab0
4 changed files with 54 additions and 1 deletions
|
@ -82,6 +82,33 @@ pub(crate) fn emit_unescape_error(
|
|||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
let printable: Vec<char> = lit
|
||||
.chars()
|
||||
.filter(|&x| {
|
||||
unicode_width::UnicodeWidthChar::width(x).unwrap_or(0) != 0
|
||||
&& !x.is_whitespace()
|
||||
})
|
||||
.collect();
|
||||
|
||||
if let [ch] = printable.as_slice() {
|
||||
has_help = true;
|
||||
|
||||
handler.span_note(
|
||||
span,
|
||||
&format!(
|
||||
"there are non-printing characters, the full sequence is `{}`",
|
||||
lit.escape_default(),
|
||||
),
|
||||
);
|
||||
|
||||
handler.span_suggestion(
|
||||
span,
|
||||
"consider removing the non-printing characters",
|
||||
ch.to_string(),
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if !has_help {
|
||||
|
|
10
src/test/ui/parser/char/whitespace-character-literal.rs
Normal file
10
src/test/ui/parser/char/whitespace-character-literal.rs
Normal file
|
@ -0,0 +1,10 @@
|
|||
// This tests that the error generated when a character literal has multiple
|
||||
// characters in it contains a note about non-printing characters.
|
||||
|
||||
fn main() {
|
||||
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}`
|
||||
//~| HELP: consider removing the non-printing characters
|
||||
//~| SUGGESTION: x
|
||||
}
|
16
src/test/ui/parser/char/whitespace-character-literal.stderr
Normal file
16
src/test/ui/parser/char/whitespace-character-literal.stderr
Normal file
|
@ -0,0 +1,16 @@
|
|||
error: character literal may only contain one codepoint
|
||||
--> $DIR/whitespace-character-literal.rs:5:30
|
||||
|
|
||||
LL | let _hair_space_around = ' x';
|
||||
| ^--^
|
||||
| |
|
||||
| help: consider removing the non-printing characters: `x`
|
||||
|
|
||||
note: there are non-printing characters, the full sequence is `\u{200a}x\u{200b}`
|
||||
--> $DIR/whitespace-character-literal.rs:5:31
|
||||
|
|
||||
LL | let _hair_space_around = ' x';
|
||||
| ^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -9,7 +9,7 @@ const ENTRY_LIMIT: usize = 1000;
|
|||
// FIXME: The following limits should be reduced eventually.
|
||||
const ROOT_ENTRY_LIMIT: usize = 1102;
|
||||
const ISSUES_ENTRY_LIMIT: usize = 2310;
|
||||
const PARSER_LIMIT: usize = 1004;
|
||||
const PARSER_LIMIT: usize = 1005;
|
||||
|
||||
fn check_entries(path: &Path, bad: &mut bool) {
|
||||
let dirs = walkdir::WalkDir::new(&path.join("test/ui"))
|
||||
|
|
Loading…
Add table
Reference in a new issue