@@ -415,24 +415,18 @@ impl ModuleDef {
415
415
def. diagnostics ( db, & mut acc) ;
416
416
}
417
417
418
- let vd: Option < ( VariantDef , Arc < VariantData > ) > = match self {
419
- ModuleDef :: Adt ( Adt :: Struct ( it) ) => {
420
- Some ( ( it. into ( ) , db. struct_data ( it. id ) . variant_data . clone ( ) ) )
421
- }
422
- ModuleDef :: Adt ( Adt :: Union ( it) ) => {
423
- Some ( ( it. into ( ) , db. union_data ( it. id ) . variant_data . clone ( ) ) )
424
- }
425
- ModuleDef :: Variant ( it) => {
426
- Some ( ( it. into ( ) , db. enum_variant_data ( it. id ) . variant_data . clone ( ) ) )
427
- }
418
+ let fields = match self {
419
+ ModuleDef :: Adt ( Adt :: Struct ( it) ) => Some ( it. fields ( db) ) ,
420
+ ModuleDef :: Adt ( Adt :: Union ( it) ) => Some ( it. fields ( db) ) ,
421
+ ModuleDef :: Variant ( it) => Some ( it. fields ( db) ) ,
428
422
_ => None ,
429
423
} ;
430
- if let Some ( ( parent , vd ) ) = vd {
431
- for ( id , fd ) in vd . fields ( ) . iter ( ) {
432
- if !fd . has_default {
424
+ if let Some ( fields ) = fields {
425
+ for field in fields {
426
+ if !field . has_default {
433
427
continue ;
434
428
}
435
- let def: DefWithBody = DefWithBody :: Field ( Field { parent , id } ) ;
429
+ let def: DefWithBody = field . into ( ) ;
436
430
def. diagnostics ( db, & mut acc, style_lints) ;
437
431
}
438
432
}
@@ -1258,6 +1252,7 @@ impl From<&Field> for DefWithBodyId {
1258
1252
pub struct Field {
1259
1253
pub ( crate ) parent : VariantDef ,
1260
1254
pub ( crate ) id : LocalFieldId ,
1255
+ pub ( crate ) has_default : bool ,
1261
1256
}
1262
1257
1263
1258
#[ derive( Debug , PartialEq , Eq , Copy , Clone , Hash ) ]
@@ -1423,7 +1418,7 @@ impl Struct {
1423
1418
. variant_data
1424
1419
. fields ( )
1425
1420
. iter ( )
1426
- . map ( |( id, _ ) | Field { parent : self . into ( ) , id } )
1421
+ . map ( |( id, d ) | Field { parent : self . into ( ) , id, has_default : d . has_default } )
1427
1422
. collect ( )
1428
1423
}
1429
1424
@@ -1485,7 +1480,7 @@ impl Union {
1485
1480
. variant_data
1486
1481
. fields ( )
1487
1482
. iter ( )
1488
- . map ( |( id, _ ) | Field { parent : self . into ( ) , id } )
1483
+ . map ( |( id, d ) | Field { parent : self . into ( ) , id, has_default : d . has_default } )
1489
1484
. collect ( )
1490
1485
}
1491
1486
@@ -1615,7 +1610,7 @@ impl Variant {
1615
1610
self . variant_data ( db)
1616
1611
. fields ( )
1617
1612
. iter ( )
1618
- . map ( |( id, _ ) | Field { parent : self . into ( ) , id } )
1613
+ . map ( |( id, d ) | Field { parent : self . into ( ) , id, has_default : d . has_default } )
1619
1614
. collect ( )
1620
1615
}
1621
1616
@@ -5203,10 +5198,13 @@ impl Type {
5203
5198
_ => return Vec :: new ( ) ,
5204
5199
} ;
5205
5200
5201
+ let var_data = db. variant_data ( variant_id) ;
5202
+ let fields = var_data. fields ( ) ;
5206
5203
db. field_types ( variant_id)
5207
5204
. iter ( )
5208
5205
. map ( |( local_id, ty) | {
5209
- let def = Field { parent : variant_id. into ( ) , id : local_id } ;
5206
+ let has_default = fields[ local_id] . has_default ;
5207
+ let def = Field { parent : variant_id. into ( ) , id : local_id, has_default } ;
5210
5208
let ty = ty. clone ( ) . substitute ( Interner , substs) ;
5211
5209
( def, self . derived ( ty) )
5212
5210
} )
0 commit comments