Skip to content

Commit

Permalink
Rollup merge of #132025 - duncpro:E0027, r=compiler-errors
Browse files Browse the repository at this point in the history
fix suggestion for diagnostic error E0027

Closes #132008
  • Loading branch information
workingjubilee authored Nov 5, 2024
2 parents 972fef2 + 10b60eb commit c17cf1d
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 @@ -2071,6 +2071,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 c17cf1d

Please sign in to comment.