40 columns                              |
>>>
class A {void x(){}}
<<<
class A {
  void x() {}
}
>>>
class A{static bool x(){return true;}}
<<<
class A {
  static bool x() {
    return true;
  }
}
>>>
class A{int x()=>42+3;}
<<<
class A {
  int x() => 42 + 3;
}
>>> method body
class A {
  foo(path) {
    var buffer = new StringBuffer();
    var file = new File(path);
    return file;
  }
}
<<<
class A {
  foo(path) {
    var buffer = new StringBuffer();
    var file = new File(path);
    return file;
  }
}
>>> covariant (skip: published version of analyzer doesn't support 'covariant yet')
class A {
  pos(    covariant  int a,covariant    b  );
  opt([ covariant int a,covariant    b  ]);
  named({ covariant int a,covariant    b  });
  fn(     covariant  int f(bool b));
}
<<<
class A {
  pos(covariant int a, covariant b);
  opt([covariant int a, covariant b]);
  named({covariant int a, covariant b});
  fn(covariant int f(bool b));
}
>>> covariant in initializing formal (not valid, but dartfmt should accept) (skip: published version of analyzer doesn't support 'covariant yet')
class A {
  A(   covariant   this.foo);
}
<<<
class A {
  A(covariant this.foo);
}