40 columns                              |
>>> single
enum Unity {one}
<<<
enum Unity { one }
>>> single line
enum Primate{bonobo,chimp,gorilla}
<<<
enum Primate { bonobo, chimp, gorilla }
>>> trailing comma always splits
enum Primate{bonobo,chimp,}
<<<
enum Primate {
  bonobo,
  chimp,
}
>>> metadata
@Awesome @Fierce("really")
enum Primate{bonobo,chimp,gorilla}
<<<
@Awesome
@Fierce("really")
enum Primate { bonobo, chimp, gorilla }
>>> preserve one blank line between enums
enum Primate {


  bonobo,


  chimp,



  gorilla

}
<<<
enum Primate {
  bonobo,

  chimp,

  gorilla
}
>>> do not preserve single newline
enum Primate {
  bonobo,
  chimp,
  gorilla
}
<<<
enum Primate { bonobo, chimp, gorilla }
>>> one blank line between values and members
enum E { a, b, c;



int x; }
<<<
enum E {
  a,
  b,
  c;

  int x;
}
>>> always go multiline if there are members
enum E { a, b, c; int x; }
<<<
enum E {
  a,
  b,
  c;

  int x;
}
>>> indentation
enum A { a;
var z;
inc(int x) => ++x;
foo(int x) {
if (x == 0) {
return true;
}}}
<<<
enum A {
  a;

  var z;
  inc(int x) => ++x;
  foo(int x) {
    if (x == 0) {
      return true;
    }
  }
}
>>> trailing space inside body
enum A { a, b
  }
<<<
enum A { a, b }
>>> leading space before "enum"
  enum A { a
}
<<<
enum A { a }
>>>
enum A  { a;int meaningOfLife() => 42; }
<<<
enum A {
  a;

  int meaningOfLife() => 42;
}
>>>
enum A{a;var z;inc(int x) => ++x;}
<<<
enum A {
  a;

  var z;
  inc(int x) => ++x;
}
>>> insert blank line after non-empty block-bodied members
enum Foo {
  x;
var a = 1; b() {;} c() => null; get d {;} get e => null; set f(value) {;
} set g(value) => null; var h = 1;}
<<<
enum Foo {
  x;

  var a = 1;
  b() {
    ;
  }

  c() => null;
  get d {
    ;
  }

  get e => null;
  set f(value) {
    ;
  }

  set g(value) => null;
  var h = 1;
}
>>> no required blank line after empty block-bodied members
enum Foo {x;
var a = 1; b() {} c() => null; get d {} get e => null; set f(value) {
} set g(value) => null; var h = 1;}
<<<
enum Foo {
  x;

  var a = 1;
  b() {}
  c() => null;
  get d {}
  get e => null;
  set f(value) {}
  set g(value) => null;
  var h = 1;
}
>>> blank line before and after enum
var x = 1;
enum A { a }
var y = 2;
<<<
var x = 1;

enum A { a }

var y = 2;
>>> semicolon after values but no members
enum   E { a, b; }
<<<
enum E {
  a,
  b;
}
>>> enhanced with clauses and members
enum E with M<R, S>, F implements C<T>, D {
value;
late final String field;
static var staticField = initializer;
int method() { body; }
static String staticMethod(int x) => body;
List<int> get getter => 3;
int operator +(other) => 3;
const E([String parameter]) : field = parameter;
const E.named({String parameter});
}
<<<
enum E
    with M<R, S>, F
    implements C<T>, D {
  value;

  late final String field;
  static var staticField = initializer;
  int method() {
    body;
  }

  static String staticMethod(int x) =>
      body;
  List<int> get getter => 3;
  int operator +(other) => 3;
  const E([String parameter])
      : field = parameter;
  const E.named({String parameter});
}
>>> argument lists in values
enum Args {
first(),second(a,b,c),
third(named:1,2,another:3)
}
<<<
enum Args {
  first(),
  second(a, b, c),
  third(named: 1, 2, another: 3)
}
>>> generic enum
enum MagicNumbers< T    extends num   ,   S> {
  one(1), two(2),pi<double,String>(3.14159)
}
<<<
enum MagicNumbers<T extends num, S> {
  one(1),
  two(2),
  pi<double, String>(3.14159)
}
>>> trailing commas in value arguments
enum Numbers {
  one(1,),
  two(1,2,),
}
<<<
enum Numbers {
  one(
    1,
  ),
  two(
    1,
    2,
  ),
}
>>> trailing comma and semicolon after constants
enum E {a,b,c,;}
<<<
enum E {
  a,
  b,
  c,
  ;
}
>>> trailing comma and semicolon after constants with member
enum E {a,b,c,;var x;}
<<<
enum E {
  a,
  b,
  c,
  ;

  var x;
}
>>> trailing comma and semicolon after constant with argument list
enum E {a,b,c(123),;}
<<<
enum E {
  a,
  b,
  c(123),
  ;
}
>>> discard trailing newlines in body
enum E {
  a,





}
<<<
enum E {
  a,
}
>>> discard trailing newlines in body
enum E {
  a;



  bar() {}





}
<<<
enum E {
  a;

  bar() {}
}