Type::from_def(db, self.id.lookup(db.upcast()).container.module(db.upcast()).krate, self.id)
}
- pub fn is_packed(self, db: &dyn HirDatabase) -> bool {
- matches!(db.struct_data(self.id).repr, Some(ReprKind::Packed))
+ pub fn repr(self, db: &dyn HirDatabase) -> Option<ReprKind> {
+ db.struct_data(self.id).repr.clone()
}
fn variant_data(self, db: &dyn HirDatabase) -> Arc<VariantData> {
let adt = adt_id.into();
match adt {
- Adt::Struct(s) => s.is_packed(db),
+ Adt::Struct(s) => matches!(s.repr(db), Some(ReprKind::Packed)),
_ => false,
}
}
};
let expr = field_expr.expr()?;
- let ty = match sema.type_of_expr(&expr) {
- Some(ty) => ty,
- None => {
- println!("No type :(");
- return None;
- }
- };
+ let ty = sema.type_of_expr(&expr)?;
if !ty.is_packed(db) {
return None;
}