1
Fork 0

Add suggestion for bad block fragment error

This commit is contained in:
Michael Goulet 2023-06-23 19:18:18 +00:00
parent 04075b3202
commit 2cc7782cfd
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

@ -2186,6 +2186,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(),
},
});
}