From d76952fcbc418157b68dcdb42626b17f2348b8a9 Mon Sep 17 00:00:00 2001 From: yukang Date: Fri, 12 Aug 2022 15:28:04 +0800 Subject: [PATCH] give tip for unicode chars which might not be visible --- compiler/rustc_parse/src/lexer/mod.rs | 2 ++ src/test/ui/fmt/incorrect-separator.stderr | 2 ++ src/test/ui/issues/issue-69130.stderr | 2 ++ src/test/ui/lexer/lex-bad-token.stderr | 2 ++ src/test/ui/lexer/lex-bad-unicode-char.rs | 4 ++++ src/test/ui/lexer/lex-bad-unicode-char.stderr | 10 ++++++++++ src/test/ui/parser/issues/issue-66473.stderr | Bin 5260 -> 5337 bytes 7 files changed, 22 insertions(+) create mode 100644 src/test/ui/lexer/lex-bad-unicode-char.rs create mode 100644 src/test/ui/lexer/lex-bad-unicode-char.stderr diff --git a/compiler/rustc_parse/src/lexer/mod.rs b/compiler/rustc_parse/src/lexer/mod.rs index 848e142e59ce9..accb07f4c2875 100644 --- a/compiler/rustc_parse/src/lexer/mod.rs +++ b/compiler/rustc_parse/src/lexer/mod.rs @@ -322,6 +322,8 @@ impl<'a> StringReader<'a> { let token = unicode_chars::check_for_substitution(self, start, c, &mut err); if c == '\x00' { err.help("source files must contain UTF-8 encoded text, unexpected null bytes might occur when a different encoding is used"); + } else if let Ok(v) = &err.suggestions && v.len() == 0 && !c.is_ascii() { + err.help(format!("Unicode character {} might not be visible when rendered", escaped_char(c))); } err.emit(); token? diff --git a/src/test/ui/fmt/incorrect-separator.stderr b/src/test/ui/fmt/incorrect-separator.stderr index 5a3e5515bb939..6b754b46675c4 100644 --- a/src/test/ui/fmt/incorrect-separator.stderr +++ b/src/test/ui/fmt/incorrect-separator.stderr @@ -3,6 +3,8 @@ error: unknown start of token: \u{326} | LL | format!("A number: {}" ̦ iter::once(42).next().unwrap()); | ^ + | + = help: Unicode character \u{326} might not be visible when rendered error: expected `,`, found `.` --> $DIR/incorrect-separator.rs:7:27 diff --git a/src/test/ui/issues/issue-69130.stderr b/src/test/ui/issues/issue-69130.stderr index e67cc295d43e1..070b4486785ef 100644 --- a/src/test/ui/issues/issue-69130.stderr +++ b/src/test/ui/issues/issue-69130.stderr @@ -3,6 +3,8 @@ error: unknown start of token: \u{a7} | LL | M (§& u8)} | ^ + | + = help: Unicode character \u{a7} might not be visible when rendered error[E0106]: missing lifetime specifier --> $DIR/issue-69130.rs:4:5 diff --git a/src/test/ui/lexer/lex-bad-token.stderr b/src/test/ui/lexer/lex-bad-token.stderr index 43c43721b19f2..dcff59d23716e 100644 --- a/src/test/ui/lexer/lex-bad-token.stderr +++ b/src/test/ui/lexer/lex-bad-token.stderr @@ -3,6 +3,8 @@ error: unknown start of token: \u{25cf} | LL | ● | ^ + | + = help: Unicode character \u{25cf} might not be visible when rendered error: aborting due to previous error diff --git a/src/test/ui/lexer/lex-bad-unicode-char.rs b/src/test/ui/lexer/lex-bad-unicode-char.rs new file mode 100644 index 0000000000000..c0cf7eed05fd1 --- /dev/null +++ b/src/test/ui/lexer/lex-bad-unicode-char.rs @@ -0,0 +1,4 @@ +fn main() { + println!("hello {}"̣, 1); + //~^ ERROR: unknown start of token: \u{323} +} diff --git a/src/test/ui/lexer/lex-bad-unicode-char.stderr b/src/test/ui/lexer/lex-bad-unicode-char.stderr new file mode 100644 index 0000000000000..bdfb66927b73b --- /dev/null +++ b/src/test/ui/lexer/lex-bad-unicode-char.stderr @@ -0,0 +1,10 @@ +error: unknown start of token: \u{323} + --> $DIR/lex-bad-unicode-char.rs:2:24 + | +LL | println!("hello {}"̣, 1); + | ^ + | + = help: Unicode character \u{323} might not be visible when rendered + +error: aborting due to previous error + diff --git a/src/test/ui/parser/issues/issue-66473.stderr b/src/test/ui/parser/issues/issue-66473.stderr index 8a16d7f955129811997464d47c4e10238db77340..17a8eb590f55eb454fb790859b2aa505789cfae2 100644 GIT binary patch delta 77 zcmeCtys0@McXBQY7LU~4No