Suggest wrapping mac args in parens rather than the whole expression
This commit is contained in:
parent
c1c7707238
commit
ec263df5e4
@ -722,6 +722,8 @@ parse_sugg_turbofish_syntax = use `::<...>` instead of `<...>` to specify lifeti
|
||||
|
||||
parse_sugg_wrap_expression_in_parentheses = wrap the expression in parentheses
|
||||
|
||||
parse_sugg_wrap_macro_in_parentheses = use parentheses instead of braces for this macro
|
||||
|
||||
parse_sugg_wrap_pattern_in_parens = wrap the pattern in parentheses
|
||||
|
||||
parse_switch_mut_let_order =
|
||||
|
@ -722,19 +722,32 @@ pub(crate) struct LabeledLoopInBreak {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
#[subdiagnostic]
|
||||
pub sub: WrapExpressionInParentheses,
|
||||
pub sub: WrapInParentheses,
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
|
||||
pub(crate) enum WrapInParentheses {
|
||||
#[multipart_suggestion(
|
||||
parse_sugg_wrap_expression_in_parentheses,
|
||||
applicability = "machine-applicable"
|
||||
)]
|
||||
pub(crate) struct WrapExpressionInParentheses {
|
||||
Expression {
|
||||
#[suggestion_part(code = "(")]
|
||||
pub left: Span,
|
||||
left: Span,
|
||||
#[suggestion_part(code = ")")]
|
||||
pub right: Span,
|
||||
right: Span,
|
||||
},
|
||||
#[multipart_suggestion(
|
||||
parse_sugg_wrap_macro_in_parentheses,
|
||||
applicability = "machine-applicable"
|
||||
)]
|
||||
MacroArgs {
|
||||
#[suggestion_part(code = "(")]
|
||||
left: Span,
|
||||
#[suggestion_part(code = ")")]
|
||||
right: Span,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
@ -936,7 +949,7 @@ pub(crate) struct InvalidExpressionInLetElse {
|
||||
pub span: Span,
|
||||
pub operator: &'static str,
|
||||
#[subdiagnostic]
|
||||
pub sugg: WrapExpressionInParentheses,
|
||||
pub sugg: WrapInParentheses,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
@ -945,7 +958,7 @@ pub(crate) struct InvalidCurlyInLetElse {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
#[subdiagnostic]
|
||||
pub sugg: WrapExpressionInParentheses,
|
||||
pub sugg: WrapInParentheses,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
|
@ -1844,7 +1844,7 @@ fn parse_expr_break(&mut self) -> PResult<'a, P<Expr>> {
|
||||
let lexpr = self.parse_expr_labeled(label, true)?;
|
||||
self.dcx().emit_err(errors::LabeledLoopInBreak {
|
||||
span: lexpr.span,
|
||||
sub: errors::WrapExpressionInParentheses {
|
||||
sub: errors::WrapInParentheses::Expression {
|
||||
left: lexpr.span.shrink_to_lo(),
|
||||
right: lexpr.span.shrink_to_hi(),
|
||||
},
|
||||
|
@ -389,7 +389,7 @@ fn check_let_else_init_bool_expr(&self, init: &ast::Expr) {
|
||||
self.dcx().emit_err(errors::InvalidExpressionInLetElse {
|
||||
span: init.span,
|
||||
operator: op.node.as_str(),
|
||||
sugg: errors::WrapExpressionInParentheses {
|
||||
sugg: errors::WrapInParentheses::Expression {
|
||||
left: init.span.shrink_to_lo(),
|
||||
right: init.span.shrink_to_hi(),
|
||||
},
|
||||
@ -400,12 +400,19 @@ fn check_let_else_init_bool_expr(&self, init: &ast::Expr) {
|
||||
|
||||
fn check_let_else_init_trailing_brace(&self, init: &ast::Expr) {
|
||||
if let Some(trailing) = classify::expr_trailing_brace(init) {
|
||||
self.dcx().emit_err(errors::InvalidCurlyInLetElse {
|
||||
span: trailing.span.with_lo(trailing.span.hi() - BytePos(1)),
|
||||
sugg: errors::WrapExpressionInParentheses {
|
||||
let sugg = match &trailing.kind {
|
||||
ExprKind::MacCall(mac) => errors::WrapInParentheses::MacroArgs {
|
||||
left: mac.args.dspan.open,
|
||||
right: mac.args.dspan.close,
|
||||
},
|
||||
_ => errors::WrapInParentheses::Expression {
|
||||
left: trailing.span.shrink_to_lo(),
|
||||
right: trailing.span.shrink_to_hi(),
|
||||
},
|
||||
};
|
||||
self.dcx().emit_err(errors::InvalidCurlyInLetElse {
|
||||
span: trailing.span.with_lo(trailing.span.hi() - BytePos(1)),
|
||||
sugg,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -234,10 +234,10 @@ error: right curly brace `}` before `else` in a `let...else` statement not allow
|
||||
LL | let bad = format_args! {""} else { return; };
|
||||
| ^
|
||||
|
|
||||
help: wrap the expression in parentheses
|
||||
help: use parentheses instead of braces for this macro
|
||||
|
|
||||
LL | let bad = (format_args! {""}) else { return; };
|
||||
| + +
|
||||
LL | let bad = format_args! ("") else { return; };
|
||||
| ~ ~
|
||||
|
||||
error: right curly brace `}` before `else` in a `let...else` statement not allowed
|
||||
--> $DIR/bad-let-else-statement.rs:181:25
|
||||
@ -249,10 +249,10 @@ LL | b!(1); b!(2);
|
||||
| ----- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `b` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
help: wrap the expression in parentheses
|
||||
help: use parentheses instead of braces for this macro
|
||||
|
|
||||
LL | let x = (a! {}) else { return; };
|
||||
| + +
|
||||
LL | let x = a! () else { return; };
|
||||
| ~~
|
||||
|
||||
error: aborting due to 19 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user