40 columns                              |
>>> Short initializer.
var   a   =   1  ;
<<<
var a = 1;
>>> Split initializer.
var variableName = veryLongInitializerName;
<<<
var variableName =
    veryLongInitializerName;
>>> Split overflowing initializer.
var variableName = thisIsReallyQuiteAVeryLongVariableName;
<<<
var variableName =
    thisIsReallyQuiteAVeryLongVariableName;
>>> No split after keyword.
var thisIsReallyQuiteAVeryLongVariableName;
<<<
var thisIsReallyQuiteAVeryLongVariableName;
>>> Multiple unsplit variables with no initializers.
var a , b , c , d;
<<<
var a, b, c, d;
>>> Multiple split variables with no initializers.
var variableA, variableB, variableC, variableD;
<<<
var variableA,
    variableB,
    variableC,
    variableD;
>>> Multiple unsplit variables with initializers.
var x = 3, y = 4;
<<<
var x = 3, y = 4;
>>>
var x = 2, y;
<<<
var x = 2, y;
>>> Multiple split variables with initializers.
var x = initializer, y = initializer, z = initializer;
<<<
var x = initializer,
    y = initializer,
    z = initializer;
>>> Indent initializers if there are multiple variables.
var veryLongVariable1 = longishInitializer,
    short = value,
    veryLongVariable2 = longishInitializer;
<<<
var veryLongVariable1 =
        longishInitializer,
    short = value,
    veryLongVariable2 =
        longishInitializer;
>>> Final variable.
final  x  =  1  ;
<<<
final x = 1;
>>> Typed variable.
int  x  =  1  ;
<<<
int x = 1;
>>> Typed final variable.
final  int  x  =  1;
<<<
final int x = 1;
>>> Late variables.
{
  late  var  i  ;
  late  final  int  i  ;
  late  int  i  ;
}
<<<
{
  late var i;
  late final int i;
  late int i;
}
>>> Split after type name.
SomeVeryLongTypeName someLongVariableName;
<<<
SomeVeryLongTypeName
someLongVariableName;
>>> Split after type name with multiple variables.
SomeVeryLongTypeName someLongVariableName, another, third;
<<<
SomeVeryLongTypeName
someLongVariableName,
another,
third;
>>> Split in initializer without splitting after type.
int someLongVariableName = veryLong + initializer;
<<<
int someLongVariableName =
    veryLong + initializer;
>>> Split in initializers without splitting after type.
int someLongVariableName = longInitializerValue,
another = short, thirdLongVariable = anotherLongInitializer;
<<<
int someLongVariableName =
        longInitializerValue,
    another = short,
    thirdLongVariable =
        anotherLongInitializer;
>>> Split after type name and in initializer.
SomeVeryLongTypeName someLongVariableName = longInitializerValue;
<<<
SomeVeryLongTypeName
someLongVariableName =
    longInitializerValue;
>>> Split after type name and in initializers.
SomeVeryLongTypeName someLongVariableName = longInitializerValue,
another = short, thirdLongVariable = anotherLongInitializer;
<<<
SomeVeryLongTypeName
someLongVariableName =
    longInitializerValue,
another = short,
thirdLongVariable =
    anotherLongInitializer;
>>> Split in type name does not split before variable.
Generic<LongTypeArgument, AnotherLongTypeName> variable;
<<<
Generic<
  LongTypeArgument,
  AnotherLongTypeName
> variable;
>>> Prefer to split at "=" over infix operator.
int variableName = argument * argument + argument;
<<<
int variableName =
    argument * argument + argument;
>>> Prefer block-like splitting for lists.
var variableName = [element, element, element];
<<<
var variableName = [
  element,
  element,
  element,
];
>>> No block-like splitting for empty lists.
var variableNameWithExactLength____ = [];
<<<
var variableNameWithExactLength____ =
    [];
>>> Prefer block-like splitting for maps.
var variableName = {1: element, 2: element, 3: element};
<<<
var variableName = {
  1: element,
  2: element,
  3: element,
};
>>> No block-like splitting for empty maps.
var variableNameWithExactLength____ = {};
<<<
var variableNameWithExactLength____ =
    {};
>>> Prefer block-like splitting for function calls.
var variableName = function(argument, argument);
<<<
var variableName = function(
  argument,
  argument,
);
>>> No block-like splitting for empty argument lists.
var variableNameExactLength = function();
<<<
var variableNameExactLength =
    function();
>>> No block-like splitting if function name doesn't fit.
var longVariableName = veryLongFunctionName(argument);
<<<
var longVariableName =
    veryLongFunctionName(argument);
>>> Prefer block-like splitting for constructor calls.
var variableName = new Thing(argument, argument);
<<<
var variableName = new Thing(
  argument,
  argument,
);
>>> Prefer block-like splitting for const constructor calls.
var variableName = const Thing(argument, argument);
<<<
var variableName = const Thing(
  argument,
  argument,
);
>>> Indent block if function name doesn't fit and arguments split.
var longVariableName = veryLongFunctionName(argument, another);
<<<
var longVariableName =
    veryLongFunctionName(
      argument,
      another,
    );
>>> Use block-like splitting for switch expressions.
var variableName = switch (value) { 1 => 'one', 2 => 'two' };
<<<
var variableName = switch (value) {
  1 => 'one',
  2 => 'two',
};
>>> Use block-like splitting for switch expressions with split values.
var variableName = switch ([longElement, longElement, longElement])
{ 1 => 'one', 2 => 'two' };
<<<
### TODO(tall): Once block arguments are supported, this should become:
### var variableName = switch ([
###   longElement,
###   longElement,
###   longElement,
### ]) {
var variableName = switch (
  [
    longElement,
    longElement,
    longElement,
  ]
) {
  1 => 'one',
  2 => 'two',
};
>>> Use block-like splitting for block-bodied function expressions.
var variableName = (parameter, parameter, parameter) { body; };
<<<
var variableName = (
  parameter,
  parameter,
  parameter,
) {
  body;
};
>>> Use block-like splitting for expression-bodied function expressions.
var variableName = (parameter, parameter, parameter) => body;
<<<
var variableName = (
  parameter,
  parameter,
  parameter,
) => body;
>>> Use block-like splitting for parenthesized expressions whose inner does.
var variableName = ([element, element, element]);
<<<
var variableName = ([
  element,
  element,
  element,
]);
>>>
var variableName = (notDelimited + expression);
<<<
var variableName =
    (notDelimited + expression);
>>> Split all variables if an initializer has a split internally.
var a = 1, b = [element, element, element, element];
<<<
var a = 1,
    b = [
      element,
      element,
      element,
      element,
    ];
>>> Late local variable.
{
  late var x = 1;
  late int y = 2;
}
<<<
{
  late var x = 1;
  late int y = 2;
}
>>> Constant.
const  uptyped  =  123  ;
<<<
const uptyped = 123;
>>>
const  String  typed  =  'string'  ;
<<<
const String typed = 'string';