1
1
//! HirDisplay implementations for various hir types.
2
2
use hir_def:: {
3
- data:: adt:: VariantData ,
3
+ data:: adt:: { StructKind , VariantData } ,
4
4
generics:: {
5
5
TypeOrConstParamData , TypeParamProvenance , WherePredicate , WherePredicateTypeTarget ,
6
6
} ,
@@ -163,7 +163,40 @@ impl HirDisplay for Struct {
163
163
write ! ( f, "{}" , self . name( f. db) . display( f. db. upcast( ) ) ) ?;
164
164
let def_id = GenericDefId :: AdtId ( AdtId :: StructId ( self . id ) ) ;
165
165
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
+
166
183
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
+
167
200
Ok ( ( ) )
168
201
}
169
202
}
@@ -176,6 +209,18 @@ impl HirDisplay for Enum {
176
209
let def_id = GenericDefId :: AdtId ( AdtId :: EnumId ( self . id ) ) ;
177
210
write_generic_params ( def_id, f) ?;
178
211
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
+
179
224
Ok ( ( ) )
180
225
}
181
226
}
@@ -188,6 +233,18 @@ impl HirDisplay for Union {
188
233
let def_id = GenericDefId :: AdtId ( AdtId :: UnionId ( self . id ) ) ;
189
234
write_generic_params ( def_id, f) ?;
190
235
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
+
191
248
Ok ( ( ) )
192
249
}
193
250
}
0 commit comments