Skip to content

Commit bd4e1da

Browse files
committed
Add support for tries, and do-catch blocks.
1 parent decd0e2 commit bd4e1da

File tree

2 files changed

+129
-4
lines changed

2 files changed

+129
-4
lines changed

Sources/PrettyPrint/TokenStreamCreator.swift

+25-4
Original file line numberDiff line numberDiff line change
@@ -495,10 +495,31 @@ private final class TokenStreamCreator: SyntaxVisitor {
495495
}
496496

497497
override func visit(_ node: AsExprSyntax) {
498+
before(node.asTok, tokens: .space)
499+
after(node.asTok, tokens: .break)
498500
super.visit(node)
499501
}
500502

501503
override func visit(_ node: DoStmtSyntax) {
504+
after(node.doKeyword, tokens: .space)
505+
after(node.body.leftBrace, tokens: .newline(offset: 2), .open(.consistent, 0))
506+
before(node.body.rightBrace, tokens: .break(offset: -2), .close)
507+
super.visit(node)
508+
}
509+
510+
override func visit(_ node: CatchClauseSyntax) {
511+
before(node.catchKeyword, tokens: .space)
512+
before(node.pattern?.firstToken, tokens: .break)
513+
514+
if let whereClause = node.whereClause {
515+
before(whereClause.firstToken, tokens: .break(offset: 2), .open(.consistent, 0))
516+
before(node.body.leftBrace, tokens: .break(offset: -2), .close)
517+
} else {
518+
before(node.body.leftBrace, tokens: .break)
519+
}
520+
521+
after(node.body.leftBrace, tokens: .newline(offset: 2), .open(.consistent, 0))
522+
before(node.body.rightBrace, tokens: .break(offset: -2), .close)
502523
super.visit(node)
503524
}
504525

@@ -521,10 +542,13 @@ private final class TokenStreamCreator: SyntaxVisitor {
521542
}
522543

523544
override func visit(_ node: IsExprSyntax) {
545+
before(node.isTok, tokens: .space)
546+
after(node.isTok, tokens: .break)
524547
super.visit(node)
525548
}
526549

527550
override func visit(_ node: TryExprSyntax) {
551+
before(node.expression.firstToken, tokens: .break)
528552
super.visit(node)
529553
}
530554

@@ -702,10 +726,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
702726
super.visit(node)
703727
}
704728

705-
override func visit(_ node: CatchClauseSyntax) {
706-
super.visit(node)
707-
}
708-
709729
override func visit(_ node: DotSelfExprSyntax) {
710730
super.visit(node)
711731
}
@@ -868,6 +888,7 @@ private final class TokenStreamCreator: SyntaxVisitor {
868888
}
869889

870890
override func visit(_ node: IsTypePatternSyntax) {
891+
after(node.isKeyword, tokens: .break)
871892
super.visit(node)
872893
}
873894

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
public class TryCatchTests: PrettyPrintTestCase {
2+
public func testBasicTries() {
3+
let input =
4+
"""
5+
let a = try possiblyFailingFunc()
6+
let a = try? possiblyFailingFunc()
7+
let a = try! possiblyFailingFunc()
8+
"""
9+
10+
let expected =
11+
"""
12+
let a = try possiblyFailingFunc()
13+
let a = try? possiblyFailingFunc()
14+
let a = try! possiblyFailingFunc()
15+
16+
"""
17+
18+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 40)
19+
}
20+
21+
public func testDoTryCatch() {
22+
let input =
23+
"""
24+
do {
25+
try thisFuncMightFail()
26+
} catch error1 {
27+
print("Nope")
28+
}
29+
do {
30+
try thisFuncMightFail()
31+
} catch error1 {
32+
print("Nope")
33+
} catch error2(let someVar) {
34+
print(someVar)
35+
print("Don't do it!")
36+
}
37+
do {
38+
try thisFuncMightFail()
39+
} catch is ABadError{
40+
print("Nope")
41+
}
42+
"""
43+
44+
let expected =
45+
"""
46+
do {
47+
try thisFuncMightFail()
48+
} catch error1 {
49+
print("Nope")
50+
}
51+
do {
52+
try thisFuncMightFail()
53+
} catch error1 {
54+
print("Nope")
55+
} catch error2(let someVar) {
56+
print(someVar)
57+
print("Don't do it!")
58+
}
59+
do {
60+
try thisFuncMightFail()
61+
} catch is ABadError {
62+
print("Nope")
63+
}
64+
65+
"""
66+
67+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 40)
68+
}
69+
70+
public func testCatchWhere() {
71+
let input =
72+
"""
73+
do {
74+
try thisFuncMightFail()
75+
} catch error1 where error1 is ErrorType {
76+
print("Nope")
77+
}
78+
do {
79+
try thisFuncMightFail()
80+
} catch error1 where error1 is LongerErrorType {
81+
print("Nope")
82+
}
83+
"""
84+
85+
let expected =
86+
"""
87+
do {
88+
try thisFuncMightFail()
89+
} catch error1 where error1 is ErrorType {
90+
print("Nope")
91+
}
92+
do {
93+
try thisFuncMightFail()
94+
} catch error1
95+
where error1 is LongerErrorType
96+
{
97+
print("Nope")
98+
}
99+
100+
"""
101+
102+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 45)
103+
}
104+
}

0 commit comments

Comments
 (0)