Skip to content

Commit 29b09a5

Browse files
dabelknapallevato
authored andcommitted
Add support for dictionary expressions. (swiftlang#120)
1 parent 82204fb commit 29b09a5

File tree

2 files changed

+59
-9
lines changed

2 files changed

+59
-9
lines changed

Diff for: Sources/PrettyPrint/TokenStreamCreator.swift

+27-9
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,38 @@ private final class TokenStreamCreator: SyntaxVisitor {
9696
}
9797

9898
override func visit(_ node: ArrayExprSyntax) {
99-
after(node.leftSquare, tokens: .break(size: 0, offset: 2), .open(.consistent, 0), .break(size: 0), .open(.consistent, 0))
99+
after(
100+
node.leftSquare,
101+
tokens: .break(size: 0, offset: 2), .open(.consistent, 0), .break(size: 0),
102+
.open(.consistent, 0)
103+
)
100104
before(node.rightSquare, tokens: .close, .break(size: 0, offset: -2), .close)
101105
super.visit(node)
102106
}
103107

104108
override func visit(_ node: DictionaryExprSyntax) {
109+
after(
110+
node.leftSquare,
111+
tokens: .break(size: 0, offset: 2), .open(.consistent, 0), .break(size: 0),
112+
.open(.consistent, 0)
113+
)
114+
before(node.rightSquare, tokens: .close, .break(size: 0, offset: -2), .close)
115+
super.visit(node)
116+
}
117+
118+
override func visit(_ node: DictionaryTypeSyntax) {
119+
after(node.colon, tokens: .space)
120+
super.visit(node)
121+
}
122+
123+
override func visit(_ node: DictionaryElementSyntax) {
124+
before(node.firstToken, tokens: .open)
125+
after(node.colon, tokens: .break(offset: 2))
126+
if let trailingComma = node.trailingComma {
127+
after(trailingComma, tokens: .close, .break)
128+
} else {
129+
after(node.lastToken, tokens: .close)
130+
}
105131
super.visit(node)
106132
}
107133

@@ -331,10 +357,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
331357
super.visit(node)
332358
}
333359

334-
override func visit(_ node: DictionaryTypeSyntax) {
335-
super.visit(node)
336-
}
337-
338360
override func visit(_ node: TupleTypeSyntax) {
339361
after(node.leftParen, tokens: .open(.consistent, 2), .break(size: 0))
340362
before(node.rightParen, tokens: .break(size: 0), .close)
@@ -830,10 +852,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
830852
super.visit(node)
831853
}
832854

833-
override func visit(_ node: DictionaryElementSyntax) {
834-
super.visit(node)
835-
}
836-
837855
override func visit(_ node: ExpressionPatternSyntax) {
838856
super.visit(node)
839857
}

Diff for: Tests/PrettyPrinterTests/DictionaryDeclTests.swift

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
public class DictionaryDeclTests: PrettyPrintTestCase {
2+
public func testBasicDictionaries() {
3+
let input =
4+
"""
5+
let a = [1: "a", 2: "b", 3: "c"]
6+
let a: [Int: String] = [1: "a", 2: "b", 3: "c"]
7+
let a: [Int: String] = [1: "a", 2: "b", 3: "c", 4: "d"]
8+
let a: [Int: String] = [1: "a", 2: "b", 3: "c", 4: "d", 5: "e", 6: "f", 7: "g"]
9+
"""
10+
11+
let expected =
12+
"""
13+
let a = [1: "a", 2: "b", 3: "c"]
14+
let a: [Int: String] = [1: "a", 2: "b", 3: "c"]
15+
let a: [Int: String] = [
16+
1: "a", 2: "b", 3: "c", 4: "d"
17+
]
18+
let a: [Int: String] = [
19+
1: "a",
20+
2: "b",
21+
3: "c",
22+
4: "d",
23+
5: "e",
24+
6: "f",
25+
7: "g"
26+
]
27+
28+
"""
29+
30+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 50)
31+
}
32+
}

0 commit comments

Comments
 (0)