40 columns                              |
>>> args before and after function do not force nesting
method(first,() {fn;},third);
<<<
method(first, () {
  fn;
}, third);
>>> nothing but function args does not nest
longFunctionName(() {;}, () {;}, () {;});
<<<
longFunctionName(
  () {
    ;
  },
  () {
    ;
  },
  () {
    ;
  },
);
>>> trailing functions do not nest
longFunctionName(argument, argument, argument, argument, () {;}, () {;});
<<<
longFunctionName(
  argument,
  argument,
  argument,
  argument,
  () {
    ;
  },
  () {
    ;
  },
);
>>> leading functions do not nest
longFunctionName(() {;}, () {;}, argument, argument, argument, argument);
<<<
longFunctionName(
  () {
    ;
  },
  () {
    ;
  },
  argument,
  argument,
  argument,
  argument,
);
>>> arg between functions forces nesting
longFunctionName(() {;}, argument, () {;});
<<<
longFunctionName(
  () {
    ;
  },
  argument,
  () {
    ;
  },
);
>>> unsplit leading args
longFunctionName(arg, arg, () {;}, () {;});
<<<
longFunctionName(
  arg,
  arg,
  () {
    ;
  },
  () {
    ;
  },
);
>>> split before leading args
longFunctionName(argument, argument, argument, () {;}, () {;});
<<<
longFunctionName(
  argument,
  argument,
  argument,
  () {
    ;
  },
  () {
    ;
  },
);
>>> split in middle of leading args
longFunctionName(argument, argument, argument, argument, () {;}, () {;});
<<<
longFunctionName(
  argument,
  argument,
  argument,
  argument,
  () {
    ;
  },
  () {
    ;
  },
);
>>> split before all leading args
longFunctionName(argument, argument, argument, argument, argument, argument,
() {;}, () {;});
<<<
longFunctionName(
  argument,
  argument,
  argument,
  argument,
  argument,
  argument,
  () {
    ;
  },
  () {
    ;
  },
);
>>> unsplit trailing args
longFunctionName(() {;}, () {;}, argument, argument);
<<<
longFunctionName(
  () {
    ;
  },
  () {
    ;
  },
  argument,
  argument,
);
>>> split before trailing args
longFunctionName(() {;}, () {;} /* very very long comment */, argument, argument);
<<<
longFunctionName(
  () {
    ;
  },
  () {
    ;
  } /* very very long comment */,
  argument,
  argument,
);
>>> split in middle of trailing args
longFunctionName(() {;}, () {;}, argument, argument, argument, argument);
<<<
longFunctionName(
  () {
    ;
  },
  () {
    ;
  },
  argument,
  argument,
  argument,
  argument,
);
>>> split before all trailing args
longFunctionName(() {;}, () {;}, argument, argument, argument, argument,
argument, argument, argument);
<<<
longFunctionName(
  () {
    ;
  },
  () {
    ;
  },
  argument,
  argument,
  argument,
  argument,
  argument,
  argument,
  argument,
);
>>> functions with named arguments
longFunctionName(() {;}, a: () {;}, b: () {;});
<<<
longFunctionName(
  () {
    ;
  },
  a: () {
    ;
  },
  b: () {
    ;
  },
);
>>> do not nest because of nested 1-arg fn
outer(inner(() {body;}));
<<<
outer(inner(() {
  body;
}));
>>> do not nest because of nested many-arg fn
outer(argument, inner(() {body;}));
<<<
outer(argument, inner(() {
  body;
}));
>>> do not nest because of nested 1-arg method call
obj.outer(a.b.c.fn(() {body;}));
<<<
obj.outer(a.b.c.fn(() {
  body;
}));
>>> do not nest because of nested many-arg method call
obj.outer(argument, a.b.c.fn(() {body;}));
<<<
obj.outer(argument, a.b.c.fn(() {
  body;
}));
>>> do not force named args to split on positional function
function(argument, () {;},
    named: argument, another: argument);
