@@ -524,21 +524,22 @@ impl<'a> FmtVisitor<'a> {
524524 self . push_rewrite ( struct_parts. span , rewrite) ;
525525 }
526526
527- pub ( crate ) fn visit_enum (
527+ // TODO(ding-young) do I need to make it a separate function instead of a method of FmtVisitor?
528+ fn format_enum (
528529 & mut self ,
529530 ident : symbol:: Ident ,
530531 vis : & ast:: Visibility ,
531532 enum_def : & ast:: EnumDef ,
532533 generics : & ast:: Generics ,
533534 span : Span ,
534- ) {
535+ ) -> Option < String > {
535536 let enum_header =
536537 format_header ( & self . get_context ( ) , "enum " , ident, vis, self . block_indent ) ;
537- self . push_str ( & enum_header) ;
538538
539539 let enum_snippet = self . snippet ( span) ;
540540 let brace_pos = enum_snippet. find_uncommented ( "{" ) . unwrap ( ) ;
541541 let body_start = span. lo ( ) + BytePos ( brace_pos as u32 + 1 ) ;
542+ // TODO(ding-young) what if there is no generic?
542543 let generics_str = format_generics (
543544 & self . get_context ( ) ,
544545 generics,
@@ -552,25 +553,36 @@ impl<'a> FmtVisitor<'a> {
552553 // make a span that starts right after `enum Foo`
553554 mk_sp ( ident. span . hi ( ) , body_start) ,
554555 last_line_width ( & enum_header) ,
555- ) ;
556-
557- if let Some ( generics_str) = generics_str {
558- self . push_str ( & generics_str) ;
559- } else {
560- self . push_str ( self . snippet ( mk_sp ( ident. span . hi ( ) , body_start) ) ) ;
561- }
562-
563- self . last_pos = body_start;
556+ ) ?;
564557
565558 match self . format_variant_list ( enum_def, body_start, span. hi ( ) ) {
566- Some ( ref s) if enum_def. variants . is_empty ( ) => self . push_str ( s) ,
567- rw => {
568- self . push_rewrite ( mk_sp ( body_start, span. hi ( ) ) , rw) ;
559+ Some ( ref s) if enum_def. variants . is_empty ( ) => {
560+ Some ( format ! ( "{enum_header}{generics_str}{s}" ) )
561+ }
562+ Some ( rw) => {
563+ let indent = self . block_indent . to_string ( self . config ) ;
564+ self . block_indent = self . block_indent . block_unindent ( self . config ) ;
565+ Some ( format ! ( "{enum_header}{generics_str}\n {indent}{rw}" ) )
566+ }
567+ None => {
569568 self . block_indent = self . block_indent . block_unindent ( self . config ) ;
569+ None
570570 }
571571 }
572572 }
573573
574+ pub ( crate ) fn visit_enum (
575+ & mut self ,
576+ ident : symbol:: Ident ,
577+ vis : & ast:: Visibility ,
578+ enum_def : & ast:: EnumDef ,
579+ generics : & ast:: Generics ,
580+ span : Span ,
581+ ) {
582+ let rewrite = self . format_enum ( ident, vis, enum_def, generics, span) ;
583+ self . push_rewrite ( span, rewrite) ;
584+ }
585+
574586 // Format the body of an enum definition
575587 fn format_variant_list (
576588 & mut self ,
0 commit comments