Skip to content

Commit 3d99b22

Browse files
committed
Merge pull request swiftlang#555 from allevato/multiline-raw-values
Fix indentation of multiline strings in enum case raw values.
1 parent 23068d4 commit 3d99b22

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

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

@@ -2275,12 +2295,13 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
22752295
override func visit(_ node: InitializerClauseSyntax) -> SyntaxVisitorContinueKind {
22762296
before(node.equal, tokens: .space)
22772297

2278-
// InitializerClauses that are children of a PatternBindingSyntax or
2298+
// InitializerClauses that are children of a PatternBindingSyntax, EnumCaseElementSyntax, or
22792299
// OptionalBindingConditionSyntax are already handled in the latter node, to ensure that
22802300
// continuations stack appropriately.
22812301
if let parent = node.parent,
22822302
!parent.is(PatternBindingSyntax.self)
22832303
&& !parent.is(OptionalBindingConditionSyntax.self)
2304+
&& !parent.is(EnumCaseElementSyntax.self)
22842305
{
22852306
after(node.equal, tokens: .break)
22862307
}

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)