@@ -188,28 +188,7 @@ impl HirDisplay for Struct {
188
188
StructKind :: Record => {
189
189
let has_where_clause = write_where_clause ( def_id, f) ?;
190
190
if let Some ( limit) = f. entity_limit {
191
- let fields = self . fields ( f. db ) ;
192
- let count = fields. len ( ) . min ( limit) ;
193
- f. write_char ( if !has_where_clause { ' ' } else { '\n' } ) ?;
194
- if count == 0 {
195
- if fields. is_empty ( ) {
196
- f. write_str ( "{}" ) ?;
197
- } else {
198
- f. write_str ( "{ /* … */ }" ) ?;
199
- }
200
- } else {
201
- f. write_str ( " {\n " ) ?;
202
- for field in & fields[ ..count] {
203
- f. write_str ( " " ) ?;
204
- field. hir_fmt ( f) ?;
205
- f. write_str ( ",\n " ) ?;
206
- }
207
-
208
- if fields. len ( ) > count {
209
- f. write_str ( " /* … */\n " ) ?;
210
- }
211
- f. write_str ( "}" ) ?;
212
- }
191
+ display_fields ( & self . fields ( f. db ) , has_where_clause, limit, false , f) ?;
213
192
}
214
193
}
215
194
StructKind :: Unit => _ = write_where_clause ( def_id, f) ?,
@@ -226,18 +205,10 @@ impl HirDisplay for Enum {
226
205
write ! ( f, "{}" , self . name( f. db) . display( f. db. upcast( ) ) ) ?;
227
206
let def_id = GenericDefId :: AdtId ( AdtId :: EnumId ( self . id ) ) ;
228
207
write_generic_params ( def_id, f) ?;
229
- let has_where_clause = write_where_clause ( def_id, f) ?;
230
208
231
- let variants = self . variants ( f. db ) ;
232
- if !variants. is_empty ( ) {
233
- f. write_char ( if !has_where_clause { ' ' } else { '\n' } ) ?;
234
- f. write_str ( "{\n " ) ?;
235
- for variant in variants {
236
- f. write_str ( " " ) ?;
237
- variant. hir_fmt ( f) ?;
238
- f. write_str ( ",\n " ) ?;
239
- }
240
- f. write_str ( "}" ) ?;
209
+ let has_where_clause = write_where_clause ( def_id, f) ?;
210
+ if let Some ( limit) = f. entity_limit {
211
+ display_variants ( & self . variants ( f. db ) , has_where_clause, limit, f) ?;
241
212
}
242
213
243
214
Ok ( ( ) )
@@ -251,22 +222,102 @@ impl HirDisplay for Union {
251
222
write ! ( f, "{}" , self . name( f. db) . display( f. db. upcast( ) ) ) ?;
252
223
let def_id = GenericDefId :: AdtId ( AdtId :: UnionId ( self . id ) ) ;
253
224
write_generic_params ( def_id, f) ?;
225
+
254
226
let has_where_clause = write_where_clause ( def_id, f) ?;
227
+ if let Some ( limit) = f. entity_limit {
228
+ display_fields ( & self . fields ( f. db ) , has_where_clause, limit, false , f) ?;
229
+ }
230
+ Ok ( ( ) )
231
+ }
232
+ }
233
+
234
+ fn display_fields (
235
+ fields : & [ Field ] ,
236
+ has_where_clause : bool ,
237
+ limit : usize ,
238
+ in_line : bool ,
239
+ f : & mut HirFormatter < ' _ > ,
240
+ ) -> Result < ( ) , HirDisplayError > {
241
+ let count = fields. len ( ) . min ( limit) ;
242
+ let ( indent, separator) = if in_line { ( "" , ' ' ) } else { ( " " , '\n' ) } ;
243
+ f. write_char ( if !has_where_clause { ' ' } else { separator } ) ?;
244
+ if count == 0 {
245
+ if fields. is_empty ( ) {
246
+ f. write_str ( "{}" ) ?;
247
+ } else {
248
+ f. write_str ( "{ /* … */ }" ) ?;
249
+ }
250
+ } else {
251
+ f. write_char ( '{' ) ?;
255
252
256
- let fields = self . fields ( f. db ) ;
257
253
if !fields. is_empty ( ) {
258
- f. write_char ( if !has_where_clause { ' ' } else { '\n' } ) ?;
259
- f. write_str ( "{\n " ) ?;
260
- for field in self . fields ( f. db ) {
261
- f. write_str ( " " ) ?;
254
+ f. write_char ( separator) ?;
255
+ for field in & fields[ ..count] {
256
+ f. write_str ( indent) ?;
262
257
field. hir_fmt ( f) ?;
263
- f. write_str ( ",\n " ) ?;
258
+ f. write_char ( ',' ) ?;
259
+ f. write_char ( separator) ?;
260
+ }
261
+
262
+ if fields. len ( ) > count {
263
+ f. write_str ( indent) ?;
264
+ f. write_str ( "/* … */" ) ?;
265
+ f. write_char ( separator) ?;
264
266
}
265
- f. write_str ( "}" ) ?;
266
267
}
267
268
268
- Ok ( ( ) )
269
+ f. write_str ( "}" ) ?;
270
+ }
271
+
272
+ Ok ( ( ) )
273
+ }
274
+
275
+ fn display_variants (
276
+ variants : & [ Variant ] ,
277
+ has_where_clause : bool ,
278
+ limit : usize ,
279
+ f : & mut HirFormatter < ' _ > ,
280
+ ) -> Result < ( ) , HirDisplayError > {
281
+ let count = variants. len ( ) . min ( limit) ;
282
+ f. write_char ( if !has_where_clause { ' ' } else { '\n' } ) ?;
283
+ if count == 0 {
284
+ if variants. is_empty ( ) {
285
+ f. write_str ( "{}" ) ?;
286
+ } else {
287
+ f. write_str ( "{ /* … */ }" ) ?;
288
+ }
289
+ } else {
290
+ f. write_str ( "{\n " ) ?;
291
+ for variant in & variants[ ..count] {
292
+ f. write_str ( " " ) ?;
293
+ write ! ( f, "{}" , variant. name( f. db) . display( f. db. upcast( ) ) ) ?;
294
+ match variant. kind ( f. db ) {
295
+ StructKind :: Tuple => {
296
+ if variant. fields ( f. db ) . is_empty ( ) {
297
+ f. write_str ( "()" ) ?;
298
+ } else {
299
+ f. write_str ( "( /* … */ )" ) ?;
300
+ }
301
+ }
302
+ StructKind :: Record => {
303
+ if variant. fields ( f. db ) . is_empty ( ) {
304
+ f. write_str ( " {}" ) ?;
305
+ } else {
306
+ f. write_str ( " { /* … */ }" ) ?;
307
+ }
308
+ }
309
+ StructKind :: Unit => { }
310
+ }
311
+ f. write_str ( ",\n " ) ?;
312
+ }
313
+
314
+ if variants. len ( ) > count {
315
+ f. write_str ( " /* … */\n " ) ?;
316
+ }
317
+ f. write_str ( "}" ) ?;
269
318
}
319
+
320
+ Ok ( ( ) )
270
321
}
271
322
272
323
impl HirDisplay for Field {
@@ -304,21 +355,10 @@ impl HirDisplay for Variant {
304
355
}
305
356
f. write_char ( ')' ) ?;
306
357
}
307
- VariantData :: Record ( fields) => {
308
- f. write_str ( " {" ) ?;
309
- let mut first = true ;
310
- for ( _, field) in fields. iter ( ) {
311
- if first {
312
- first = false ;
313
- f. write_char ( ' ' ) ?;
314
- } else {
315
- f. write_str ( ", " ) ?;
316
- }
317
- // Enum variant fields must be pub.
318
- write ! ( f, "{}: " , field. name. display( f. db. upcast( ) ) ) ?;
319
- field. type_ref . hir_fmt ( f) ?;
358
+ VariantData :: Record ( _) => {
359
+ if let Some ( limit) = f. entity_limit {
360
+ display_fields ( & self . fields ( f. db ) , false , limit, true , f) ?;
320
361
}
321
- f. write_str ( " }" ) ?;
322
362
}
323
363
}
324
364
Ok ( ( ) )
0 commit comments