Skip to content

Commit 71f5bd3

Browse files
committed
Add UnknownDecl to support incomplete source files.
1 parent 8618c66 commit 71f5bd3

File tree

3 files changed

+38
-14
lines changed

3 files changed

+38
-14
lines changed

Sources/SwiftFormatPrettyPrint/TokenStreamCreator.swift

+18-12
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,18 @@ private final class TokenStreamCreator: SyntaxVisitor {
7171
}
7272
}
7373

74+
private func unknownToken(_ node: Syntax) {
75+
if let firstToken = node.firstToken, let before = beforeMap[firstToken] {
76+
tokens += before
77+
}
78+
appendToken(.verbatim(Verbatim(text: node.description)))
79+
if let lastToken = node.lastToken, let afterGroups = afterMap[lastToken] {
80+
for after in afterGroups.reversed() {
81+
tokens += after
82+
}
83+
}
84+
}
85+
7486
override func visitPre(_ node: Syntax) {}
7587

7688
override func visit(_ node: DeclNameArgumentsSyntax) {
@@ -1308,19 +1320,13 @@ private final class TokenStreamCreator: SyntaxVisitor {
13081320
super.visit(node)
13091321
}
13101322

1323+
override func visit(_ node: UnknownDeclSyntax) {
1324+
unknownToken(node)
1325+
// Call to super.visit is not needed here.
1326+
}
1327+
13111328
override func visit(_ node: UnknownStmtSyntax) {
1312-
if let firstToken = node.firstToken, let before = beforeMap[firstToken] {
1313-
tokens += before
1314-
}
1315-
appendToken(.verbatim(Verbatim(text: node.description)))
1316-
if let nextToken = node.nextToken, case .eof = nextToken.tokenKind {
1317-
appendToken(.newline)
1318-
}
1319-
if let lastToken = node.lastToken, let afterGroups = afterMap[lastToken] {
1320-
for after in afterGroups.reversed() {
1321-
tokens += after
1322-
}
1323-
}
1329+
unknownToken(node)
13241330
// Call to super.visit is not needed here.
13251331
}
13261332

Tests/SwiftFormatPrettyPrintTests/AttributeTests.swift

-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ public class AttributeTests: PrettyPrintTestCase {
1515
@available(*, unavailable, renamed: "MyRenamedProtocol")
1616
@available(iOS 10.0, macOS 10.12, *)
1717
18-
19-
2018
"""
2119

2220
// Do not wrap attributes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
public class UnknownDeclTests: PrettyPrintTestCase {
2+
public func testUnknownDecl() {
3+
let input =
4+
"""
5+
struct MyStruct {
6+
let a = 123
7+
if a > 10 {
8+
"""
9+
10+
let expected =
11+
"""
12+
struct MyStruct {
13+
let a = 123
14+
if a > 10 {
15+
16+
"""
17+
18+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 45)
19+
}
20+
}

0 commit comments

Comments
 (0)