}
},
ty);
- // prevent all specified fields from being suggested
- let skip_fields = skip_fields.iter().map(|ref x| x.ident.as_str());
- if let Some(field_name) = Self::suggest_field_name(variant,
- &field.ident.as_str(),
- skip_fields.collect()) {
- err.span_suggestion(
- field.ident.span,
- "a field with a similar name exists",
- field_name.to_string(),
- Applicability::MaybeIncorrect,
- );
- } else {
- match ty.sty {
- ty::Adt(adt, ..) => {
- if adt.is_enum() {
- err.span_label(field.ident.span,
- format!("`{}::{}` does not have this field",
- ty, variant.ident));
- } else {
- err.span_label(field.ident.span,
- format!("`{}` does not have this field", ty));
- }
- let available_field_names = self.available_field_names(variant);
- if !available_field_names.is_empty() {
- err.note(&format!("available fields are: {}",
- self.name_series_display(available_field_names)));
+ match variant.ctor_kind {
+ CtorKind::Fn => {
+ err.span_label(field.ident.span, "field does not exist");
+ err.span_label(
+ field.ident.span,
+ format!("`{adt}` is a tuple {kind_name}, use the appropriate syntax: `{adt}(/* fields */)`", adt=ty, kind_name=kind_name)
+ );
+ }
+ _ => {
+ // prevent all specified fields from being suggested
+ let skip_fields = skip_fields.iter().map(|ref x| x.ident.as_str());
+ if let Some(field_name) = Self::suggest_field_name(variant,
+ &field.ident.as_str(),
+ skip_fields.collect()) {
+ err.span_suggestion(
+ field.ident.span,
+ "a field with a similar name exists",
+ field_name.to_string(),
+ Applicability::MaybeIncorrect,
+ );
+ } else {
+ match ty.sty {
+ ty::Adt(adt, ..) => {
+ if adt.is_enum() {
+ err.span_label(field.ident.span,
+ format!("`{}::{}` does not have this field",
+ ty, variant.ident));
+ } else {
+ err.span_label(field.ident.span,
+ format!("`{}` does not have this field", ty));
+ }
+ let available_field_names = self.available_field_names(variant);
+ if !available_field_names.is_empty() {
+ err.note(&format!("available fields are: {}",
+ self.name_series_display(available_field_names)));
+ }
+ }
+ _ => bug!("non-ADT passed to report_unknown_field")
}
- }
- _ => bug!("non-ADT passed to report_unknown_field")
+ };
}
- };
- err.emit();
+ }
+ err.emit();
}
// Return an hint about the closest match in field names