40 columns                              |
>>> split collection before for
var map = {for (a in b) somewhatLongThingHere: 1};
<<<
var map = {
  for (a in b) somewhatLongThingHere: 1
};
>>> one line in multi-line
var map = {veryLongThingThatForcesASplit: 1, for (a in b) 2: 2, 3: 3};
<<<
var map = {
  veryLongThingThatForcesASplit: 1,
  for (a in b) 2: 2,
  3: 3
};
>>> long body forces split
var map = {1: 1, for (a in b) veryLongThingThatForcesASplit, 3: 3};
<<<
var map = {
  1: 1,
  for (a in b)
    veryLongThingThatForcesASplit,
  3: 3
};
>>> split inside body
var map = {1: 1, for (a in b) veryLongThingThatForcesASplit + anotherLongThing, 3: 3};
<<<
var map = {
  1: 1,
  for (a in b)
    veryLongThingThatForcesASplit +
        anotherLongThing,
  3: 3
};
>>> trailing comma
var map = {for (a in b) 2: 2,};
<<<
var map = {
  for (a in b) 2: 2,
};
>>> spread map inside for stays on one line if it fits
var map = {for (a in b) ...{1: 1, 2: 2}};
<<<
var map = {
  for (a in b) ...{1: 1, 2: 2}
};
>>> spread map inside for formats like block if it splits
var map = {for (a in b) ...{1: 1, 2: 2,}};
<<<
var map = {
  for (a in b) ...{
    1: 1,
    2: 2,
  }
};
>>> a split collection that isn't spread wraps and indents
var map = {for (a in b) {1: 1,2: 2,}};
<<<
var map = {
  for (a in b)
    {
      1: 1,
      2: 2,
    }
};
>>> lambda inside body
var map = {for (a in b) k: () { body; }};
<<<
var map = {
  for (a in b)
    k: () {
      body;
    }
};
>>> nested for doesn't split if it fits
({for (a in b) for (c in d) 1: 1});
<<<
({for (a in b) for (c in d) 1: 1});
>>> split collection before nested for
var map = {for (a in b) for (c in d) 1: longThing};
<<<
var map = {
  for (a in b) for (c in d) 1: longThing
};
>>> just split outer for
var map = {for (a in b) for (c in d) 1: longThingThatIsLong};
<<<
var map = {
  for (a in b)
    for (c in d) 1: longThingThatIsLong
};
>>> split in for-in type
var map = {for (LongGenericTypeName<TypeArg, AnotherTypeArgument> a in b) 1: body};
<<<
var map = {
  for (LongGenericTypeName<TypeArg,
      AnotherTypeArgument> a in b)
    1: body
};
>>> split in for-in expression
var map = {for (a in sequenceExpression + thatDoesNotFit) 1: body};
<<<
var map = {
  for (a in sequenceExpression +
      thatDoesNotFit)
    1: body
};
>>> split in for var type
var map = {for (LongGenericTypeName<TypeArg, AnotherTypeArgument> a = 0; a < 1; a++) 1: body};
<<<
var map = {
  for (LongGenericTypeName<TypeArg,
          AnotherTypeArgument> a = 0;
      a < 1;
      a++)
    1: body
};
>>> split in for initializer
var map = {for (a = initializerExpression + thatDoesNotFit; a < 1; a++) 1: body};
<<<
var map = {
  for (a = initializerExpression +
          thatDoesNotFit;
      a < 1;
      a++)
    1: body
};
>>> split in for condition
var map = {for (a = b; conditionExpression + thatDoesNotFit; a++) 1: body};
<<<
var map = {
  for (a = b;
      conditionExpression +
          thatDoesNotFit;
      a++)
    1: body
};
>>> split in for increment
var map = {for (a = b; a < 1; incrementExpression + thatDoesNotFit) 1: body};
<<<
var map = {
  for (a = b;
      a < 1;
      incrementExpression +
          thatDoesNotFit)
    1: body
};
>>> if key/value splits, body splits
var map = {for (a in b) someLongKeyExpression: andAVeryLongValue};
<<<
var map = {
  for (a in b)
    someLongKeyExpression:
        andAVeryLongValue
};