From d8540ae5a98b6135253521cdbf34c5953494a5bf Mon Sep 17 00:00:00 2001 From: Reese Williams Date: Sat, 20 Feb 2021 15:33:08 -0500 Subject: [PATCH] Fix suggestion span and move suggestions into new subwindow. --- compiler/rustc_typeck/src/check/pat.rs | 8 ++++---- src/test/ui/issues/issue-17800.stderr | 9 ++++++--- .../missing-fields-in-struct-pattern.stderr | 9 ++++++--- .../ui/parser/recover-from-bad-variant.stderr | 9 ++++++--- .../ui/structs/struct-tuple-field-names.stderr | 18 ++++++++++++------ src/test/ui/type/type-check/issue-41314.stderr | 9 ++++++--- 6 files changed, 40 insertions(+), 22 deletions(-) diff --git a/compiler/rustc_typeck/src/check/pat.rs b/compiler/rustc_typeck/src/check/pat.rs index cfcd0d673d0..c21e7d8aebc 100644 --- a/compiler/rustc_typeck/src/check/pat.rs +++ b/compiler/rustc_typeck/src/check/pat.rs @@ -1256,8 +1256,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { "tuple variant `{}` written as struct variant", path ); - err.span_suggestion( - qpath.span().shrink_to_hi().until(pat.span), + err.span_suggestion_verbose( + qpath.span().shrink_to_hi().to(pat.span.shrink_to_hi()), "use the tuple variant pattern syntax instead", format!("({})", self.get_suggested_tuple_struct_pattern(fields, variant)), Applicability::MaybeIncorrect, @@ -1416,8 +1416,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { Applicability::MaybeIncorrect, ) }; - err.span_suggestion( - qpath.span().shrink_to_hi().until(pat.span), + err.span_suggestion_verbose( + qpath.span().shrink_to_hi().to(pat.span.shrink_to_hi()), "use the tuple variant pattern syntax instead", format!("({})", sugg), appl, diff --git a/src/test/ui/issues/issue-17800.stderr b/src/test/ui/issues/issue-17800.stderr index 4f961823231..7df86d7326b 100644 --- a/src/test/ui/issues/issue-17800.stderr +++ b/src/test/ui/issues/issue-17800.stderr @@ -2,9 +2,12 @@ error[E0769]: tuple variant `MyOption::MySome` written as struct variant --> $DIR/issue-17800.rs:8:9 | LL | MyOption::MySome { x: 42 } => (), - | ----------------^^^^^^^^^^ - | | - | help: use the tuple variant pattern syntax instead: `(42)` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +help: use the tuple variant pattern syntax instead + | +LL | MyOption::MySome(42) => (), + | ^^^^ error: aborting due to previous error diff --git a/src/test/ui/missing/missing-fields-in-struct-pattern.stderr b/src/test/ui/missing/missing-fields-in-struct-pattern.stderr index 81d208e4bc3..a95b5bb94d2 100644 --- a/src/test/ui/missing/missing-fields-in-struct-pattern.stderr +++ b/src/test/ui/missing/missing-fields-in-struct-pattern.stderr @@ -2,9 +2,12 @@ error[E0769]: tuple variant `S` written as struct variant --> $DIR/missing-fields-in-struct-pattern.rs:4:12 | LL | if let S { a, b, c, d } = S(1, 2, 3, 4) { - | -^^^^^^^^^^^^^^^ - | | - | help: use the tuple variant pattern syntax instead: `(a, b, c, d)` + | ^^^^^^^^^^^^^^^^ + | +help: use the tuple variant pattern syntax instead + | +LL | if let S(a, b, c, d) = S(1, 2, 3, 4) { + | ^^^^^^^^^^^^ error: aborting due to previous error diff --git a/src/test/ui/parser/recover-from-bad-variant.stderr b/src/test/ui/parser/recover-from-bad-variant.stderr index 86086cf97ec..9b9d2bc4972 100644 --- a/src/test/ui/parser/recover-from-bad-variant.stderr +++ b/src/test/ui/parser/recover-from-bad-variant.stderr @@ -22,9 +22,12 @@ error[E0769]: tuple variant `Enum::Bar` written as struct variant --> $DIR/recover-from-bad-variant.rs:12:9 | LL | Enum::Bar { a, b } => {} - | ---------^^^^^^^^^ - | | - | help: use the tuple variant pattern syntax instead: `(a, b)` + | ^^^^^^^^^^^^^^^^^^ + | +help: use the tuple variant pattern syntax instead + | +LL | Enum::Bar(a, b) => {} + | ^^^^^^ error: aborting due to 3 previous errors diff --git a/src/test/ui/structs/struct-tuple-field-names.stderr b/src/test/ui/structs/struct-tuple-field-names.stderr index 80c6187cbbe..29e72146521 100644 --- a/src/test/ui/structs/struct-tuple-field-names.stderr +++ b/src/test/ui/structs/struct-tuple-field-names.stderr @@ -2,17 +2,23 @@ error[E0769]: tuple variant `E::S` written as struct variant --> $DIR/struct-tuple-field-names.rs:8:9 | LL | E::S { 0, 1 } => {} - | ----^^^^^^^^^ - | | - | help: use the tuple variant pattern syntax instead: `(_, _)` + | ^^^^^^^^^^^^^ + | +help: use the tuple variant pattern syntax instead + | +LL | E::S(_, _) => {} + | ^^^^^^ error[E0769]: tuple variant `S` written as struct variant --> $DIR/struct-tuple-field-names.rs:13:9 | LL | S { } => {} - | -^^^^ - | | - | help: use the tuple variant pattern syntax instead: `(_, _)` + | ^^^^^ + | +help: use the tuple variant pattern syntax instead + | +LL | S(_, _) => {} + | ^^^^^^ error: aborting due to 2 previous errors diff --git a/src/test/ui/type/type-check/issue-41314.stderr b/src/test/ui/type/type-check/issue-41314.stderr index 78c14d37518..c3d41ae68cd 100644 --- a/src/test/ui/type/type-check/issue-41314.stderr +++ b/src/test/ui/type/type-check/issue-41314.stderr @@ -2,9 +2,12 @@ error[E0769]: tuple variant `X::Y` written as struct variant --> $DIR/issue-41314.rs:7:9 | LL | X::Y { number } => {} - | ----^^^^^^^^^^^ - | | - | help: use the tuple variant pattern syntax instead: `(number)` + | ^^^^^^^^^^^^^^^ + | +help: use the tuple variant pattern syntax instead + | +LL | X::Y(number) => {} + | ^^^^^^^^ error: aborting due to previous error