40 columns                              |
>>> long single-line
"this string is longer than forty characters";
<<<
"this string is longer than forty characters";
>>> short one line multi-line
"""not too long""";
<<<
"""not too long""";
>>> multi-line with short lines
"""
not too long
or this one
""";
<<<
"""
not too long
or this one
""";
>>> multi-line with long lines
"""
this string is longer than forty characters
this one is also is longer than forty characters
""";
<<<
"""
this string is longer than forty characters
this one is also is longer than forty characters
""";
>>> only indent the first line of multiline strings
{
"""
multiline
""";
}
<<<
{
  """
multiline
""";
}
>>> do not wrap the first line if not needed
someMethod("""first line fits in here
more stuff down here too that is long
""");
<<<
someMethod("""first line fits in here
more stuff down here too that is long
""");
>>> wrap first line if needed
someMethod("""first line does not fits here
""");
<<<
someMethod(
    """first line does not fits here
""");
>>> format multiline as a block with a leading argument
someMethod("foo", """
  some
  text
""");
<<<
someMethod("foo", """
  some
  text
""");
>>> format multiline as a block with a trailing argument
someMethod("""
  some
  text
""", "foo");
<<<
someMethod("""
  some
  text
""", "foo");
>>> format multiline as a block with leading and trailing arguments
someMethod(
  "foo",
  """
  some
  text
  """,
  "foo");
<<<
someMethod(
    "foo",
    """
  some
  text
  """,
    "foo");
>>> format multiple multilines as blocks
someMethod("""
  some
  text
""", """
  some
  more
""", """
  even more
""");
<<<
someMethod("""
  some
  text
""", """
  some
  more
""", """
  even more
""");
>>> format multilines with other blocks as blocks
someMethod("""
  some
  text
""", () {
  some;
  function;
}, [
  "some",
  "collection",
  "with",
  "many",
  "elements"
]);
<<<
someMethod("""
  some
  text
""", () {
  some;
  function;
}, [
  "some",
  "collection",
  "with",
  "many",
  "elements"
]);
>>> interpolation is not split even when line is too long
someMethod("some text that is pretty long ${    interpolate +
a + thing   } more text");
<<<
someMethod(
    "some text that is pretty long ${interpolate + a + thing} more text");
>>> multi-line string interpolation does not split
someMethod("foo", """
  some text that is pretty long
  some more text that is pretty long ${    interpolate + a + thing   } more text
""");
<<<
someMethod("foo", """
  some text that is pretty long
  some more text that is pretty long ${interpolate + a + thing} more text
""");
>>> nested interpolation is not split
someMethod("some text that is ${pretty +  'long ${    interpolate +
a + thing   } more'} text", "another arg");
<<<
someMethod(
    "some text that is ${pretty + 'long ${interpolate + a + thing} more'} text",
    "another arg");
>>> hard splits are split in interpolation
someMethod("before ${(){statement();statement();statement();}} after");
<<<
someMethod("before ${() {
  statement();
  statement();
  statement();
}} after");
>>> collections split in interpolation if needed
method(
"b ${[1, 2, 3, 4, 5, 6]} a",
"before ${[first, second, third, fourth, {fifth: sixth}]} after");
<<<
method(
    "b ${[1, 2, 3, 4, 5, 6]} a",
    "before ${[
      first,
      second,
      third,
      fourth,
      {fifth: sixth}
    ]} after");
>>> nested multiline strings are not merged in interpolation
"before ${"""a
b"""} ${aft
+
er}";
<<<
"before ${"""a
b"""} ${aft + er}";
>>> multiply-nested interpolation
'''a
${b +
"""c
${d
+ '''e
f'''
+
g}
h"""
+ i}
j ${k
+
l}''';
<<<
'''a
${b + """c
${d + '''e
f''' + g}
h""" + i}
j ${k + l}''';
>>> nested interpolation inside function
"before ${ () { a(); """b
c"""; d(); }} after";
<<<
"before ${() {
  a();
  """b
c""";
  d();
}} after";
>>> comment inside interpolation
"before ${// comment
a
+
b
+  // another
c} after";
<<<
"before ${ // comment
    a + b + // another
        c} after";
>>>
function(
  "long string long string ${interpolated + interpolated} long string",
  longLongLongLongObject.longLongLongLongMethod());
<<<
function(
    "long string long string ${interpolated + interpolated} long string",
    longLongLongLongObject
        .longLongLongLongMethod());