Skip to content

Commit 011a168

Browse files
authored
Merge pull request #555 from allevato/multiline-raw-values
Fix indentation of multiline strings in enum case raw values.
2 parents 464850a + 36aab0a commit 011a168

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
@@ -1545,6 +1545,26 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
15451545
arrangeEnumCaseParameterClause(associatedValue, forcesBreakBeforeRightParen: false)
15461546
}
15471547

1548+
if let initializer = node.rawValue {
1549+
if let (unindentingNode, _, breakKind, shouldGroup) =
1550+
stackedIndentationBehavior(rhs: initializer.value)
1551+
{
1552+
var openTokens: [Token] = [.break(.open(kind: breakKind))]
1553+
if shouldGroup {
1554+
openTokens.append(.open)
1555+
}
1556+
after(initializer.equal, tokens: openTokens)
1557+
1558+
var closeTokens: [Token] = [.break(.close(mustBreak: false), size: 0)]
1559+
if shouldGroup {
1560+
closeTokens.append(.close)
1561+
}
1562+
after(unindentingNode.lastToken(viewMode: .sourceAccurate), tokens: closeTokens)
1563+
} else {
1564+
after(initializer.equal, tokens: .break(.continue))
1565+
}
1566+
}
1567+
15481568
return .visitChildren
15491569
}
15501570

@@ -2292,12 +2312,13 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
22922312
override func visit(_ node: InitializerClauseSyntax) -> SyntaxVisitorContinueKind {
22932313
before(node.equal, tokens: .space)
22942314

2295-
// InitializerClauses that are children of a PatternBindingSyntax or
2315+
// InitializerClauses that are children of a PatternBindingSyntax, EnumCaseElementSyntax, or
22962316
// OptionalBindingConditionSyntax are already handled in the latter node, to ensure that
22972317
// continuations stack appropriately.
22982318
if let parent = node.parent,
22992319
!parent.is(PatternBindingSyntax.self)
23002320
&& !parent.is(OptionalBindingConditionSyntax.self)
2321+
&& !parent.is(EnumCaseElementSyntax.self)
23012322
{
23022323
after(node.equal, tokens: .break)
23032324
}

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)