Skip to content

Commit

Permalink
Rollup merge of #64783 - onehr:onehrxn, r=varkor
Browse files Browse the repository at this point in the history
Fix issue #64732

Based on issue #64732, when creating a byte literal with single quotes,
the suggestion message would indicate that you meant to write a `str` literal,
but we actually meant to write a byte string literal.

So I changed the unescape_error_reporting.rs to decide whether to print out
"if you meant to write a `str` literal, use double quotes",
or "if you meant to write a byte string literal, use double quotes".

Fixes #64732.
  • Loading branch information
Centril authored Sep 26, 2019
2 parents 0130393 + a048447 commit 95ea4a1
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/libsyntax/parse/unescape_error_reporting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,20 @@ pub(crate) fn emit_unescape_error(
.emit();
}
EscapeError::MoreThanOneChar => {
let msg = if mode.is_bytes() {
"if you meant to write a byte string literal, use double quotes"
} else {
"if you meant to write a `str` literal, use double quotes"
};

handler
.struct_span_err(
span_with_quotes,
"character literal may only contain one codepoint",
)
.span_suggestion(
span_with_quotes,
"if you meant to write a `str` literal, use double quotes",
msg,
format!("\"{}\"", lit),
Applicability::MachineApplicable,
).emit()
Expand Down
9 changes: 9 additions & 0 deletions src/test/ui/issues/issue-64732.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#![allow(unused)]
fn main() {
let _foo = b'hello\0';
//~^ ERROR character literal may only contain one codepoint
//~| HELP if you meant to write a byte string literal, use double quotes
let _bar = 'hello';
//~^ ERROR character literal may only contain one codepoint
//~| HELP if you meant to write a `str` literal, use double quotes
}
22 changes: 22 additions & 0 deletions src/test/ui/issues/issue-64732.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
error: character literal may only contain one codepoint
--> $DIR/issue-64732.rs:3:17
|
LL | let _foo = b'hello\0';
| ^^^^^^^^^
help: if you meant to write a byte string literal, use double quotes
|
LL | let _foo = b"hello\0";
| ^^^^^^^^^

error: character literal may only contain one codepoint
--> $DIR/issue-64732.rs:6:16
|
LL | let _bar = 'hello';
| ^^^^^^^
help: if you meant to write a `str` literal, use double quotes
|
LL | let _bar = "hello";
| ^^^^^^^

error: aborting due to 2 previous errors

0 comments on commit 95ea4a1

Please sign in to comment.