Auto merge of #62638 - estebank:issue-62554, r=petrochenkov
Use snippet instead of pprinting statement Fix #62554.
This commit is contained in:
commit
83e4eed16e
6 changed files with 52 additions and 22 deletions
|
@ -4378,9 +4378,10 @@ impl<'a> Parser<'a> {
|
|||
Ok(Some(self.mk_item(span, ident, ItemKind::MacroDef(def), vis.clone(), attrs.to_vec())))
|
||||
}
|
||||
|
||||
fn parse_stmt_without_recovery(&mut self,
|
||||
macro_legacy_warnings: bool)
|
||||
-> PResult<'a, Option<Stmt>> {
|
||||
fn parse_stmt_without_recovery(
|
||||
&mut self,
|
||||
macro_legacy_warnings: bool,
|
||||
) -> PResult<'a, Option<Stmt>> {
|
||||
maybe_whole!(self, NtStmt, |x| Some(x));
|
||||
|
||||
let attrs = self.parse_outer_attributes()?;
|
||||
|
@ -4586,20 +4587,15 @@ impl<'a> Parser<'a> {
|
|||
if self.eat(&token::Semi) {
|
||||
stmt_span = stmt_span.with_hi(self.prev_span.hi());
|
||||
}
|
||||
let sugg = pprust::to_string(|s| {
|
||||
use crate::print::pprust::INDENT_UNIT;
|
||||
s.ibox(INDENT_UNIT);
|
||||
s.bopen();
|
||||
s.print_stmt(&stmt);
|
||||
s.bclose_maybe_open(stmt.span, false)
|
||||
});
|
||||
e.span_suggestion(
|
||||
stmt_span,
|
||||
"try placing this code inside a block",
|
||||
sugg,
|
||||
// speculative, has been misleading in the past (closed Issue #46836)
|
||||
Applicability::MaybeIncorrect
|
||||
);
|
||||
if let Ok(snippet) = self.sess.source_map().span_to_snippet(stmt_span) {
|
||||
e.span_suggestion(
|
||||
stmt_span,
|
||||
"try placing this code inside a block",
|
||||
format!("{{ {} }}", snippet),
|
||||
// speculative, has been misleading in the past (#46836)
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
}
|
||||
}
|
||||
Err(mut e) => {
|
||||
self.recover_stmt_(SemiColonMode::Break, BlockMode::Ignore);
|
||||
|
|
|
@ -745,8 +745,7 @@ impl<'a> State<'a> {
|
|||
self.bclose_maybe_open(span, true)
|
||||
}
|
||||
|
||||
crate fn break_offset_if_not_bol(&mut self, n: usize,
|
||||
off: isize) {
|
||||
crate fn break_offset_if_not_bol(&mut self, n: usize, off: isize) {
|
||||
if !self.s.is_beginning_of_line() {
|
||||
self.s.break_offset(n, off)
|
||||
} else {
|
||||
|
|
|
@ -2,7 +2,7 @@ error: expected `{`, found `foo`
|
|||
--> $DIR/issue-39848.rs:8:19
|
||||
|
|
||||
LL | if $tgt.has_$field() {}
|
||||
| -- - help: try placing this code inside a block: `{ foo(); }`
|
||||
| -- - help: try placing this code inside a block: `{ ) }`
|
||||
| |
|
||||
| this `if` statement has a condition, but no block
|
||||
...
|
||||
|
|
5
src/test/ui/issues/issue-62554.rs
Normal file
5
src/test/ui/issues/issue-62554.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
fn main() {}
|
||||
|
||||
fn foo(u: u8) { if u8 macro_rules! u8 { (u6) => { fn uuuuuuuuuuu() { use s loo mod u8 {
|
||||
//~^ ERROR expected `{`, found `macro_rules`
|
||||
//~ ERROR this file contains an un-closed delimiter
|
30
src/test/ui/issues/issue-62554.stderr
Normal file
30
src/test/ui/issues/issue-62554.stderr
Normal file
|
@ -0,0 +1,30 @@
|
|||
error: this file contains an un-closed delimiter
|
||||
--> $DIR/issue-62554.rs:5:53
|
||||
|
|
||||
LL | fn foo(u: u8) { if u8 macro_rules! u8 { (u6) => { fn uuuuuuuuuuu() { use s loo mod u8 {
|
||||
| - - - - - un-closed delimiter
|
||||
| | | | |
|
||||
| | | | un-closed delimiter
|
||||
| | | un-closed delimiter
|
||||
| un-closed delimiter un-closed delimiter
|
||||
LL |
|
||||
LL |
|
||||
| ^
|
||||
|
||||
error: expected `{`, found `macro_rules`
|
||||
--> $DIR/issue-62554.rs:3:23
|
||||
|
|
||||
LL | fn foo(u: u8) { if u8 macro_rules! u8 { (u6) => { fn uuuuuuuuuuu() { use s loo mod u8 {
|
||||
| -- ^^^^^^^^^^^ expected `{`
|
||||
| |
|
||||
| this `if` statement has a condition, but no block
|
||||
help: try placing this code inside a block
|
||||
|
|
||||
LL | fn foo(u: u8) { if u8 { macro_rules! u8 { (u6) => { fn uuuuuuuuuuu() { use s loo mod u8 {
|
||||
LL |
|
||||
LL |
|
||||
LL | }
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
|
@ -11,7 +11,7 @@ LL | if true 'b: {}
|
|||
| -- ^^----
|
||||
| | |
|
||||
| | expected `{`
|
||||
| | help: try placing this code inside a block: `{ 'b: { } }`
|
||||
| | help: try placing this code inside a block: `{ 'b: {} }`
|
||||
| this `if` statement has a condition, but no block
|
||||
|
||||
error: expected `{`, found `'b`
|
||||
|
@ -21,7 +21,7 @@ LL | if true {} else 'b: {}
|
|||
| ^^----
|
||||
| |
|
||||
| expected `{`
|
||||
| help: try placing this code inside a block: `{ 'b: { } }`
|
||||
| help: try placing this code inside a block: `{ 'b: {} }`
|
||||
|
||||
error: expected one of `.`, `?`, `{`, or an operator, found `'b`
|
||||
--> $DIR/label_break_value_illegal_uses.rs:18:17
|
||||
|
|
Loading…
Reference in a new issue