Skip to content

Commit acceb76

Browse files
committed
Proper indentation and line breaks for Switch/Case and Closure
1 parent 54ff9a2 commit acceb76

File tree

4 files changed

+34
-27
lines changed

4 files changed

+34
-27
lines changed

Sources/SwiftSyntaxBuilder/gyb_generated/BuildableCollectionNodes.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1475,7 +1475,7 @@ public struct SwitchCaseList: ExpressibleByArrayLiteral, SyntaxBuildable, Expres
14751475

14761476
public func buildSwitchCaseList(format: Format, leadingTrivia: Trivia? = nil) -> SwitchCaseListSyntax {
14771477
let result = SyntaxFactory.makeSwitchCaseList(elements.map {
1478-
$0.buildSyntax(format: format, leadingTrivia: nil)
1478+
$0.buildSyntax(format: format, leadingTrivia: Trivia.newlines(1) + format._makeIndent())
14791479
})
14801480
if let leadingTrivia = leadingTrivia {
14811481
return result.withLeadingTrivia(leadingTrivia + (result.leadingTrivia ?? []))

Sources/SwiftSyntaxBuilder/gyb_generated/BuildableNodes.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2554,8 +2554,8 @@ public struct ClosureExpr: ExprBuildable, ExpressibleAsClosureExpr {
25542554
let result = SyntaxFactory.makeClosureExpr(
25552555
leftBrace: leftBrace,
25562556
signature: signature?.buildClosureSignature(format: format, leadingTrivia: nil),
2557-
statements: statements.buildCodeBlockItemList(format: format, leadingTrivia: nil),
2558-
rightBrace: rightBrace
2557+
statements: statements.buildCodeBlockItemList(format: format._indented(), leadingTrivia: nil),
2558+
rightBrace: rightBrace.withLeadingTrivia(.newlines(1) + format._makeIndent() + (rightBrace.leadingTrivia ?? []))
25592559
)
25602560
if let leadingTrivia = leadingTrivia {
25612561
return result.withLeadingTrivia(leadingTrivia + (result.leadingTrivia ?? []))
@@ -9531,7 +9531,7 @@ public struct SwitchStmt: StmtBuildable, ExpressibleAsSwitchStmt {
95319531
expression: expression.buildExpr(format: format, leadingTrivia: nil),
95329532
leftBrace: leftBrace,
95339533
cases: cases.buildSwitchCaseList(format: format, leadingTrivia: nil),
9534-
rightBrace: rightBrace
9534+
rightBrace: rightBrace.withLeadingTrivia(.newlines(1) + format._makeIndent() + (rightBrace.leadingTrivia ?? []))
95359535
)
95369536
if let leadingTrivia = leadingTrivia {
95379537
return result.withLeadingTrivia(leadingTrivia + (result.leadingTrivia ?? []))
@@ -10618,7 +10618,7 @@ public struct SwitchCase: SyntaxBuildable, ExpressibleAsSwitchCase {
1061810618
let result = SyntaxFactory.makeSwitchCase(
1061910619
unknownAttr: unknownAttr?.buildAttribute(format: format, leadingTrivia: nil),
1062010620
label: label.buildSyntax(format: format, leadingTrivia: nil),
10621-
statements: statements.buildCodeBlockItemList(format: format, leadingTrivia: nil)
10621+
statements: statements.buildCodeBlockItemList(format: format._indented(), leadingTrivia: nil)
1062210622
)
1062310623
if let leadingTrivia = leadingTrivia {
1062410624
return result.withLeadingTrivia(leadingTrivia + (result.leadingTrivia ?? []))

Tests/SwiftSyntaxBuilderTest/ExpressibleBuildablesTests.swift

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,34 +51,30 @@ final class ExpressibleBuildablesTests: XCTestCase {
5151

5252
let switchStmt = SwitchStmt(labelName: nil,
5353
expression: expression,
54-
leftBrace: .leftBrace.withTrailingTrivia(.newlines(1)),
55-
rightBrace: .rightBrace.withLeadingTrivia(.newlines(1)),
5654
casesBuilder: {
5755
for (version, semVer) in versions {
5856
SwitchCase(label: SwitchCaseLabel(caseItemsBuilder: {
5957
CaseItem(pattern: EnumCasePattern(caseName: version))
6058
}), statementsBuilder: {
61-
ReturnStmt(expression: StringLiteralExpr(semVer, closeQuote: .stringQuote.withTrailingTrivia(.newlines(1))))
59+
ReturnStmt(expression: StringLiteralExpr(semVer))
6260
})
6361
}
6462
})
6563

6664
let syntax = switchStmt.buildSyntax(format: Format())
67-
68-
// The generated code contains whitespace after `:`.
69-
// So replacing whitespace with `␣`.
70-
XCTAssertEqual(syntax.description.replacingOccurrences(of: " ", with: ""), """
71-
switch␣version{
72-
case␣.version_1:␣
73-
return␣"1.0.0"
74-
case␣.version_2:␣
75-
return␣"2.0.0"
76-
case␣.version_3:␣
77-
return␣"3.0.0"
78-
case␣.version_3_1:␣
79-
return␣"3.1.0"
80-
81-
}
82-
""")
65+
XCTAssertEqual(
66+
syntax.description,
67+
"""
68+
switch version{
69+
case .version_1:
70+
return "1.0.0"
71+
case .version_2:
72+
return "2.0.0"
73+
case .version_3:
74+
return "3.0.0"
75+
case .version_3_1:
76+
return "3.1.0"
77+
}
78+
""")
8379
}
8480
}

Tests/SwiftSyntaxBuilderTest/FunctionTests.swift

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,23 @@ final class FunctionTests: XCTestCase {
7272
TupleExprElement(expression: "42")
7373
})
7474
let syntax = buildable.buildSyntax(format: Format())
75-
XCTAssertEqual(syntax.description, "test(42){}")
75+
XCTAssertEqual(syntax.description, "test(42){\n}")
7676
}
7777

7878
func testParensOmittedForNoArgumentsAndTrailingClosure() {
79-
let buildable = FunctionCallExpr("test", trailingClosure: ClosureExpr())
79+
let closure = ClosureExpr(statementsBuilder: {
80+
FunctionCallExpr("f", argumentListBuilder: {
81+
TupleExprElement(expression: "a")
82+
})
83+
})
84+
let buildable = FunctionCallExpr("test", trailingClosure: closure)
8085
let syntax = buildable.buildSyntax(format: Format())
81-
XCTAssertEqual(syntax.description, "test{}")
86+
XCTAssertEqual(
87+
syntax.description,
88+
"""
89+
test{
90+
f(a)
91+
}
92+
""")
8293
}
8394
}

0 commit comments

Comments
 (0)