Skip to content

Commit 36aab0a

Browse files
committed
Fix indentation of multiline strings in enum case raw values.
1 parent a41b528 commit 36aab0a

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

Sources/SwiftFormatPrettyPrint/TokenStreamCreator.swift

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1556,6 +1556,26 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
15561556
arrangeEnumCaseParameterClause(associatedValue, forcesBreakBeforeRightParen: false)
15571557
}
15581558

1559+
if let initializer = node.rawValue {
1560+
if let (unindentingNode, _, breakKind, shouldGroup) =
1561+
stackedIndentationBehavior(rhs: initializer.value)
1562+
{
1563+
var openTokens: [Token] = [.break(.open(kind: breakKind))]
1564+
if shouldGroup {
1565+
openTokens.append(.open)
1566+
}
1567+
after(initializer.equal, tokens: openTokens)
1568+
1569+
var closeTokens: [Token] = [.break(.close(mustBreak: false), size: 0)]
1570+
if shouldGroup {
1571+
closeTokens.append(.close)
1572+
}
1573+
after(unindentingNode.lastToken(viewMode: .sourceAccurate), tokens: closeTokens)
1574+
} else {
1575+
after(initializer.equal, tokens: .break(.continue))
1576+
}
1577+
}
1578+
15591579
return .visitChildren
15601580
}
15611581

@@ -2303,12 +2323,13 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
23032323
override func visit(_ node: InitializerClauseSyntax) -> SyntaxVisitorContinueKind {
23042324
before(node.equal, tokens: .space)
23052325

2306-
// InitializerClauses that are children of a PatternBindingSyntax or
2326+
// InitializerClauses that are children of a PatternBindingSyntax, EnumCaseElementSyntax, or
23072327
// OptionalBindingConditionSyntax are already handled in the latter node, to ensure that
23082328
// continuations stack appropriately.
23092329
if let parent = node.parent,
23102330
!parent.is(PatternBindingSyntax.self)
23112331
&& !parent.is(OptionalBindingConditionSyntax.self)
2332+
&& !parent.is(EnumCaseElementSyntax.self)
23122333
{
23132334
after(node.equal, tokens: .break)
23142335
}

Tests/SwiftFormatPrettyPrintTests/StringTests.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,17 @@ final class StringTests: PrettyPrintTestCase {
419419
assertPrettyPrintEqual(input: input, expected: input + "\n", linelength: 100)
420420
}
421421

422+
func testMultilineStringsAsEnumRawValues() {
423+
let input = #"""
424+
enum E: String {
425+
case x = """
426+
blah blah
427+
"""
428+
}
429+
"""#
430+
assertPrettyPrintEqual(input: input, expected: input + "\n", linelength: 100)
431+
}
432+
422433
func testMultilineStringsNestedInAnotherWrappingContext() {
423434
let input =
424435
#"""

0 commit comments

Comments
 (0)