Skip to content

Commit

Permalink
Merge pull request #555 from allevato/multiline-raw-values
Browse files Browse the repository at this point in the history
Fix indentation of multiline strings in enum case raw values.
  • Loading branch information
allevato committed Jun 29, 2023
2 parents 464850a + 36aab0a commit 011a168
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
23 changes: 22 additions & 1 deletion Sources/SwiftFormatPrettyPrint/TokenStreamCreator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1545,6 +1545,26 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
arrangeEnumCaseParameterClause(associatedValue, forcesBreakBeforeRightParen: false)
}

if let initializer = node.rawValue {
if let (unindentingNode, _, breakKind, shouldGroup) =
stackedIndentationBehavior(rhs: initializer.value)
{
var openTokens: [Token] = [.break(.open(kind: breakKind))]
if shouldGroup {
openTokens.append(.open)
}
after(initializer.equal, tokens: openTokens)

var closeTokens: [Token] = [.break(.close(mustBreak: false), size: 0)]
if shouldGroup {
closeTokens.append(.close)
}
after(unindentingNode.lastToken(viewMode: .sourceAccurate), tokens: closeTokens)
} else {
after(initializer.equal, tokens: .break(.continue))
}
}

return .visitChildren
}

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

// InitializerClauses that are children of a PatternBindingSyntax or
// InitializerClauses that are children of a PatternBindingSyntax, EnumCaseElementSyntax, or
// OptionalBindingConditionSyntax are already handled in the latter node, to ensure that
// continuations stack appropriately.
if let parent = node.parent,
!parent.is(PatternBindingSyntax.self)
&& !parent.is(OptionalBindingConditionSyntax.self)
&& !parent.is(EnumCaseElementSyntax.self)
{
after(node.equal, tokens: .break)
}
Expand Down
11 changes: 11 additions & 0 deletions Tests/SwiftFormatPrettyPrintTests/StringTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,17 @@ final class StringTests: PrettyPrintTestCase {
assertPrettyPrintEqual(input: input, expected: input + "\n", linelength: 100)
}

func testMultilineStringsAsEnumRawValues() {
let input = #"""
enum E: String {
case x = """
blah blah
"""
}
"""#
assertPrettyPrintEqual(input: input, expected: input + "\n", linelength: 100)
}

func testMultilineStringsNestedInAnotherWrappingContext() {
let input =
#"""
Expand Down

0 comments on commit 011a168

Please sign in to comment.