40 columns                              |
### Pattern variable declaration statements.
>>> Basic syntax.
{
  var  (  a  &&  b  )  =  o;
  var  (  a  as  int  ,  String  ?  b  )  = o;
  var  (  :  inferred  )  = o;
  final  [  a  !  ,  Foo  (  :  b  ) , ... ]  = o;
  final  {  'k'  :  _  ,  ...  } = o;
  var  Foo  (  prop  :  value  ,  :  inferred  )  = o;
}
<<<
{
  var (a && b) = o;
  var (a as int, String? b) = o;
  var (:inferred) = o;
  final [a!, Foo(:b), ...] = o;
  final {'k': _, ...} = o;
  var Foo(prop: value, :inferred) = o;
}
>>> Prefer to split at "=" instead of pattern.
var (longIdentifier && anotherOne) = value;
<<<
var (longIdentifier && anotherOne) =
    value;
>>> Split in infix pattern.
var (longIdentifier && anotherAlsoLongOne) = value;
<<<
var (longIdentifier &&
        anotherAlsoLongOne) =
    value;
>>> Split in list pattern.
var [first, second, third, fourth, fifth] = value;
<<<
var [
  first,
  second,
  third,
  fourth,
  fifth,
] = value;
>>> Split in initializer but not block-splittable pattern.
var [first] = expression + anotherOperand + aThirdOperand;
<<<
var [first] =
    expression +
    anotherOperand +
    aThirdOperand;
>>> Split in map pattern.
var {first: second, third: fourth, fifth: sixth} = value;
<<<
var {
  first: second,
  third: fourth,
  fifth: sixth,
} = value;
>>> Split in record pattern.
var (first, second, third, fourth, fifth) = value;
<<<
var (
  first,
  second,
  third,
  fourth,
  fifth,
) = value;
>>> Split in object pattern.
var Foo(:first, :second, :third, :fourth, :fifth) = value;
<<<
var Foo(
  :first,
  :second,
  :third,
  :fourth,
  :fifth,
) = value;
>>> Split in value.
var (first, second, third) = longValueExpression + anotherOperand + aThirdOperand;
<<<
var (first, second, third) =
    longValueExpression +
    anotherOperand +
    aThirdOperand;
>>> Expression split in both.
var (longIdentifier && anotherAlsoLongOne) = longValueExpression + anotherOperand + aThirdOperand;
<<<
var (longIdentifier &&
        anotherAlsoLongOne) =
    longValueExpression +
    anotherOperand +
    aThirdOperand;
>>> Block split in both.
var (first, second, third, fourth, fifth) = (first, second, third, fourth, fifth);
<<<
var (
  first,
  second,
  third,
  fourth,
  fifth,
) = (
  first,
  second,
  third,
  fourth,
  fifth,
);
>>> Expression split in pattern, block split in value.
var (longIdentifier && anotherAlsoLongOne) = (first, second, third, fourth, fifth);
<<<
var (longIdentifier &&
    anotherAlsoLongOne) = (
  first,
  second,
  third,
  fourth,
  fifth,
);
>>> Block split in pattern, expression split in value.
var (first, second, third, fourth, fifth) = longValueExpression + anotherOperand + aThirdOperand;
<<<
var (
  first,
  second,
  third,
  fourth,
  fifth,
) = longValueExpression +
    anotherOperand +
    aThirdOperand;