Skip to content

Commit fdc3caa

Browse files
authored
Merge pull request swiftlang#143 from dabelknap/fix-containers
Fix wrapping for containers with a trailing comma
2 parents 57b5bb6 + faa29ef commit fdc3caa

File tree

4 files changed

+71
-28
lines changed

4 files changed

+71
-28
lines changed

Sources/SwiftFormatPrettyPrint/TokenStreamCreator.swift

+36-28
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,17 @@ private final class TokenStreamCreator: SyntaxVisitor {
7777
afterMap[tok, default: []].append(tokens)
7878
}
7979

80+
private func insertToken<Node: Collection>(
81+
_ token: Token,
82+
betweenChildrenOf collectionNode: Node
83+
) where Node.Element: Syntax, Node.Index == Int {
84+
if collectionNode.count > 0 {
85+
for i in 0..<(collectionNode.count - 1) {
86+
after(collectionNode[i].lastToken, tokens: token)
87+
}
88+
}
89+
}
90+
8091
override func visitPre(_ node: Syntax) {}
8192

8293
override func visit(_ node: DeclNameArgumentsSyntax) {
@@ -99,13 +110,14 @@ private final class TokenStreamCreator: SyntaxVisitor {
99110
super.visit(node)
100111
}
101112

113+
override func visit(_ node: TupleElementListSyntax) {
114+
insertToken(.break, betweenChildrenOf: node)
115+
super.visit(node)
116+
}
117+
102118
override func visit(_ node: TupleElementSyntax) {
103119
before(node.firstToken, tokens: .open)
104-
if let trailingComma = node.trailingComma {
105-
after(trailingComma, tokens: .close, .break)
106-
} else {
107-
after(node.lastToken, tokens: .close)
108-
}
120+
after(node.lastToken, tokens: .close)
109121
super.visit(node)
110122
}
111123

@@ -119,6 +131,17 @@ private final class TokenStreamCreator: SyntaxVisitor {
119131
super.visit(node)
120132
}
121133

134+
override func visit(_ node: ArrayElementListSyntax) {
135+
insertToken(.break, betweenChildrenOf: node)
136+
super.visit(node)
137+
}
138+
139+
override func visit(_ node: ArrayElementSyntax) {
140+
before(node.firstToken, tokens: .open)
141+
after(node.lastToken, tokens: .close)
142+
super.visit(node)
143+
}
144+
122145
override func visit(_ node: DictionaryExprSyntax) {
123146
after(
124147
node.leftSquare,
@@ -129,6 +152,11 @@ private final class TokenStreamCreator: SyntaxVisitor {
129152
super.visit(node)
130153
}
131154

155+
override func visit(_ node: DictionaryElementListSyntax) {
156+
insertToken(.break, betweenChildrenOf: node)
157+
super.visit(node)
158+
}
159+
132160
override func visit(_ node: DictionaryTypeSyntax) {
133161
after(node.colon, tokens: .space)
134162
super.visit(node)
@@ -137,11 +165,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
137165
override func visit(_ node: DictionaryElementSyntax) {
138166
before(node.firstToken, tokens: .open)
139167
after(node.colon, tokens: .break(offset: 2))
140-
if let trailingComma = node.trailingComma {
141-
after(trailingComma, tokens: .close, .break)
142-
} else {
143-
after(node.lastToken, tokens: .close)
144-
}
168+
after(node.lastToken, tokens: .close)
145169
super.visit(node)
146170
}
147171

@@ -398,11 +422,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
398422
}
399423

400424
override func visit(_ node: CodeBlockSyntax) {
401-
if node.statements.count > 0 {
402-
for i in 0..<(node.statements.count - 1) {
403-
after(node.statements[i].lastToken, tokens: .newline)
404-
}
405-
}
425+
insertToken(.newline, betweenChildrenOf: node.statements)
406426
super.visit(node)
407427
}
408428

@@ -441,9 +461,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
441461
override func visit(_ node: SwitchCaseSyntax) {
442462
before(node.firstToken, tokens: .open)
443463
after(node.label.lastToken, tokens: .newline(offset: 2), .open(.consistent, 0))
444-
for i in 0..<(node.statements.count - 1) {
445-
after(node.statements[i].lastToken, tokens: .newline)
446-
}
464+
insertToken(.newline, betweenChildrenOf: node.statements)
447465
after(node.lastToken, tokens: .break(offset: -2), .close, .close)
448466
super.visit(node)
449467
}
@@ -757,16 +775,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
757775
super.visit(node)
758776
}
759777

760-
override func visit(_ node: ArrayElementSyntax) {
761-
before(node.firstToken, tokens: .open)
762-
if let trailingComma = node.trailingComma {
763-
after(trailingComma, tokens: .close, .break)
764-
} else {
765-
after(node.lastToken, tokens: .close)
766-
}
767-
super.visit(node)
768-
}
769-
770778
override func visit(_ node: ContinueStmtSyntax) {
771779
super.visit(node)
772780
}

Tests/SwiftFormatPrettyPrintTests/ArrayDeclTests.swift

+10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public class ArrayDeclTests: PrettyPrintTestCase {
66
let a: [Bool] = [false, true, true, false]
77
let a: [String] = ["One", "Two", "Three", "Four"]
88
let a: [String] = ["One", "Two", "Three", "Four", "Five", "Six", "Seven"]
9+
let a: [String] = ["One", "Two", "Three", "Four", "Five", "Six", "Seven",]
910
"""
1011

1112
let expected =
@@ -24,6 +25,15 @@ public class ArrayDeclTests: PrettyPrintTestCase {
2425
"Six",
2526
"Seven"
2627
]
28+
let a: [String] = [
29+
"One",
30+
"Two",
31+
"Three",
32+
"Four",
33+
"Five",
34+
"Six",
35+
"Seven",
36+
]
2737
2838
"""
2939

Tests/SwiftFormatPrettyPrintTests/DictionaryDeclTests.swift

+10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public class DictionaryDeclTests: PrettyPrintTestCase {
66
let a: [Int: String] = [1: "a", 2: "b", 3: "c"]
77
let a: [Int: String] = [1: "a", 2: "b", 3: "c", 4: "d"]
88
let a: [Int: String] = [1: "a", 2: "b", 3: "c", 4: "d", 5: "e", 6: "f", 7: "g"]
9+
let a: [Int: String] = [1: "a", 2: "b", 3: "c", 4: "d", 5: "e", 6: "f", 7: "g",]
910
"""
1011

1112
let expected =
@@ -24,6 +25,15 @@ public class DictionaryDeclTests: PrettyPrintTestCase {
2425
6: "f",
2526
7: "g"
2627
]
28+
let a: [Int: String] = [
29+
1: "a",
30+
2: "b",
31+
3: "c",
32+
4: "d",
33+
5: "e",
34+
6: "f",
35+
7: "g",
36+
]
2737
2838
"""
2939

Tests/SwiftFormatPrettyPrintTests/TupleDeclTests.swift

+15
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public class TupleDeclTests: PrettyPrintTestCase {
66
let a: (Int, Int, Int) = (1, 2, 3)
77
let a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
88
let a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
9+
let a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,)
910
"""
1011

1112
let expected =
@@ -29,6 +30,20 @@ public class TupleDeclTests: PrettyPrintTestCase {
2930
11,
3031
12
3132
)
33+
let a = (
34+
1,
35+
2,
36+
3,
37+
4,
38+
5,
39+
6,
40+
7,
41+
8,
42+
9,
43+
10,
44+
11,
45+
12,
46+
)
3247
3348
"""
3449

0 commit comments

Comments
 (0)