Skip to content

Commit 82204fb

Browse files
authored
Merge pull request swiftlang#119 from dabelknap/arrays
Add supports for Array declarations
2 parents 6ff34c8 + c3799cb commit 82204fb

File tree

6 files changed

+83
-27
lines changed

6 files changed

+83
-27
lines changed

Sources/PrettyPrint/PrettyPrint.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,18 @@ public class PrettyPrinter {
167167
if !lastBreakConsecutive {
168168
writeSpaces(size)
169169
spaceRemaining -= size
170+
lastBreakValue = 0
170171
}
171172

172173
lastBreak = false
173174
lastBreakOffset = 0
174-
lastBreakValue = 0
175175
}
176176

177+
// Print out the number of spaces according to the size, and adjust spaceRemaining.
178+
case .space(let size):
179+
spaceRemaining -= size
180+
writeSpaces(size)
181+
177182
// Apply N line breaks, calculate the indentation required, and adjust spaceRemaining.
178183
case .newlines(let N, let offset):
179184
let indentValue = indentStack.last ?? 0
@@ -259,6 +264,11 @@ public class PrettyPrinter {
259264
delimIndexStack.append(i)
260265
total += size
261266

267+
// Space tokens have a length equal to its size.
268+
case .space(let size):
269+
lengths.append(size)
270+
total += size
271+
262272
// The length of newlines are equal to the maximum allowed line length. Calculate the length
263273
// of any prior break tokens.
264274
case .newlines:

Sources/PrettyPrint/Token.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ enum Token {
3131
case open(BreakStyle, Int)
3232
case close
3333
case `break`(size: Int, offset: Int)
34+
case space(size: Int)
3435
case newlines(Int, offset: Int)
3536
case comment(Comment, hasTrailingSpace: Bool)
3637

@@ -42,6 +43,8 @@ enum Token {
4243
return Token.newlines(1, offset: offset)
4344
}
4445

46+
static let space = Token.space(size: 1)
47+
4548
static let `break` = Token.break(size: 1, offset: 0)
4649
static func `break`(offset: Int) -> Token {
4750
return Token.break(size: 1, offset: offset)

Sources/PrettyPrint/TokenStreamCreator.swift

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ private final class TokenStreamCreator: SyntaxVisitor {
8686
}
8787

8888
override func visit(_ node: BinaryOperatorExprSyntax) {
89+
before(node.operatorToken, tokens: .break)
90+
after(node.operatorToken, tokens: .break)
8991
super.visit(node)
9092
}
9193

@@ -94,6 +96,8 @@ private final class TokenStreamCreator: SyntaxVisitor {
9496
}
9597

9698
override func visit(_ node: ArrayExprSyntax) {
99+
after(node.leftSquare, tokens: .break(size: 0, offset: 2), .open(.consistent, 0), .break(size: 0), .open(.consistent, 0))
100+
before(node.rightSquare, tokens: .close, .break(size: 0, offset: -2), .close)
97101
super.visit(node)
98102
}
99103

@@ -288,7 +292,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
288292

289293
override func visit(_ node: SwitchStmtSyntax) {
290294
before(node.switchKeyword, tokens: .open(.inconsistent, 7))
291-
after(node.switchKeyword, tokens: .break)
295+
after(node.switchKeyword, tokens: .space)
292296
after(node.expression.lastToken, tokens: .close, .break)
293297
after(node.leftBrace, tokens: .newline, .open(.consistent, 0))
294298
before(node.rightBrace, tokens: .break, .close)
@@ -307,7 +311,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
307311

308312
override func visit(_ node: SwitchCaseLabelSyntax) {
309313
before(node.caseKeyword, tokens: .open(.inconsistent, 5))
310-
after(node.caseKeyword, tokens: .break)
314+
after(node.caseKeyword, tokens: .space)
311315
after(node.colon, tokens: .close)
312316
super.visit(node)
313317
}
@@ -366,7 +370,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
366370

367371
override func visit(_ node: IfStmtSyntax) {
368372
before(node.ifKeyword, tokens: .open(.inconsistent, 3))
369-
after(node.ifKeyword, tokens: .break)
373+
after(node.ifKeyword, tokens: .space)
370374
before(node.body.leftBrace, tokens: .break(offset: -3), .close)
371375

372376
after(node.body.leftBrace, tokens: .newline(offset: 2), .open(.consistent, 0))
@@ -441,9 +445,9 @@ private final class TokenStreamCreator: SyntaxVisitor {
441445

442446
override func visit(_ node: ForInStmtSyntax) {
443447
before(node.forKeyword, tokens: .open(.inconsistent, 4))
444-
after(node.forKeyword, tokens: .break)
448+
after(node.forKeyword, tokens: .space)
445449
before(node.inKeyword, tokens: .break)
446-
after(node.inKeyword, tokens: .break)
450+
after(node.inKeyword, tokens: .space)
447451

448452
if let whereClause = node.whereClause {
449453
before(
@@ -487,8 +491,8 @@ private final class TokenStreamCreator: SyntaxVisitor {
487491

488492
override func visit(_ node: WhileStmtSyntax) {
489493
before(node.firstToken, tokens: .open(.inconsistent, 6))
490-
after(node.labelColon, tokens: .break)
491-
after(node.whileKeyword, tokens: .break)
494+
after(node.labelColon, tokens: .space)
495+
after(node.whileKeyword, tokens: .space)
492496
before(node.body.leftBrace, tokens: .break(offset: -6), .close)
493497
after(node.body.leftBrace, tokens: .break(offset: 2), .open(.consistent, 0))
494498
before(node.body.rightBrace, tokens: .break(offset: -2), .close)
@@ -543,7 +547,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
543547

544548
override func visit(_ node: WhereClauseSyntax) {
545549
before(node.whereKeyword, tokens: .open(.inconsistent, 2))
546-
after(node.whereKeyword, tokens: .break)
550+
after(node.whereKeyword, tokens: .space)
547551
after(node.lastToken, tokens: .close)
548552
super.visit(node)
549553
}
@@ -553,6 +557,12 @@ private final class TokenStreamCreator: SyntaxVisitor {
553557
}
554558

555559
override func visit(_ node: ArrayElementSyntax) {
560+
before(node.firstToken, tokens: .open)
561+
if let trailingComma = node.trailingComma {
562+
after(trailingComma, tokens: .close, .break)
563+
} else {
564+
after(node.lastToken, tokens: .close)
565+
}
556566
super.visit(node)
557567
}
558568

@@ -607,9 +617,8 @@ private final class TokenStreamCreator: SyntaxVisitor {
607617
}
608618

609619
override func visit(_ node: SequenceExprSyntax) {
610-
for index in 0..<(node.elements.count - 1) {
611-
after(node.elements[index].lastToken, tokens: .break)
612-
}
620+
before(node.firstToken, tokens: .open)
621+
after(node.lastToken, tokens: .close)
613622
super.visit(node)
614623
}
615624

@@ -623,7 +632,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
623632
}
624633

625634
override func visit(_ node: VariableDeclSyntax) {
626-
before(node.firstToken, tokens: .open(.inconsistent, 2))
635+
before(node.firstToken, tokens: .open(.inconsistent, 0))
627636
after(node.lastToken, tokens: .close)
628637
after(node.letOrVarKeyword, tokens: .break)
629638
super.visit(node)
@@ -718,7 +727,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
718727
}
719728

720729
override func visit(_ node: TypeAnnotationSyntax) {
721-
after(node.colon, tokens: .break)
730+
after(node.colon, tokens: .break(offset: 2))
722731
super.visit(node)
723732
}
724733

@@ -772,8 +781,8 @@ private final class TokenStreamCreator: SyntaxVisitor {
772781
after(node.repeatKeyword, tokens: .break)
773782
after(node.body.leftBrace, tokens: .break(offset: 2), .open(.consistent, 0))
774783
before(node.body.rightBrace, tokens: .break(offset: -2), .close, .open(.inconsistent, 8))
775-
before(node.whileKeyword, tokens: .break)
776-
after(node.whileKeyword, tokens: .break)
784+
before(node.whileKeyword, tokens: .space)
785+
after(node.whileKeyword, tokens: .space)
777786
after(node.condition.lastToken, tokens: .close)
778787
super.visit(node)
779788
}
@@ -839,7 +848,8 @@ private final class TokenStreamCreator: SyntaxVisitor {
839848

840849
override func visit(_ node: InitializerClauseSyntax) {
841850
before(node.equal, tokens: .break)
842-
after(node.equal, tokens: .break)
851+
after(node.equal, tokens: .break(offset: 2))
852+
843853
super.visit(node)
844854
}
845855

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
public class ArrayDeclTests: PrettyPrintTestCase {
2+
public func testBasicArrays() {
3+
let input =
4+
"""
5+
let a = [1, 2, 3]
6+
let a: [Bool] = [false, true, true, false]
7+
let a: [String] = ["One", "Two", "Three", "Four"]
8+
let a: [String] = ["One", "Two", "Three", "Four", "Five", "Six", "Seven"]
9+
"""
10+
11+
let expected =
12+
"""
13+
let a = [1, 2, 3]
14+
let a: [Bool] = [false, true, true, false]
15+
let a: [String] = [
16+
"One", "Two", "Three", "Four"
17+
]
18+
let a: [String] = [
19+
"One",
20+
"Two",
21+
"Three",
22+
"Four",
23+
"Five",
24+
"Six",
25+
"Seven"
26+
]
27+
28+
"""
29+
30+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 45)
31+
}
32+
}

Tests/PrettyPrinterTests/ForInStmtTests.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public class ForInStmtTests: PrettyPrintTestCase {
2020
let b = i
2121
}
2222
23-
for item in
24-
mylargecontainer {
23+
for item
24+
in mylargecontainer {
2525
let a = 123
2626
let b = item
2727
}
@@ -75,18 +75,18 @@ public class ForInStmtTests: PrettyPrintTestCase {
7575
public func testForLoopFullWrap() {
7676
let input =
7777
"""
78-
for item in aVeryLargeContainterObject where aVeryLargeContainerObject.hasProperty() {
78+
for item in aVeryLargeContainterObject where largeObject.hasProperty() && condition {
7979
let a = 123
8080
let b = 456
8181
}
8282
"""
8383

8484
let expected =
8585
"""
86-
for item in
87-
aVeryLargeContainterObject
88-
where
89-
aVeryLargeContainerObject.hasProperty()
86+
for item
87+
in aVeryLargeContainterObject
88+
where largeObject.hasProperty()
89+
&& condition
9090
{
9191
let a = 123
9292
let b = 456

Tests/PrettyPrinterTests/VariableDeclTests.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ public class VariableDeclarationTests: PrettyPrintTestCase {
1010

1111
let expected =
1212
"""
13-
let x = firstVariable +
13+
let x =
14+
firstVariable +
1415
secondVariable /
1516
thirdVariable +
1617
fourthVariable
17-
let y: Int = anotherVar +
18-
moreVar
18+
let y: Int =
19+
anotherVar + moreVar
1920
let (w, z, s):
2021
(Int, Double, Bool) =
2122
firstTuple + secondTuple

0 commit comments

Comments
 (0)