@@ -1381,19 +1381,42 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
13811381 ty,
13821382 ) ;
13831383 match variant. ctor_kind {
1384- CtorKind :: Fn => {
1385- err. span_label ( variant. ident . span , format ! ( "`{adt}` defined here" , adt = ty) ) ;
1386- err. span_label ( field. ident . span , "field does not exist" ) ;
1387- err. span_label (
1388- ty_span,
1389- format ! (
1390- "`{adt}` is a tuple {kind_name}, \
1391- use the appropriate syntax: `{adt}(/* fields */)`",
1392- adt = ty,
1393- kind_name = kind_name
1394- ) ,
1395- ) ;
1396- }
1384+ CtorKind :: Fn => match ty. kind ( ) {
1385+ ty:: Adt ( adt, ..) if adt. is_enum ( ) => {
1386+ err. span_label (
1387+ variant. ident . span ,
1388+ format ! (
1389+ "`{adt}::{variant}` defined here" ,
1390+ adt = ty,
1391+ variant = variant. ident,
1392+ ) ,
1393+ ) ;
1394+ err. span_label ( field. ident . span , "field does not exist" ) ;
1395+ err. span_label (
1396+ ty_span,
1397+ format ! (
1398+ "`{adt}::{variant}` is a tuple {kind_name}, \
1399+ use the appropriate syntax: `{adt}::{variant}(/* fields */)`",
1400+ adt = ty,
1401+ variant = variant. ident,
1402+ kind_name = kind_name
1403+ ) ,
1404+ ) ;
1405+ }
1406+ _ => {
1407+ err. span_label ( variant. ident . span , format ! ( "`{adt}` defined here" , adt = ty) ) ;
1408+ err. span_label ( field. ident . span , "field does not exist" ) ;
1409+ err. span_label (
1410+ ty_span,
1411+ format ! (
1412+ "`{adt}` is a tuple {kind_name}, \
1413+ use the appropriate syntax: `{adt}(/* fields */)`",
1414+ adt = ty,
1415+ kind_name = kind_name
1416+ ) ,
1417+ ) ;
1418+ }
1419+ } ,
13971420 _ => {
13981421 // prevent all specified fields from being suggested
13991422 let skip_fields = skip_fields. iter ( ) . map ( |ref x| x. ident . name ) ;
0 commit comments