From 244322f0be1296f5ac4d6fc0dcc603b5ccab2832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Fri, 20 Mar 2026 18:44:08 +0000 Subject: [PATCH] Make `:` -> `=` typo suggestion verbose --- compiler/rustc_parse/src/parser/stmt.rs | 4 ++-- compiler/rustc_resolve/src/late/diagnostics.rs | 2 +- tests/ui/parser/recover/array-type-no-semi.stderr | 7 ++++++- .../recover-colon-instead-of-eq-in-local.stderr | 7 ++++++- .../ui/suggestions/let-binding-init-expr-as-ty.stderr | 10 +++++++--- .../type/type-ascription-instead-of-initializer.stderr | 7 ++++++- 6 files changed, 28 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_parse/src/parser/stmt.rs b/compiler/rustc_parse/src/parser/stmt.rs index 3b2102484bdf..44886de52312 100644 --- a/compiler/rustc_parse/src/parser/stmt.rs +++ b/compiler/rustc_parse/src/parser/stmt.rs @@ -362,7 +362,7 @@ fn parse_local(&mut self, super_: Option, attrs: AttrVec) -> PResult<'a, B // init parsed, ty error // Could parse the type as if it were the initializer, it is likely there was a // typo in the code: `:` instead of `=`. Add suggestion and emit the error. - err.span_suggestion_short( + err.span_suggestion_verbose( colon_sp, "use `=` if you meant to assign", " =", @@ -1134,7 +1134,7 @@ pub fn parse_full_stmt( false }; if suggest_eq { - e.span_suggestion_short( + e.span_suggestion_verbose( colon_sp, "use `=` if you meant to assign", "=", diff --git a/compiler/rustc_resolve/src/late/diagnostics.rs b/compiler/rustc_resolve/src/late/diagnostics.rs index 95a6b25d54e6..80e7a957c4d2 100644 --- a/compiler/rustc_resolve/src/late/diagnostics.rs +++ b/compiler/rustc_resolve/src/late/diagnostics.rs @@ -1271,7 +1271,7 @@ fn suggest_typo( Some((pat_sp, Some(ty_sp), None)) if ty_sp.contains(base_error.span) && base_error.could_be_expr => { - err.span_suggestion_short( + err.span_suggestion_verbose( pat_sp.between(ty_sp), "use `=` if you meant to assign", " = ", diff --git a/tests/ui/parser/recover/array-type-no-semi.stderr b/tests/ui/parser/recover/array-type-no-semi.stderr index 45f39fefe5e3..56c78b01ea39 100644 --- a/tests/ui/parser/recover/array-type-no-semi.stderr +++ b/tests/ui/parser/recover/array-type-no-semi.stderr @@ -17,7 +17,12 @@ LL | let a: [i32, ]; | - ^ expected `;` or `]` | | | while parsing the type for `a` - | help: use `=` if you meant to assign + | +help: use `=` if you meant to assign + | +LL - let a: [i32, ]; +LL + let a = [i32, ]; + | error: expected `;` or `]`, found `,` --> $DIR/array-type-no-semi.rs:12:16 diff --git a/tests/ui/parser/recover/recover-colon-instead-of-eq-in-local.stderr b/tests/ui/parser/recover/recover-colon-instead-of-eq-in-local.stderr index 15c27bb9451b..8c238c1dd307 100644 --- a/tests/ui/parser/recover/recover-colon-instead-of-eq-in-local.stderr +++ b/tests/ui/parser/recover/recover-colon-instead-of-eq-in-local.stderr @@ -13,7 +13,12 @@ LL | let _: std::env::temp_dir().join("foo"); | - ^ expected one of `!`, `+`, `->`, `::`, `;`, or `=` | | | while parsing the type for `_` - | help: use `=` if you meant to assign + | +help: use `=` if you meant to assign + | +LL - let _: std::env::temp_dir().join("foo"); +LL + let _= std::env::temp_dir().join("foo"); + | error: aborting due to 2 previous errors diff --git a/tests/ui/suggestions/let-binding-init-expr-as-ty.stderr b/tests/ui/suggestions/let-binding-init-expr-as-ty.stderr index 19a0e4b17d02..f0887f85d6ef 100644 --- a/tests/ui/suggestions/let-binding-init-expr-as-ty.stderr +++ b/tests/ui/suggestions/let-binding-init-expr-as-ty.stderr @@ -2,9 +2,13 @@ error[E0573]: expected type, found local variable `num` --> $DIR/let-binding-init-expr-as-ty.rs:2:27 | LL | let foo: i32::from_be(num); - | -- ^^^ not a type - | | - | help: use `=` if you meant to assign + | ^^^ not a type + | +help: use `=` if you meant to assign + | +LL - let foo: i32::from_be(num); +LL + let foo = i32::from_be(num); + | error: argument types not allowed with return type notation --> $DIR/let-binding-init-expr-as-ty.rs:2:26 diff --git a/tests/ui/type/type-ascription-instead-of-initializer.stderr b/tests/ui/type/type-ascription-instead-of-initializer.stderr index 630e82d254ee..edc38b0ca7b9 100644 --- a/tests/ui/type/type-ascription-instead-of-initializer.stderr +++ b/tests/ui/type/type-ascription-instead-of-initializer.stderr @@ -5,7 +5,12 @@ LL | let x: Vec::with_capacity(10, 20); | - ^^ expected type | | | while parsing the type for `x` - | help: use `=` if you meant to assign + | +help: use `=` if you meant to assign + | +LL - let x: Vec::with_capacity(10, 20); +LL + let x = Vec::with_capacity(10, 20); + | error[E0061]: this function takes 1 argument but 2 arguments were supplied --> $DIR/type-ascription-instead-of-initializer.rs:2:12