add third help hint to diagnostic error E0027

This commit is contained in:
Duncan Proctor 2024-10-22 01:51:54 -04:00 committed by Duncan
parent 814df6e50e
commit 10b60eba9b
11 changed files with 95 additions and 0 deletions

View File

@ -2070,6 +2070,25 @@ fn error_unmentioned_fields(
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,
);

View File

@ -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 };
| ~~~~~~

View File

@ -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, .. } => {}
| ~~~~~~
@ -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, .. } => {}
| ~~~~~~
@ -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, .. } => {}
| ~~~~~~
@ -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 { .. } => {}
| ~~~~~~

View File

@ -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();
| ~~~~~~
@ -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();
| ~~~~~~
@ -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 };
| ~~~~~~

View File

@ -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();
| ~~~~~~

View File

@ -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();
| ~~~~~~
@ -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();
| ~~~~~~

View File

@ -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;
| ~~~~~~

View File

@ -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;
| ~~~~~~

View File

@ -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 {
| ~~~~~~

View File

@ -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, .. } => (),
| ~~~~~~
@ -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, .. } => (),
| ~~~~~~
@ -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, .. } => (),
| ~~~~~~
@ -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: "", .. } => (),
| ~~~~~~

View File

@ -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();
| ~~~~~~