@@ -9,6 +9,7 @@ use std::iter;
99use std:: sync:: Arc ;
1010
1111use hir_def:: {
12+ adt:: StructKind ,
1213 builtin_type:: BuiltinType ,
1314 generics:: { TypeParamProvenance , WherePredicate , WherePredicateTarget } ,
1415 path:: { GenericArg , Path , PathSegment , PathSegments } ,
@@ -805,8 +806,9 @@ fn fn_sig_for_struct_constructor(db: &impl HirDatabase, def: StructId) -> PolyFn
805806/// Build the type of a tuple struct constructor.
806807fn type_for_struct_constructor ( db : & impl HirDatabase , def : StructId ) -> Binders < Ty > {
807808 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 => ( ) ,
810812 }
811813 let generics = generics ( db, def. into ( ) ) ;
812814 let substs = Substs :: bound_vars ( & generics) ;
@@ -830,8 +832,9 @@ fn fn_sig_for_enum_variant_constructor(db: &impl HirDatabase, def: EnumVariantId
830832fn type_for_enum_variant_constructor ( db : & impl HirDatabase , def : EnumVariantId ) -> Binders < Ty > {
831833 let enum_data = db. enum_data ( def. parent ) ;
832834 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 => ( ) ,
835838 }
836839 let generics = generics ( db, def. parent . into ( ) ) ;
837840 let substs = Substs :: bound_vars ( & generics) ;
0 commit comments