@@ -415,18 +415,24 @@ impl ModuleDef {
415
415
def. diagnostics ( db, & mut acc) ;
416
416
}
417
417
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) ) ,
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
+ }
422
428
_ => None ,
423
429
} ;
424
- if let Some ( fields ) = fields {
425
- for field in fields {
426
- if !field . has_default {
430
+ if let Some ( ( parent , vd ) ) = vd {
431
+ for ( id , fd ) in vd . fields ( ) . iter ( ) {
432
+ if !fd . has_default {
427
433
continue ;
428
434
}
429
- let def: DefWithBody = field . into ( ) ;
435
+ let def: DefWithBody = DefWithBody :: Field ( Field { parent , id } ) ;
430
436
def. diagnostics ( db, & mut acc, style_lints) ;
431
437
}
432
438
}
@@ -1252,7 +1258,6 @@ impl From<&Field> for DefWithBodyId {
1252
1258
pub struct Field {
1253
1259
pub ( crate ) parent : VariantDef ,
1254
1260
pub ( crate ) id : LocalFieldId ,
1255
- pub ( crate ) has_default : bool ,
1256
1261
}
1257
1262
1258
1263
#[ derive( Debug , PartialEq , Eq , Copy , Clone , Hash ) ]
@@ -1418,7 +1423,7 @@ impl Struct {
1418
1423
. variant_data
1419
1424
. fields ( )
1420
1425
. iter ( )
1421
- . map ( |( id, d ) | Field { parent : self . into ( ) , id, has_default : d . has_default } )
1426
+ . map ( |( id, _ ) | Field { parent : self . into ( ) , id } )
1422
1427
. collect ( )
1423
1428
}
1424
1429
@@ -1480,7 +1485,7 @@ impl Union {
1480
1485
. variant_data
1481
1486
. fields ( )
1482
1487
. iter ( )
1483
- . map ( |( id, d ) | Field { parent : self . into ( ) , id, has_default : d . has_default } )
1488
+ . map ( |( id, _ ) | Field { parent : self . into ( ) , id } )
1484
1489
. collect ( )
1485
1490
}
1486
1491
@@ -1610,7 +1615,7 @@ impl Variant {
1610
1615
self . variant_data ( db)
1611
1616
. fields ( )
1612
1617
. iter ( )
1613
- . map ( |( id, d ) | Field { parent : self . into ( ) , id, has_default : d . has_default } )
1618
+ . map ( |( id, _ ) | Field { parent : self . into ( ) , id } )
1614
1619
. collect ( )
1615
1620
}
1616
1621
@@ -5166,13 +5171,10 @@ impl Type {
5166
5171
_ => return Vec :: new ( ) ,
5167
5172
} ;
5168
5173
5169
- let var_data = db. variant_data ( variant_id) ;
5170
- let fields = var_data. fields ( ) ;
5171
5174
db. field_types ( variant_id)
5172
5175
. iter ( )
5173
5176
. map ( |( local_id, ty) | {
5174
- let has_default = fields[ local_id] . has_default ;
5175
- let def = Field { parent : variant_id. into ( ) , id : local_id, has_default } ;
5177
+ let def = Field { parent : variant_id. into ( ) , id : local_id } ;
5176
5178
let ty = ty. clone ( ) . substitute ( Interner , substs) ;
5177
5179
( def, self . derived ( ty) )
5178
5180
} )
0 commit comments