@@ -188,28 +188,12 @@ impl HirDisplay for Struct {
188188 StructKind :: Record => {
189189 let has_where_clause = write_where_clause ( def_id, f) ?;
190190 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+ ) ?;
213197 }
214198 }
215199 StructKind :: Unit => _ = write_where_clause ( def_id, f) ?,
@@ -226,18 +210,15 @@ impl HirDisplay for Enum {
226210 write ! ( f, "{}" , self . name( f. db) . display( f. db. upcast( ) ) ) ?;
227211 let def_id = GenericDefId :: AdtId ( AdtId :: EnumId ( self . id ) ) ;
228212 write_generic_params ( def_id, f) ?;
229- let has_where_clause = write_where_clause ( def_id, f) ?;
230213
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+ ) ?;
241222 }
242223
243224 Ok ( ( ) )
@@ -251,22 +232,49 @@ impl HirDisplay for Union {
251232 write ! ( f, "{}" , self . name( f. db) . display( f. db. upcast( ) ) ) ?;
252233 let def_id = GenericDefId :: AdtId ( AdtId :: UnionId ( self . id ) ) ;
253234 write_generic_params ( def_id, f) ?;
235+
254236 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+ }
255248
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 " ) ?;
266269 }
267270
268- Ok ( ( ) )
271+ if fields_or_variants. len ( ) > count {
272+ f. write_str ( " /* … */\n " ) ?;
273+ }
274+ f. write_str ( "}" ) ?;
269275 }
276+
277+ Ok ( ( ) )
270278}
271279
272280impl HirDisplay for Field {
0 commit comments