40 columns                              |
>>> long parameters list, this.field
class Foo {
  Foo(this.first, this.second, this.third, this.fourth);
}
<<<
class Foo {
  Foo(this.first, this.second,
      this.third, this.fourth);
}
>>> indent parameters more if body is a wrapped =>
method(int firstArgument, int argumentTwo) => "very long body that must wrap";
<<<
method(int firstArgument,
        int argumentTwo) =>
    "very long body that must wrap";
>>> split before "covariant" (skip: published version of analyzer doesn't support 'covariant yet')
class A {
  longMethod(covariant parameterNameHere) {}
}
<<<
class A {
  longMethod(
      covariant parameterNameHere) {}
}
>>> split before "covariant" with multiple parameters (skip: published version of analyzer doesn't support 'covariant yet')
class A {
  longMethod(covariant first, second, covariant int third(parameter), fourth) {}
}
<<<
class A {
  longMethod(
      covariant first,
      second,
      covariant int third(parameter),
      fourth) {}
}
>>> never split after "covariant" (at least for now) (skip: published version of analyzer doesn't support 'covariant yet')
class A {
  longMethod(covariant int veryLongParameterNameWow) {}
}
<<<
class A {
  longMethod(
      covariant int veryLongParameterNameWow) {}
}
>>> split between field type and name
class Foo {
  Foo(VerylongParameterType this.parameterName) {}
}
<<<
class Foo {
  Foo(
      VerylongParameterType
          this.parameterName) {}
}