mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 14:01:51 +00:00
Don't mention already set fields
This commit is contained in:
parent
408bbd0406
commit
140c011ca6
@ -2081,13 +2081,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
},
|
||||
_ => {
|
||||
// prevent all specified fields from being suggested
|
||||
let skip_fields = skip_fields.iter().map(|x| x.ident.name);
|
||||
if let Some(field_name) = self.suggest_field_name(
|
||||
variant,
|
||||
field.ident.name,
|
||||
skip_fields.collect(),
|
||||
expr_span,
|
||||
) {
|
||||
let skip_fields: Vec<_> = skip_fields.iter().map(|x| x.ident.name).collect();
|
||||
if let Some(field_name) =
|
||||
self.suggest_field_name(variant, field.ident.name, &skip_fields, expr_span)
|
||||
{
|
||||
err.span_suggestion(
|
||||
field.ident.span,
|
||||
"a field with a similar name exists",
|
||||
@ -2108,9 +2105,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
format!("`{ty}` does not have this field"),
|
||||
);
|
||||
}
|
||||
let available_field_names =
|
||||
let mut available_field_names =
|
||||
self.available_field_names(variant, expr_span);
|
||||
if !available_field_names.is_empty() {
|
||||
available_field_names
|
||||
.retain(|name| skip_fields.iter().all(|skip| name != skip));
|
||||
if available_field_names.is_empty() {
|
||||
err.note("all struct fields are already assigned");
|
||||
} else {
|
||||
err.note(format!(
|
||||
"available fields are: {}",
|
||||
self.name_series_display(available_field_names)
|
||||
@ -2130,7 +2131,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
&self,
|
||||
variant: &'tcx ty::VariantDef,
|
||||
field: Symbol,
|
||||
skip: Vec<Symbol>,
|
||||
skip: &[Symbol],
|
||||
// The span where stability will be checked
|
||||
span: Span,
|
||||
) -> Option<Symbol> {
|
||||
@ -2582,7 +2583,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
access_span: Span,
|
||||
) {
|
||||
if let Some(suggested_field_name) =
|
||||
self.suggest_field_name(def.non_enum_variant(), field.name, vec![], access_span)
|
||||
self.suggest_field_name(def.non_enum_variant(), field.name, &[], access_span)
|
||||
{
|
||||
err.span_suggestion(
|
||||
field.span,
|
||||
|
@ -3,6 +3,8 @@ error[E0559]: variant `Option<_>::None` has no field named `value`
|
||||
|
|
||||
LL | None { value: (), ..Default::default() }.await;
|
||||
| ^^^^^ `Option<_>::None` does not have this field
|
||||
|
|
||||
= note: all struct fields are already assigned
|
||||
|
||||
error[E0277]: `Option<_>` is not a future
|
||||
--> $DIR/drop-track-bad-field-in-fru.rs:7:46
|
||||
|
@ -10,7 +10,7 @@ error[E0560]: struct `Demo` has no field named `egregiously_nonexistent_field`
|
||||
LL | Self { secret_integer: 3, egregiously_nonexistent_field: () }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Demo` does not have this field
|
||||
|
|
||||
= note: available fields are: `favorite_integer`, `secret_integer`, `innocently_misspellable`, `another_field`, `yet_another_field` ... and 2 others
|
||||
= note: available fields are: `favorite_integer`, `innocently_misspellable`, `another_field`, `yet_another_field`, `always_more_fields`, `and_ever`
|
||||
|
||||
error[E0609]: no field `inocently_mispellable` on type `Demo`
|
||||
--> $DIR/issue-42599_available_fields_note.rs:32:41
|
||||
|
@ -4,7 +4,7 @@ error[E0560]: struct `Simba` has no field named `father`
|
||||
LL | let s = Simba { mother: 1, father: 0 };
|
||||
| ^^^^^^ `Simba` does not have this field
|
||||
|
|
||||
= note: available fields are: `mother`
|
||||
= note: all struct fields are already assigned
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,7 @@ error[E0560]: struct `Foo` has no field named `nonexistent`
|
||||
LL | return Box::new(Foo { nonexistent: self, foo: i });
|
||||
| ^^^^^^^^^^^ `Foo` does not have this field
|
||||
|
|
||||
= note: available fields are: `foo`
|
||||
= note: all struct fields are already assigned
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -32,7 +32,7 @@ error[E0560]: struct `Foo` has no field named `b`
|
||||
LL | let y = Foo { a: 10, b: 10isize };
|
||||
| ^ `Foo` does not have this field
|
||||
|
|
||||
= note: available fields are: `a`
|
||||
= note: all struct fields are already assigned
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/span-preservation.rs:39:5
|
||||
|
@ -10,7 +10,7 @@ error[E0560]: struct `Foo` has no field named `absent`
|
||||
LL | let _ = Foo { present: (), #[cfg(all())] absent: () };
|
||||
| ^^^^^^ `Foo` does not have this field
|
||||
|
|
||||
= note: available fields are: `present`
|
||||
= note: all struct fields are already assigned
|
||||
|
||||
error[E0027]: pattern does not mention field `present`
|
||||
--> $DIR/struct-field-cfg.rs:13:9
|
||||
|
@ -4,7 +4,7 @@ error[E0560]: struct `Foo` has no field named `z`
|
||||
LL | x, y, z
|
||||
| ^ `Foo` does not have this field
|
||||
|
|
||||
= note: available fields are: `x`, `y`
|
||||
= note: all struct fields are already assigned
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,7 @@ error[E0560]: struct `BuildData` has no field named `bar`
|
||||
LL | bar: 0
|
||||
| ^^^ `BuildData` does not have this field
|
||||
|
|
||||
= note: available fields are: `foo`
|
||||
= note: all struct fields are already assigned
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -16,7 +16,7 @@ error[E0560]: union `U` has no field named `c`
|
||||
LL | let u = U { a: 0, b: 1, c: 2 };
|
||||
| ^ `U` does not have this field
|
||||
|
|
||||
= note: available fields are: `a`, `b`
|
||||
= note: all struct fields are already assigned
|
||||
|
||||
error[E0784]: union expressions should have exactly one field
|
||||
--> $DIR/union-fields-2.rs:13:13
|
||||
|
@ -16,7 +16,7 @@ error[E0560]: union `U` has no field named `c`
|
||||
LL | let u = U { a: 0, b: 1, c: 2 };
|
||||
| ^ `U` does not have this field
|
||||
|
|
||||
= note: available fields are: `a`, `b`
|
||||
= note: all struct fields are already assigned
|
||||
|
||||
error[E0784]: union expressions should have exactly one field
|
||||
--> $DIR/union-fields-2.rs:13:13
|
||||
|
Loading…
Reference in New Issue
Block a user