Skip to content

Commit bb4a191

Browse files
authored
Merge pull request swiftlang#166 from dabelknap/deinit
Add support for deinitializers
2 parents 3b09de6 + 523d1b0 commit bb4a191

File tree

2 files changed

+97
-4
lines changed

2 files changed

+97
-4
lines changed

Sources/SwiftFormatPrettyPrint/TokenStreamCreator.swift

+18-4
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,24 @@ private final class TokenStreamCreator: SyntaxVisitor {
836836
super.visit(node)
837837
}
838838

839+
override func visit(_ node: DeinitializerDeclSyntax) {
840+
before(node.firstToken, tokens: .open(.inconsistent, 0))
841+
842+
if let attributes = node.attributes {
843+
before(node.firstToken, tokens: .space(size: 0), .open(.consistent, 0))
844+
after(attributes.lastToken, tokens: .open)
845+
} else {
846+
before(node.firstToken, tokens: .space(size: 0), .open(.consistent, 0), .open)
847+
}
848+
849+
before(node.body.leftBrace, tokens: .break)
850+
after(node.body.leftBrace, tokens: .close, .close, .break(offset: 2), .open(.consistent, 0))
851+
before(node.body.rightBrace, tokens: .break(offset: -2), .close)
852+
853+
after(node.lastToken, tokens: .close)
854+
super.visit(node)
855+
}
856+
839857
override func visit(_ node: SubscriptDeclSyntax) {
840858
before(node.firstToken, tokens: .open(.inconsistent, 0))
841859

@@ -1121,10 +1139,6 @@ private final class TokenStreamCreator: SyntaxVisitor {
11211139
super.visit(node)
11221140
}
11231141

1124-
override func visit(_ node: DeinitializerDeclSyntax) {
1125-
super.visit(node)
1126-
}
1127-
11281142
override func visit(_ node: ExpressionPatternSyntax) {
11291143
super.visit(node)
11301144
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
public class DeinitializerDeclTests: PrettyPrintTestCase {
2+
public func testBasicDeinitializerDeclarations() {
3+
let input =
4+
"""
5+
struct Struct {
6+
deinit {
7+
print("Hello World")
8+
let a = 23
9+
}
10+
deinit {
11+
let a = 23
12+
}
13+
deinit { let a = "AAAA BBBB CCCC DDDD EEEE FFFF" }
14+
}
15+
"""
16+
17+
let expected =
18+
"""
19+
struct Struct {
20+
deinit {
21+
print("Hello World")
22+
let a = 23
23+
}
24+
deinit { let a = 23 }
25+
deinit {
26+
let a = "AAAA BBBB CCCC DDDD EEEE FFFF"
27+
}
28+
}
29+
30+
"""
31+
32+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 50)
33+
}
34+
35+
public func testDeinitializerAttributes() {
36+
let input =
37+
"""
38+
struct Struct {
39+
@objc deinit {
40+
let a = 123
41+
let b = "abc"
42+
}
43+
@objc @inlinable deinit {
44+
let a = 123
45+
let b = "abc"
46+
}
47+
@objc @available(swift 4.0) deinit {
48+
let a = 123
49+
let b = "abc"
50+
}
51+
}
52+
"""
53+
54+
let expected =
55+
"""
56+
struct Struct {
57+
@objc deinit {
58+
let a = 123
59+
let b = "abc"
60+
}
61+
@objc
62+
@inlinable
63+
deinit {
64+
let a = 123
65+
let b = "abc"
66+
}
67+
@objc
68+
@available(swift 4.0)
69+
deinit {
70+
let a = 123
71+
let b = "abc"
72+
}
73+
}
74+
75+
"""
76+
77+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 25)
78+
}
79+
}

0 commit comments

Comments
 (0)