SPICE-0028: Add support for multi-line string line continuations (#1507)

SPICE: https://github.com/apple/pkl-evolution/pull/31
This commit is contained in:
Jen Basch
2026-04-21 10:29:52 -07:00
committed by GitHub
parent d85f06be27
commit e07abb7311
24 changed files with 185 additions and 10 deletions
@@ -75,6 +75,11 @@ final class Builder {
OPERATOR ->
new Text(node.text(source));
case STRING_NEWLINE -> mustForceLine();
case STRING_CONTINUATION -> {
var escape = node.text(source);
yield new Nodes(
List.of(new Text(escape.substring(0, escape.length() - 1)), mustForceLine()));
}
case MODULE_DECLARATION -> formatModuleDeclaration(node);
case MODULE_DEFINITION -> formatModuleDefinition(node);
case SINGLE_LINE_STRING_LITERAL_EXPR -> formatSingleLineString(node);
@@ -922,7 +927,9 @@ final class Builder {
if (elem.type == NodeType.TERMINAL && text(elem).endsWith("(")) {
isInStringInterpolation = true;
}
result.add(format(elem));
var formatted = format(elem);
if (formatted instanceof Nodes formattedNodes) result.addAll(formattedNodes.nodes());
else result.add(formatted);
prev = elem;
}
return result;
@@ -48,6 +48,26 @@ quux {
"""
}
// line continuations
corge {
"""
hello \
world
"""
#"""
hello \#
world
"""#
"""
hello \
\
world
"""
}
obj {
data {
["bar"] = """
@@ -52,6 +52,25 @@ quux {
"""
}
// line continuations
corge {
"""
hello \
world
"""
#"""
hello \#
world
"""#
"""
hello \
\
world
"""
}
obj {
data {
["bar"] =