@@ -524,21 +524,22 @@ impl<'a> FmtVisitor<'a> {
524
524
self . push_rewrite ( struct_parts. span , rewrite) ;
525
525
}
526
526
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 (
528
529
& mut self ,
529
530
ident : symbol:: Ident ,
530
531
vis : & ast:: Visibility ,
531
532
enum_def : & ast:: EnumDef ,
532
533
generics : & ast:: Generics ,
533
534
span : Span ,
534
- ) {
535
+ ) -> Option < String > {
535
536
let enum_header =
536
537
format_header ( & self . get_context ( ) , "enum " , ident, vis, self . block_indent ) ;
537
- self . push_str ( & enum_header) ;
538
538
539
539
let enum_snippet = self . snippet ( span) ;
540
540
let brace_pos = enum_snippet. find_uncommented ( "{" ) . unwrap ( ) ;
541
541
let body_start = span. lo ( ) + BytePos ( brace_pos as u32 + 1 ) ;
542
+ // TODO(ding-young) what if there is no generic?
542
543
let generics_str = format_generics (
543
544
& self . get_context ( ) ,
544
545
generics,
@@ -552,25 +553,36 @@ impl<'a> FmtVisitor<'a> {
552
553
// make a span that starts right after `enum Foo`
553
554
mk_sp ( ident. span . hi ( ) , body_start) ,
554
555
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
+ ) ?;
564
557
565
558
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 => {
569
568
self . block_indent = self . block_indent . block_unindent ( self . config ) ;
569
+ None
570
570
}
571
571
}
572
572
}
573
573
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
+
574
586
// Format the body of an enum definition
575
587
fn format_variant_list (
576
588
& mut self ,
0 commit comments