<<<
function(argument, () {
  ;
}, named: argument, another: argument);
>>> args before and after functions split independently
longFunction(argument, argument, argument, argument, argument,
() {;}, () {;}, argument, argument, argument, argument, argument);
<<<
longFunction(
  argument,
  argument,
  argument,
  argument,
  argument,
  () {
    ;
  },
  () {
    ;
  },
  argument,
  argument,
  argument,
  argument,
  argument,
);
>>> all named args with leading non-function forces functions to indent
longFunction(a: argument, b: () {;}, c: () {;});
<<<
longFunction(
  a: argument,
  b: () {
    ;
  },
  c: () {
    ;
  },
);
>>> all named args with trailing non-function forces functions to indent
longFunction(a: () {;}, b: () {;}, c: argument);
<<<
longFunction(
  a: () {
    ;
  },
  b: () {
    ;
  },
  c: argument,
);
>>> named args anywhere with leading non-function
longFunction(argument, b: () {;}, c: () {;});
<<<
longFunction(
  argument,
  b: () {
    ;
  },
  c: () {
    ;
  },
);
>>> named args anywhere with leading non-function
longFunction(a: argument, () {;}, c: () {;});
<<<
longFunction(
  a: argument,
  () {
    ;
  },
  c: () {
    ;
  },
);
>>> named args anywhere with leading non-function
longFunction(a: argument, b: () {;}, () {;});
<<<
longFunction(
  a: argument,
  b: () {
    ;
  },
  () {
    ;
  },
);
>>> named args anywhere with trailing non-function
longFunction(() {;}, b: () {;}, c: argument);
<<<
longFunction(
  () {
    ;
  },
  b: () {
    ;
  },
  c: argument,
);
>>> named args anywhere with trailing non-function
longFunction(a: () {;}, () {;}, c: argument);
<<<
longFunction(
  a: () {
    ;
  },
  () {
    ;
  },
  c: argument,
);
>>> named args anywhere with trailing non-function
longFunction(a: () {;}, b: () {;}, argument);
<<<
longFunction(
  a: () {
    ;
  },
  b: () {
    ;
  },
  argument,
);
>>> no extra indent for expression function argument with trailing comma
function(() => P(p,),a: () => [a,],);
<<<
function(() => P(p), a: () => [a]);
>>> indents body if not block style
function(() => inner(argument1, argument2, argument3),);
<<<
function(
  () => inner(
    argument1,
    argument2,
    argument3,
  ),
);
>>> split in expression function parameter list argument with trailing comma
function((parameter1, parameter2, parameter3) => P(p,),);
<<<
function(
  (
    parameter1,
    parameter2,
    parameter3,
  ) => P(p),
);
>>> unsplit named arguments with trailing positional closure
function(a: argument, b: argument, () {;});
<<<
function(a: argument, b: argument, () {
  ;
});
>>> split named arguments with trailing positional closure
function(a: argument, b: argument, c: argument, () {;});
<<<
function(
  a: argument,
  b: argument,
  c: argument,
  () {
    ;
  },
);
>>> unsingle split leading positional, named arguments with trailing positional closure
function(argument, b: argument, () {;});
<<<
function(argument, b: argument, () {
  ;
});
>>> single split leading positional, named arguments with trailing positional closure
function(argument, b: argument, c: argument, () {;});
<<<
function(
  argument,
  b: argument,
  c: argument,
  () {
    ;
  },
);
>>> split leading positional, named arguments with trailing positional closure
function(argument, argument, argument, argument, argument, b: argument, c: argument, d: argument, () {;});
<<<
function(
  argument,
  argument,
  argument,
  argument,
  argument,
  b: argument,
  c: argument,
  d: argument,
  () {
    ;
  },
);
>>> multiple trailing positional closures
function(argument, b: argument, c: argument, () {;}, () {;});
<<<
function(
  argument,
  b: argument,
  c: argument,
  () {
    ;
  },
  () {
    ;
  },
);
>>> mixed named and positional trailing closures
function(argument, b: argument, c: argument, () {;}, d: () {;}, () {;}, e: () {;});
<<<
function(
  argument,
  b: argument,
  c: argument,
  () {
    ;
  },
  d: () {
    ;
  },
  () {
    ;
  },
  e: () {
    ;
  },
);