@@ -188,28 +188,12 @@ 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_or_variants (
192
+ & self . fields ( f. db ) ,
193
+ has_where_clause,
194
+ limit,
195
+ f,
196
+ ) ?;
213
197
}
214
198
}
215
199
StructKind :: Unit => _ = write_where_clause ( def_id, f) ?,
@@ -226,18 +210,15 @@ impl HirDisplay for Enum {
226
210
write ! ( f, "{}" , self . name( f. db) . display( f. db. upcast( ) ) ) ?;
227
211
let def_id = GenericDefId :: AdtId ( AdtId :: EnumId ( self . id ) ) ;
228
212
write_generic_params ( def_id, f) ?;
229
- let has_where_clause = write_where_clause ( def_id, f) ?;
230
213
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 ( "}" ) ?;
214
+ let has_where_clause = write_where_clause ( def_id, f) ?;
215
+ if let Some ( limit) = f. entity_limit {
216
+ display_fields_or_variants (
217
+ & self . variants ( f. db ) ,
218
+ has_where_clause,
219
+ limit,
220
+ f,
221
+ ) ?;
241
222
}
242
223
243
224
Ok ( ( ) )
@@ -251,22 +232,49 @@ impl HirDisplay for Union {
251
232
write ! ( f, "{}" , self . name( f. db) . display( f. db. upcast( ) ) ) ?;
252
233
let def_id = GenericDefId :: AdtId ( AdtId :: UnionId ( self . id ) ) ;
253
234
write_generic_params ( def_id, f) ?;
235
+
254
236
let has_where_clause = write_where_clause ( def_id, f) ?;
237
+ if let Some ( limit) = f. entity_limit {
238
+ display_fields_or_variants (
239
+ & self . fields ( f. db ) ,
240
+ has_where_clause,
241
+ limit,
242
+ f,
243
+ ) ?;
244
+ }
245
+ Ok ( ( ) )
246
+ }
247
+ }
255
248
256
- let fields = self . fields ( f. db ) ;
257
- 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 ( " " ) ?;
262
- field. hir_fmt ( f) ?;
263
- f. write_str ( ",\n " ) ?;
264
- }
265
- f. write_str ( "}" ) ?;
249
+ fn display_fields_or_variants < T : HirDisplay > (
250
+ fields_or_variants : & [ T ] ,
251
+ has_where_clause : bool ,
252
+ limit : usize ,
253
+ f : & mut HirFormatter < ' _ > ,
254
+ ) -> Result < ( ) , HirDisplayError > {
255
+ let count = fields_or_variants. len ( ) . min ( limit) ;
256
+ f. write_char ( if !has_where_clause { ' ' } else { '\n' } ) ?;
257
+ if count == 0 {
258
+ if fields_or_variants. is_empty ( ) {
259
+ f. write_str ( "{}" ) ?;
260
+ } else {
261
+ f. write_str ( "{ /* … */ }" ) ?;
262
+ }
263
+ } else {
264
+ f. write_str ( "{\n " ) ?;
265
+ for field in & fields_or_variants[ ..count] {
266
+ f. write_str ( " " ) ?;
267
+ field. hir_fmt ( f) ?;
268
+ f. write_str ( ",\n " ) ?;
266
269
}
267
270
268
- Ok ( ( ) )
271
+ if fields_or_variants. len ( ) > count {
272
+ f. write_str ( " /* … */\n " ) ?;
273
+ }
274
+ f. write_str ( "}" ) ?;
269
275
}
276
+
277
+ Ok ( ( ) )
270
278
}
271
279
272
280
impl HirDisplay for Field {
0 commit comments