Skip to content

Commit

Permalink
add third help hint to diagnostic error E0027
Browse files Browse the repository at this point in the history
tidy

field -> value

Revert "field -> value"

This reverts commit a737832.

Revert "tidy"

This reverts commit e2a47d1.

Revert "add third help hint to diagnostic error E0027"

This reverts commit 90c69c8.

revert message change & fix failing tests

remove unnecessary file

remove trailing whitespace
  • Loading branch information
duncpro committed Oct 24, 2024
1 parent 814df6e commit 646fa96
Show file tree
Hide file tree
Showing 11 changed files with 95 additions and 0 deletions.
19 changes: 19 additions & 0 deletions compiler/rustc_hir_typeck/src/pat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2070,6 +2070,25 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
s = pluralize!(len),
them = if len == 1 { "it" } else { "them" },
),
format!(
"{}{}{}{}",
prefix,
unmentioned_fields
.iter()
.map(|(_, name)| {
let field_name = name.to_string();
format!("{field_name}: _")
})
.collect::<Vec<_>>()
.join(", "),
if have_inaccessible_fields { ", .." } else { "" },
postfix,
),
Applicability::MachineApplicable,
);
err.span_suggestion(
sp,
"or always ignore missing fields here",
format!("{prefix}..{postfix}"),
Applicability::MachineApplicable,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ LL | Struct { a, b } = Struct { a: 1, b: 2 };
| ~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | Struct { a, b: _ } = Struct { a: 1, b: 2 };
| ~~~~~~~~
help: or always ignore missing fields here
|
LL | Struct { a, .. } = Struct { a: 1, b: 2 };
| ~~~~~~

Expand Down
16 changes: 16 additions & 0 deletions tests/ui/error-codes/E0027.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ LL | Dog { age: x, name } => {}
| ~~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | Dog { age: x, name: _ } => {}
| ~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | Dog { age: x, .. } => {}
| ~~~~~~

Expand All @@ -25,6 +29,10 @@ LL | Dog { name: x, age } => {}
| ~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | Dog { name: x, age: _ } => {}
| ~~~~~~~~~~
help: or always ignore missing fields here
|
LL | Dog { name: x, .. } => {}
| ~~~~~~

Expand All @@ -40,6 +48,10 @@ LL | Dog { name: x, age } => {}
| ~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | Dog { name: x, age: _ } => {}
| ~~~~~~~~~~
help: or always ignore missing fields here
|
LL | Dog { name: x, .. } => {}
| ~~~~~~

Expand All @@ -55,6 +67,10 @@ LL | Dog { name, age } => {}
| ~~~~~~~~~~~~~
help: if you don't care about these missing fields, you can explicitly ignore them
|
LL | Dog { name: _, age: _ } => {}
| ~~~~~~~~~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | Dog { .. } => {}
| ~~~~~~

Expand Down
12 changes: 12 additions & 0 deletions tests/ui/pattern/usefulness/doc-hidden-fields.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ LL | let HiddenStruct { one, two, .. } = HiddenStruct::default();
| ~~~~~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | let HiddenStruct { one, two: _, .. } = HiddenStruct::default();
| ~~~~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | let HiddenStruct { one, .. } = HiddenStruct::default();
| ~~~~~~

Expand All @@ -36,6 +40,10 @@ LL | let HiddenStruct { one, hide, two } = HiddenStruct::default();
| ~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | let HiddenStruct { one, hide, two: _ } = HiddenStruct::default();
| ~~~~~~~~~~
help: or always ignore missing fields here
|
LL | let HiddenStruct { one, hide, .. } = HiddenStruct::default();
| ~~~~~~

Expand All @@ -51,6 +59,10 @@ LL | let InCrate { a, b, im_hidden } = InCrate { a: 0, b: false, im_hidden:
| ~~~~~~~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | let InCrate { a, b, im_hidden: _ } = InCrate { a: 0, b: false, im_hidden: 0 };
| ~~~~~~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | let InCrate { a, b, .. } = InCrate { a: 0, b: false, im_hidden: 0 };
| ~~~~~~

Expand Down
4 changes: 4 additions & 0 deletions tests/ui/pattern/usefulness/stable-gated-fields.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ LL | let UnstableStruct { stable, stable2, .. } = UnstableStruct::default();
| ~~~~~~~~~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | let UnstableStruct { stable, stable2: _, .. } = UnstableStruct::default();
| ~~~~~~~~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | let UnstableStruct { stable, .. } = UnstableStruct::default();
| ~~~~~~

Expand Down
8 changes: 8 additions & 0 deletions tests/ui/pattern/usefulness/unstable-gated-fields.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ LL | let UnstableStruct { stable, stable2, unstable } = UnstableStruct::defa
| ~~~~~~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | let UnstableStruct { stable, stable2, unstable: _ } = UnstableStruct::default();
| ~~~~~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | let UnstableStruct { stable, stable2, .. } = UnstableStruct::default();
| ~~~~~~

Expand All @@ -25,6 +29,10 @@ LL | let UnstableStruct { stable, unstable, stable2 } = UnstableStruct::defa
| ~~~~~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | let UnstableStruct { stable, unstable, stable2: _ } = UnstableStruct::default();
| ~~~~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | let UnstableStruct { stable, unstable, .. } = UnstableStruct::default();
| ~~~~~~

Expand Down
4 changes: 4 additions & 0 deletions tests/ui/structs/struct-field-cfg.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ LL | let Foo { present } = foo;
| ~~~~~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | let Foo { present: _ } = foo;
| ~~~~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | let Foo { .. } = foo;
| ~~~~~~

Expand Down
4 changes: 4 additions & 0 deletions tests/ui/structs/struct-pat-derived-error.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ LL | let A { x, y, b, c } = self.d;
| ~~~~~~~~
help: if you don't care about these missing fields, you can explicitly ignore them
|
LL | let A { x, y, b: _, c: _ } = self.d;
| ~~~~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | let A { x, y, .. } = self.d;
| ~~~~~~

Expand Down
4 changes: 4 additions & 0 deletions tests/ui/structs/struct-tuple-field-names.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ LL | if let E::S { 0: a, 1: _ } = x {
| ~~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | if let E::S { 0: a, 1: _ } = x {
| ~~~~~~~~
help: or always ignore missing fields here
|
LL | if let E::S { 0: a, .. } = x {
| ~~~~~~

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ LL | Foo::Bar { a, aa: 1, c, b } => (),
| ~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | Foo::Bar { a, aa: 1, c, b: _ } => (),
| ~~~~~~~~
help: or always ignore missing fields here
|
LL | Foo::Bar { a, aa: 1, c, .. } => (),
| ~~~~~~

Expand All @@ -43,6 +47,10 @@ LL | Foo::Baz { bb: 1.0, a } => (),
| ~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | Foo::Baz { bb: 1.0, a: _ } => (),
| ~~~~~~~~
help: or always ignore missing fields here
|
LL | Foo::Baz { bb: 1.0, .. } => (),
| ~~~~~~

Expand All @@ -64,6 +72,10 @@ LL | Foo::Bar { a, aa: "", c, b } => (),
| ~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | Foo::Bar { a, aa: "", c, b: _ } => (),
| ~~~~~~~~
help: or always ignore missing fields here
|
LL | Foo::Bar { a, aa: "", c, .. } => (),
| ~~~~~~

Expand All @@ -85,6 +97,10 @@ LL | Foo::Baz { bb: "", a } => (),
| ~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | Foo::Baz { bb: "", a: _ } => (),
| ~~~~~~~~
help: or always ignore missing fields here
|
LL | Foo::Baz { bb: "", .. } => (),
| ~~~~~~

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ LL | let foo::Foo { visible, .. } = foo::Foo::default();
| ~~~~~~~~~~~~~~~
help: if you don't care about this missing field, you can explicitly ignore it
|
LL | let foo::Foo { visible: _, .. } = foo::Foo::default();
| ~~~~~~~~~~~~~~~~~~
help: or always ignore missing fields here
|
LL | let foo::Foo { .. } = foo::Foo::default();
| ~~~~~~

Expand Down

0 comments on commit 646fa96

Please sign in to comment.