From 031e0854509759ccf7dbc697bfd5d958adac83f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Fri, 6 Jan 2023 02:49:15 +0000 Subject: [PATCH] Tweak output --- compiler/rustc_hir_typeck/src/_match.rs | 6 +- compiler/rustc_hir_typeck/src/demand.rs | 6 +- .../src/traits/error_reporting/suggestions.rs | 8 +- ...igned-block-without-tail-expression.stderr | 90 ++++++++----------- 4 files changed, 44 insertions(+), 66 deletions(-) diff --git a/compiler/rustc_hir_typeck/src/_match.rs b/compiler/rustc_hir_typeck/src/_match.rs index b47a5cf993b4..b6f19d3cc684 100644 --- a/compiler/rustc_hir_typeck/src/_match.rs +++ b/compiler/rustc_hir_typeck/src/_match.rs @@ -224,14 +224,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let mut ret_span: MultiSpan = semi_span.into(); ret_span.push_span_label( expr.span, - "this could be implicitly returned but it is a statement, not a \ - tail expression", + "this could be implicitly returned but it is a statement, not a tail expression", ); ret_span.push_span_label(ret, "the `match` arms can conform to this return type"); ret_span.push_span_label( semi_span, - "the `match` is a statement because of this semicolon, consider \ - removing it", + "the `match` is a statement because of this semicolon, consider removing it", ); diag.span_note(ret_span, "you might have meant to return the `match` expression"); diag.tool_only_span_suggestion( diff --git a/compiler/rustc_hir_typeck/src/demand.rs b/compiler/rustc_hir_typeck/src/demand.rs index a9e6b1411700..bbe15eb589da 100644 --- a/compiler/rustc_hir_typeck/src/demand.rs +++ b/compiler/rustc_hir_typeck/src/demand.rs @@ -1699,20 +1699,20 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { return; } let [.., stmt] = block.stmts else { - err.span_help(block.span, "this empty block is missing a tail expression"); + err.span_label(block.span, "this empty block is missing a tail expression"); return; }; let hir::StmtKind::Semi(tail_expr) = stmt.kind else { return; }; let Some(ty) = self.node_ty_opt(tail_expr.hir_id) else { return; }; if self.can_eq(self.param_env, expected_ty, ty).is_ok() { - err.span_suggestion_verbose( + err.span_suggestion_short( stmt.span.with_lo(tail_expr.span.hi()), "remove this semicolon", "", Applicability::MachineApplicable, ); } else { - err.span_help(block.span, "this block is missing a tail expression"); + err.span_label(block.span, "this block is missing a tail expression"); } } } diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs index ad2711209e25..d0c2359f06f9 100644 --- a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs +++ b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs @@ -1077,12 +1077,12 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> { return; } let [.., stmt] = block.stmts else { - err.span_help(block.span, "this empty block is missing a tail expression"); + err.span_label(block.span, "this empty block is missing a tail expression"); return; }; let hir::StmtKind::Semi(tail_expr) = stmt.kind else { return; }; let Some(ty) = typeck.expr_ty_opt(tail_expr) else { - err.span_help(block.span, "this block is missing a tail expression"); + err.span_label(block.span, "this block is missing a tail expression"); return; }; let ty = self.resolve_numeric_literals_with_default(self.resolve_vars_if_possible(ty)); @@ -1091,14 +1091,14 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> { let new_obligation = self.mk_trait_obligation_with_new_self_ty(obligation.param_env, trait_pred_and_self); if self.predicate_must_hold_modulo_regions(&new_obligation) { - err.span_suggestion_verbose( + err.span_suggestion_short( stmt.span.with_lo(tail_expr.span.hi()), "remove this semicolon", "", Applicability::MachineApplicable, ); } else { - err.span_help(block.span, "this block is missing a tail expression"); + err.span_label(block.span, "this block is missing a tail expression"); } } diff --git a/src/test/ui/type/binding-assigned-block-without-tail-expression.stderr b/src/test/ui/type/binding-assigned-block-without-tail-expression.stderr index 646c632517ae..3e96d7f317b4 100644 --- a/src/test/ui/type/binding-assigned-block-without-tail-expression.stderr +++ b/src/test/ui/type/binding-assigned-block-without-tail-expression.stderr @@ -1,29 +1,25 @@ error[E0277]: `()` doesn't implement `std::fmt::Display` --> $DIR/binding-assigned-block-without-tail-expression.rs:14:20 | +LL | 42; + | - help: remove this semicolon +... LL | println!("{}", x); | ^ `()` cannot be formatted with the default formatter | = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) -help: remove this semicolon - | -LL - 42; -LL + 42 - | error[E0277]: `()` doesn't implement `std::fmt::Display` --> $DIR/binding-assigned-block-without-tail-expression.rs:15:20 | +LL | let y = {}; + | -- this empty block is missing a tail expression +... LL | println!("{}", y); | ^ `()` cannot be formatted with the default formatter | -help: this empty block is missing a tail expression - --> $DIR/binding-assigned-block-without-tail-expression.rs:7:13 - | -LL | let y = {}; - | ^^ = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) @@ -31,32 +27,28 @@ LL | let y = {}; error[E0277]: `()` doesn't implement `std::fmt::Display` --> $DIR/binding-assigned-block-without-tail-expression.rs:16:20 | +LL | "hi"; + | - help: remove this semicolon +... LL | println!("{}", z); | ^ `()` cannot be formatted with the default formatter | = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) -help: remove this semicolon - | -LL - "hi"; -LL + "hi" - | error[E0277]: `()` doesn't implement `std::fmt::Display` --> $DIR/binding-assigned-block-without-tail-expression.rs:17:20 | -LL | println!("{}", s); - | ^ `()` cannot be formatted with the default formatter - | -help: this block is missing a tail expression - --> $DIR/binding-assigned-block-without-tail-expression.rs:11:13 - | LL | let s = { - | _____________^ + | _____________- LL | | S; LL | | }; - | |_____^ + | |_____- this block is missing a tail expression +... +LL | println!("{}", s); + | ^ `()` cannot be formatted with the default formatter + | = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) @@ -64,64 +56,52 @@ LL | | }; error[E0308]: mismatched types --> $DIR/binding-assigned-block-without-tail-expression.rs:18:18 | +LL | 42; + | - help: remove this semicolon +... LL | let _: i32 = x; | --- ^ expected `i32`, found `()` | | | expected due to this - | -help: remove this semicolon - | -LL - 42; -LL + 42 - | error[E0308]: mismatched types --> $DIR/binding-assigned-block-without-tail-expression.rs:19:18 | +LL | let y = {}; + | -- this empty block is missing a tail expression +... LL | let _: i32 = y; | --- ^ expected `i32`, found `()` | | | expected due to this - | -help: this empty block is missing a tail expression - --> $DIR/binding-assigned-block-without-tail-expression.rs:7:13 - | -LL | let y = {}; - | ^^ error[E0308]: mismatched types --> $DIR/binding-assigned-block-without-tail-expression.rs:20:18 | -LL | let _: i32 = z; - | --- ^ expected `i32`, found `()` - | | - | expected due to this - | -help: this block is missing a tail expression - --> $DIR/binding-assigned-block-without-tail-expression.rs:8:13 - | LL | let z = { - | _____________^ + | _____________- LL | | "hi"; LL | | }; - | |_____^ + | |_____- this block is missing a tail expression +... +LL | let _: i32 = z; + | --- ^ expected `i32`, found `()` + | | + | expected due to this error[E0308]: mismatched types --> $DIR/binding-assigned-block-without-tail-expression.rs:21:18 | -LL | let _: i32 = s; - | --- ^ expected `i32`, found `()` - | | - | expected due to this - | -help: this block is missing a tail expression - --> $DIR/binding-assigned-block-without-tail-expression.rs:11:13 - | LL | let s = { - | _____________^ + | _____________- LL | | S; LL | | }; - | |_____^ + | |_____- this block is missing a tail expression +... +LL | let _: i32 = s; + | --- ^ expected `i32`, found `()` + | | + | expected due to this error: aborting due to 8 previous errors