40 columns                              |
>>> long name with no initializer
var thisIsReallyQuiteAVeryLongVariableName;
<<<
var thisIsReallyQuiteAVeryLongVariableName;
>>> initializer doesn't fit one line, wrap inside, keep name
var result = myFunction(argument * argument, argument * argument);
<<<
var result = myFunction(
    argument * argument,
    argument * argument);
>>> initializer doesn't fit one line, wrap inside, keep name
var result = myFunction(argument, argument, argument, argument);
<<<
var result = myFunction(argument,
    argument, argument, argument);
>>> initializer fits one line
var variableName = veryLongInitializerName;
<<<
var variableName =
    veryLongInitializerName;
>>> initializer doesn't fit one line, cannot be split
var variableName = thisIsReallyQuiteAVeryLongVariableName;
<<<
var variableName =
    thisIsReallyQuiteAVeryLongVariableName;
>>> long function call initializer
var variableName = functionName(first, second);
<<<
var variableName =
    functionName(first, second);
>>> long binary expression initializer
int variableName = argument * argument + argument;
<<<
int variableName =
    argument * argument + argument;
>>> lots of variables with no initializers
var variableA, variableB, variableC, variableD;
<<<
var variableA,
    variableB,
    variableC,
    variableD;
>>> multiple variables get their own line if any has an initializer #16849
var x = 3, y = 4;
<<<
var x = 3,
    y = 4;
>>>
var x = 2, y;
<<<
var x = 2,
    y;
>>> multiple variables can stay on one line if there are no initializers
var x, y, z;
<<<
var x, y, z;
>>> dartbug.com/16379
var x = new XXXXXXXXXXXXXXXXXXXXXXXXXXXXX();
<<<
var x =
    new XXXXXXXXXXXXXXXXXXXXXXXXXXXXX();
