11//! HirDisplay implementations for various hir types.
22use hir_def:: {
3- data:: adt:: VariantData ,
3+ data:: adt:: { StructKind , VariantData } ,
44 generics:: {
55 TypeOrConstParamData , TypeParamProvenance , WherePredicate , WherePredicateTypeTarget ,
66 } ,
@@ -163,7 +163,40 @@ impl HirDisplay for Struct {
163163 write ! ( f, "{}" , self . name( f. db) . display( f. db. upcast( ) ) ) ?;
164164 let def_id = GenericDefId :: AdtId ( AdtId :: StructId ( self . id ) ) ;
165165 write_generic_params ( def_id, f) ?;
166+
167+ let variant_data = self . variant_data ( f. db ) ;
168+ if let StructKind :: Tuple = variant_data. kind ( ) {
169+ f. write_char ( '(' ) ?;
170+ let mut it = variant_data. fields ( ) . iter ( ) . peekable ( ) ;
171+
172+ while let Some ( ( id, _) ) = it. next ( ) {
173+ let field = Field { parent : ( * self ) . into ( ) , id } ;
174+ field. ty ( f. db ) . hir_fmt ( f) ?;
175+ if it. peek ( ) . is_some ( ) {
176+ f. write_str ( ", " ) ?;
177+ }
178+ }
179+
180+ f. write_str ( ");" ) ?;
181+ }
182+
166183 write_where_clause ( def_id, f) ?;
184+
185+ if let StructKind :: Record = variant_data. kind ( ) {
186+ let fields = self . fields ( f. db ) ;
187+ if fields. is_empty ( ) {
188+ f. write_str ( " {}" ) ?;
189+ } else {
190+ f. write_str ( " {\n " ) ?;
191+ for field in self . fields ( f. db ) {
192+ f. write_str ( " " ) ?;
193+ field. hir_fmt ( f) ?;
194+ f. write_str ( ",\n " ) ?;
195+ }
196+ f. write_str ( "}" ) ?;
197+ }
198+ }
199+
167200 Ok ( ( ) )
168201 }
169202}
@@ -176,6 +209,18 @@ impl HirDisplay for Enum {
176209 let def_id = GenericDefId :: AdtId ( AdtId :: EnumId ( self . id ) ) ;
177210 write_generic_params ( def_id, f) ?;
178211 write_where_clause ( def_id, f) ?;
212+
213+ let variants = self . variants ( f. db ) ;
214+ if !variants. is_empty ( ) {
215+ f. write_str ( " {\n " ) ?;
216+ for variant in variants {
217+ f. write_str ( " " ) ?;
218+ variant. hir_fmt ( f) ?;
219+ f. write_str ( ",\n " ) ?;
220+ }
221+ f. write_str ( "}" ) ?;
222+ }
223+
179224 Ok ( ( ) )
180225 }
181226}
@@ -188,6 +233,18 @@ impl HirDisplay for Union {
188233 let def_id = GenericDefId :: AdtId ( AdtId :: UnionId ( self . id ) ) ;
189234 write_generic_params ( def_id, f) ?;
190235 write_where_clause ( def_id, f) ?;
236+
237+ let fields = self . fields ( f. db ) ;
238+ if !fields. is_empty ( ) {
239+ f. write_str ( " {\n " ) ?;
240+ for field in self . fields ( f. db ) {
241+ f. write_str ( " " ) ?;
242+ field. hir_fmt ( f) ?;
243+ f. write_str ( ",\n " ) ?;
244+ }
245+ f. write_str ( "}" ) ?;
246+ }
247+
191248 Ok ( ( ) )
192249 }
193250}
0 commit comments