Silence redundant error on char literal that was meant to be a string in 2021 edition
This commit is contained in:
parent
6f388ef1fb
commit
ea1883d7b2
@ -59,6 +59,15 @@ pub(crate) fn second(&self) -> char {
|
|||||||
iter.next().unwrap_or(EOF_CHAR)
|
iter.next().unwrap_or(EOF_CHAR)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Peeks the third symbol from the input stream without consuming it.
|
||||||
|
pub fn third(&self) -> char {
|
||||||
|
// `.next()` optimizes better than `.nth(1)`
|
||||||
|
let mut iter = self.chars.clone();
|
||||||
|
iter.next();
|
||||||
|
iter.next();
|
||||||
|
iter.next().unwrap_or(EOF_CHAR)
|
||||||
|
}
|
||||||
|
|
||||||
/// Checks if there is nothing more to consume.
|
/// Checks if there is nothing more to consume.
|
||||||
pub(crate) fn is_eof(&self) -> bool {
|
pub(crate) fn is_eof(&self) -> bool {
|
||||||
self.chars.as_str().is_empty()
|
self.chars.as_str().is_empty()
|
||||||
|
@ -698,13 +698,17 @@ fn report_unknown_prefix(&self, start: BytePos) {
|
|||||||
let expn_data = prefix_span.ctxt().outer_expn_data();
|
let expn_data = prefix_span.ctxt().outer_expn_data();
|
||||||
|
|
||||||
if expn_data.edition >= Edition::Edition2021 {
|
if expn_data.edition >= Edition::Edition2021 {
|
||||||
|
let mut silence = false;
|
||||||
// In Rust 2021, this is a hard error.
|
// In Rust 2021, this is a hard error.
|
||||||
let sugg = if prefix == "rb" {
|
let sugg = if prefix == "rb" {
|
||||||
Some(errors::UnknownPrefixSugg::UseBr(prefix_span))
|
Some(errors::UnknownPrefixSugg::UseBr(prefix_span))
|
||||||
} else if expn_data.is_root() {
|
} else if expn_data.is_root() {
|
||||||
if self.cursor.first() == '\''
|
if self.cursor.first() == '\''
|
||||||
&& let Some(start) = self.last_lifetime
|
&& let Some(start) = self.last_lifetime
|
||||||
|
&& self.cursor.third() != '\''
|
||||||
{
|
{
|
||||||
|
// An "unclosed `char`" error will be emitted already, silence redundant error.
|
||||||
|
silence = true;
|
||||||
Some(errors::UnknownPrefixSugg::MeantStr {
|
Some(errors::UnknownPrefixSugg::MeantStr {
|
||||||
start,
|
start,
|
||||||
end: self.mk_sp(self.pos, self.pos + BytePos(1)),
|
end: self.mk_sp(self.pos, self.pos + BytePos(1)),
|
||||||
@ -715,7 +719,12 @@ fn report_unknown_prefix(&self, start: BytePos) {
|
|||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
self.dcx().emit_err(errors::UnknownPrefix { span: prefix_span, prefix, sugg });
|
let err = errors::UnknownPrefix { span: prefix_span, prefix, sugg };
|
||||||
|
if silence {
|
||||||
|
self.dcx().create_err(err).delay_as_bug();
|
||||||
|
} else {
|
||||||
|
self.dcx().emit_err(err);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Before Rust 2021, only emit a lint for migration.
|
// Before Rust 2021, only emit a lint for migration.
|
||||||
self.psess.buffer_lint_with_diagnostic(
|
self.psess.buffer_lint_with_diagnostic(
|
||||||
|
@ -4,5 +4,4 @@
|
|||||||
fn main() {
|
fn main() {
|
||||||
println!('hello world');
|
println!('hello world');
|
||||||
//[rust2015,rust2018,rust2021]~^ ERROR unterminated character literal
|
//[rust2015,rust2018,rust2021]~^ ERROR unterminated character literal
|
||||||
//[rust2021]~^^ ERROR prefix `world` is unknown
|
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,3 @@
|
|||||||
error: prefix `world` is unknown
|
|
||||||
--> $DIR/lex-bad-str-literal-as-char-3.rs:5:21
|
|
||||||
|
|
|
||||||
LL | println!('hello world');
|
|
||||||
| ^^^^^ unknown prefix
|
|
||||||
|
|
|
||||||
= note: prefixed identifiers and literals are reserved since Rust 2021
|
|
||||||
help: if you meant to write a string literal, use double quotes
|
|
||||||
|
|
|
||||||
LL | println!("hello world");
|
|
||||||
| ~ ~
|
|
||||||
|
|
||||||
error[E0762]: unterminated character literal
|
error[E0762]: unterminated character literal
|
||||||
--> $DIR/lex-bad-str-literal-as-char-3.rs:5:26
|
--> $DIR/lex-bad-str-literal-as-char-3.rs:5:26
|
||||||
|
|
|
|
||||||
@ -21,6 +9,6 @@ help: if you meant to write a string literal, use double quotes
|
|||||||
LL | println!("hello world");
|
LL | println!("hello world");
|
||||||
| ~ ~
|
| ~ ~
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0762`.
|
For more information about this error, try `rustc --explain E0762`.
|
||||||
|
Loading…
Reference in New Issue
Block a user