@@ -1381,19 +1381,42 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
1381
1381
ty,
1382
1382
) ;
1383
1383
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
+ } ,
1397
1420
_ => {
1398
1421
// prevent all specified fields from being suggested
1399
1422
let skip_fields = skip_fields. iter ( ) . map ( |ref x| x. ident . name ) ;
0 commit comments