@@ -9,6 +9,7 @@ use std::iter;
9
9
use std:: sync:: Arc ;
10
10
11
11
use hir_def:: {
12
+ adt:: StructKind ,
12
13
builtin_type:: BuiltinType ,
13
14
generics:: { TypeParamProvenance , WherePredicate , WherePredicateTarget } ,
14
15
path:: { GenericArg , Path , PathSegment , PathSegments } ,
@@ -805,8 +806,9 @@ fn fn_sig_for_struct_constructor(db: &impl HirDatabase, def: StructId) -> PolyFn
805
806
/// Build the type of a tuple struct constructor.
806
807
fn type_for_struct_constructor ( db : & impl HirDatabase , def : StructId ) -> Binders < Ty > {
807
808
let struct_data = db. struct_data ( def. into ( ) ) ;
808
- if struct_data. variant_data . is_unit ( ) {
809
- return type_for_adt ( db, def. into ( ) ) ; // Unit struct
809
+ match struct_data. variant_data . kind ( ) {
810
+ StructKind :: Unit => return type_for_adt ( db, def. into ( ) ) ,
811
+ StructKind :: Tuple | StructKind :: Record => ( ) ,
810
812
}
811
813
let generics = generics ( db, def. into ( ) ) ;
812
814
let substs = Substs :: bound_vars ( & generics) ;
@@ -830,8 +832,9 @@ fn fn_sig_for_enum_variant_constructor(db: &impl HirDatabase, def: EnumVariantId
830
832
fn type_for_enum_variant_constructor ( db : & impl HirDatabase , def : EnumVariantId ) -> Binders < Ty > {
831
833
let enum_data = db. enum_data ( def. parent ) ;
832
834
let var_data = & enum_data. variants [ def. local_id ] . variant_data ;
833
- if var_data. is_unit ( ) {
834
- return type_for_adt ( db, def. parent . into ( ) ) ; // Unit variant
835
+ match var_data. kind ( ) {
836
+ StructKind :: Unit => return type_for_adt ( db, def. parent . into ( ) ) ,
837
+ StructKind :: Record | StructKind :: Tuple => ( ) ,
835
838
}
836
839
let generics = generics ( db, def. parent . into ( ) ) ;
837
840
let substs = Substs :: bound_vars ( & generics) ;
0 commit comments