Rollup merge of #112978 - compiler-errors:bad-block-sugg, r=davidtwco

Add suggestion for bad block fragment error

Makes it a bit clearer how to fix this parser restriction
This commit is contained in:
Matthias Krüger 2023-06-27 17:48:45 +02:00 committed by GitHub
commit e992895c1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 0 deletions

View File

@ -353,6 +353,7 @@ parse_int_literal_too_large = integer literal is too large
parse_invalid_block_macro_segment = cannot use a `block` macro fragment here
.label = the `block` fragment is within this context
.suggestion = wrap this in another block
parse_invalid_char_in_escape = {parse_invalid_char_in_escape_msg}: `{$ch}`
.label = {parse_invalid_char_in_escape_msg}

View File

@ -333,6 +333,17 @@ pub(crate) struct InvalidBlockMacroSegment {
pub span: Span,
#[label]
pub context: Span,
#[subdiagnostic]
pub wrap: WrapInExplicitBlock,
}
#[derive(Subdiagnostic)]
#[multipart_suggestion(parse_suggestion, applicability = "machine-applicable")]
pub(crate) struct WrapInExplicitBlock {
#[suggestion_part(code = "{{ ")]
pub lo: Span,
#[suggestion_part(code = " }}")]
pub hi: Span,
}
#[derive(Diagnostic)]

View File

@ -2192,6 +2192,10 @@ impl<'a> Parser<'a> {
self.sess.emit_err(errors::InvalidBlockMacroSegment {
span: self.token.span,
context: lo.to(self.token.span),
wrap: errors::WrapInExplicitBlock {
lo: self.token.span.shrink_to_lo(),
hi: self.token.span.shrink_to_hi(),
},
});
}

View File

@ -10,6 +10,10 @@ LL | m!({});
| ------ in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
help: wrap this in another block
|
LL | 'lab: { $b };
| + +
error: cannot use a `block` macro fragment here
--> $DIR/bad-interpolated-block.rs:6:16
@ -23,6 +27,10 @@ LL | m!({});
| ------ in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
help: wrap this in another block
|
LL | unsafe { $b };
| + +
error: cannot use a `block` macro fragment here
--> $DIR/bad-interpolated-block.rs:7:23
@ -34,6 +42,10 @@ LL | m!({});
| ------ in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
help: wrap this in another block
|
LL | |x: u8| -> () { $b };
| + +
error: aborting due to 3 previous errors

View File

@ -77,6 +77,10 @@ LL | m!({});
| ------ in this macro invocation
|
= note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info)
help: wrap this in another block
|
LL | 'l5 { $b };
| + +
error: labeled expression must be followed by `:`
--> $DIR/labeled-no-colon-expr.rs:14:8