40 columns                              |
>>> space-separated adjacent strings are not split if they fit
var name = new Symbol("the first string" "the second");
<<<
var name = new Symbol(
    "the first string" "the second");
>>> space-separated adjacent strings are split if they don't fit
var name = new Symbol("the first very long string" "the second very longstring");
<<<
var name = new Symbol(
    "the first very long string"
    "the second very longstring");
>>> adjacent string lines all split together;
var text = "first" "second" "third" "fourth" "fifth";
<<<
var text = "first"
    "second"
    "third"
    "fourth"
    "fifth";
>>> preserve one newline between adjacent strings
var name = "the first string"
"the second string"



"the third string";
<<<
var name = "the first string"
    "the second string"
    "the third string";
>>> conditions, same operator
if (identifier || identifier || identifier || identifier) {
}
<<<
if (identifier ||
    identifier ||
    identifier ||
    identifier) {}
>>> conditions, different operators
if (identifier && identifier || identifier
                && identifier) {
}
<<<
if (identifier && identifier ||
    identifier && identifier) {}
>>> split conditional because condition doesn't fit
var kind = longElement != otherLongElement ? longArgument : arg;
<<<
var kind =
    longElement != otherLongElement
        ? longArgument
        : arg;
>>> split conditional because condition splits
var kind = longElement != otherReallyLongElement ? longArgument : arg;
<<<
var kind = longElement !=
        otherReallyLongElement
    ? longArgument
    : arg;
>>> split conditional because then doesn't fit
var kind = element != null ? longArgument : arg;
<<<
var kind = element != null
    ? longArgument
    : arg;
>>> split conditional because else doesn't fit
var kind = element != null ? argument : secondArgumentThatIsReallyLong;
<<<
var kind = element != null
    ? argument
    : secondArgumentThatIsReallyLong;
>>> split all conditionals when nested
var kind = a ? b ? c : d : e;
<<<
var kind = a
    ? b
        ? c
        : d
    : e;
>>> split all conditionals when nested
var kind = a ? b : c ? d : e;
<<<
var kind = a
    ? b
    : c
    ? d
    : e;
>>> don't split conditionals when indirectly nested
var kind = a ? b : (c ? d : e);
<<<
var kind = a ? b : (c ? d : e);
>>> split operator chain around block
first + second + () {body;} + third + fourth;
<<<
first +
    second +
    () {
      body;
    } +
    third +
    fourth;
>>> indent previous line farther because later line is nested deeper
someFunction(someExtremelyLongArgumentName).clamp();
<<<
someFunction(
        someExtremelyLongArgumentName)
    .clamp();
>>> wrap inside parenthesized
(someVerylongIdentifier * someVerylongIdentifier);
<<<
(someVerylongIdentifier *
    someVerylongIdentifier);
>>> same operator inside parenthesized is treated independently
(identifier * (identifier * identifier) * identifier);
<<<
(identifier *
    (identifier * identifier) *
    identifier);
>>> nested parenthesized are indented more
(identifier * (verylongIdentifier * verylongIdentifier) * identifier);
<<<
(identifier *
    (verylongIdentifier *
        verylongIdentifier) *
    identifier);
>>> conditional operands are nested
identifier ? identifier ? someParticularlyLongOperand : someParticularlyLongOperand : identifier ? someParticularlyLongOperand : someParticularlyLongOperand;
<<<
identifier
    ? identifier
        ? someParticularlyLongOperand
        : someParticularlyLongOperand
    : identifier
    ? someParticularlyLongOperand
    : someParticularlyLongOperand;
>>> index expressions can split after "["
verylongIdentifier[someParticularlyLongArgument];
<<<
verylongIdentifier[
    someParticularlyLongArgument];
>>> index arguments nest
verylongIdentifier[someParticularlyLongArgument[someParticularlyLongArgument]];
<<<
verylongIdentifier[
    someParticularlyLongArgument[
        someParticularlyLongArgument]];
>>> successive index arguments
identifier[longArgument][longArgument][longArgument][longArgument][longArgument];
<<<
identifier[longArgument][longArgument]
        [longArgument][longArgument]
    [longArgument];
>>> null-aware indexes
identifier?[longArgument][longArgument]?[longArgument][longArgument]?[longArgument];
<<<
identifier?[longArgument][longArgument]
        ?[longArgument][longArgument]
    ?[longArgument];
>>> is
verylongIdentifier.property is LongTypeName;
<<<
verylongIdentifier.property
    is LongTypeName;
>>> as
verylongIdentifier.property as LongTypeName;
<<<
verylongIdentifier.property
    as LongTypeName;
>>> null coalescing operator
identifier&&identifier&&identifier&&identifier;
<<<
identifier &&
    identifier &&
    identifier &&
    identifier;
>>> "." in named constructor
new VeryLongClassName.veryLongNamedConstructor();
<<<
new VeryLongClassName
    .veryLongNamedConstructor();