Skip to content

Commit f371d47

Browse files
authored
Merge pull request #316 from kimdv/kimdv/clean-up
Clean code and add some tests
2 parents 9219b07 + ade4da4 commit f371d47

14 files changed

+123
-81
lines changed

Sources/SwiftSyntaxBuilder/IdentifierPatternConvenienceInitializers.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
extension IdentifierPattern {
14-
init(_ identifier: String) {
15-
self.init(identifier: .identifier(identifier))
16-
}
14+
public init(_ identifier: String) {
15+
self.init(identifier: .identifier(identifier))
16+
}
1717
}
1818

1919
extension IdentifierPattern: ExpressibleByStringLiteral {

Sources/SwiftSyntaxBuilder/VariableDeclConvenienceInitializers.swift

+6-6
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
import SwiftSyntax
1414

1515
extension VariableDecl {
16-
public init(_ letOrVarKeyword: TokenSyntax, name: String, type: String) {
17-
self.init(letOrVarKeyword: letOrVarKeyword, bindingsBuilder: {
18-
PatternBinding(pattern: IdentifierPattern(name),
19-
typeAnnotation: TypeAnnotation(type))
20-
})
21-
}
16+
public init(_ letOrVarKeyword: TokenSyntax, name: String, type: String) {
17+
self.init(letOrVarKeyword: letOrVarKeyword, bindingsBuilder: {
18+
PatternBinding(pattern: IdentifierPattern(name),
19+
typeAnnotation: TypeAnnotation(type))
20+
})
21+
}
2222
}

Tests/SwiftSyntaxBuilderTest/BooleanLiteralTests.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class BooleanLiteralTests: XCTestCase {
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,85 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class ExpressibleBuildablesTests: XCTestCase {
7-
func testExpressibleAsMemberDeclListItem() {
8-
let myStruct = StructDecl(identifier: "MyStruct", members: MemberDeclBlock(membersBuilder: {
9-
VariableDecl(.var, name: "myFirstVar", type: "Int")
6+
func testExpressibleAsMemberDeclListItem() {
7+
let myStruct = StructDecl(identifier: "MyStruct", members: MemberDeclBlock(membersBuilder: {
8+
VariableDecl(.var, name: "myFirstVar", type: "Int")
109

11-
// We use `MemberDeclListItem` to ensure and show we can combine it with `ExpressibleAsMemberDeclListItem`
12-
MemberDeclListItem(decl: VariableDecl(letOrVarKeyword: .let, bindingsBuilder: {
13-
PatternBinding(pattern: IdentifierPattern(identifier: .identifier("myOtherLet")),
14-
typeAnnotation: TypeAnnotation(type: SimpleTypeIdentifier("String")))
15-
})
16-
)
10+
// We use `MemberDeclListItem` to ensure and show we can combine it with `ExpressibleAsMemberDeclListItem`
11+
MemberDeclListItem(decl: VariableDecl(letOrVarKeyword: .let, bindingsBuilder: {
12+
PatternBinding(pattern: IdentifierPattern(identifier: .identifier("myOtherLet")),
13+
typeAnnotation: TypeAnnotation(type: SimpleTypeIdentifier("String")))
14+
})
15+
)
1716

18-
StructDecl(identifier: "InnerStruct", members: MemberDeclBlock())
19-
})
20-
)
17+
StructDecl(identifier: "InnerStruct", members: MemberDeclBlock())
18+
})
19+
)
2120

22-
let syntax = myStruct.buildSyntax(format: Format())
23-
XCTAssertEqual(syntax.description, """
24-
struct MyStruct{
25-
var myFirstVar: Int
26-
let myOtherLet: String
27-
struct InnerStruct{
28-
}
21+
let syntax = myStruct.buildSyntax(format: Format())
22+
XCTAssertEqual(syntax.description, """
23+
struct MyStruct{
24+
var myFirstVar: Int
25+
let myOtherLet: String
26+
struct InnerStruct{
2927
}
30-
""")
3128
}
29+
""")
30+
}
3231

33-
func testExpressibleAsCodeBlockItem() {
34-
let myCodeBlock = SourceFile(eofToken: .eof) {
35-
StructDecl(identifier: "MyStruct1", members: MemberDeclBlock())
32+
func testExpressibleAsCodeBlockItem() {
33+
let myCodeBlock = SourceFile(eofToken: .eof) {
34+
StructDecl(identifier: "MyStruct1", members: MemberDeclBlock())
3635

37-
StructDecl(identifier: "MyStruct2", members: MemberDeclBlock())
38-
}
36+
StructDecl(identifier: "MyStruct2", members: MemberDeclBlock())
37+
}
3938

40-
let syntax = myCodeBlock.buildSyntax(format: Format())
41-
XCTAssertEqual(syntax.description, """
39+
let syntax = myCodeBlock.buildSyntax(format: Format())
40+
XCTAssertEqual(syntax.description, """
4241
43-
struct MyStruct1{
44-
}
45-
struct MyStruct2{
46-
}
47-
""")
42+
struct MyStruct1{
4843
}
44+
struct MyStruct2{
45+
}
46+
""")
47+
}
4948

50-
func testExpressibleAsSwitchStmt() {
51-
let versions = [("version_1", "1.0.0"), ("version_2", "2.0.0"), ("version_3", "3.0.0"), ("version_3_1", "3.1.0")]
52-
let expression = IdentifierExpr(identifier: SyntaxFactory.makeIdentifier("version"))
49+
func testExpressibleAsSwitchStmt() {
50+
let versions = [("version_1", "1.0.0"), ("version_2", "2.0.0"), ("version_3", "3.0.0"), ("version_3_1", "3.1.0")]
51+
let expression = IdentifierExpr(identifier: SyntaxFactory.makeIdentifier("version"))
5352

54-
let switchStmt = SwitchStmt(labelName: nil,
55-
expression: expression,
56-
leftBrace: .leftBrace.withTrailingTrivia(.newlines(1)),
57-
rightBrace: .rightBrace.withLeadingTrivia(.newlines(1)),
58-
casesBuilder: {
59-
for (version, semVer) in versions {
60-
SwitchCase(label: SwitchCaseLabel(caseItemsBuilder: {
61-
CaseItem(pattern: EnumCasePattern(caseName: version))
62-
}), statementsBuilder: {
63-
ReturnStmt(expression: StringLiteralExpr(semVer, closeQuote: .stringQuote.withTrailingTrivia(.newlines(1))))
64-
})
65-
}
53+
let switchStmt = SwitchStmt(labelName: nil,
54+
expression: expression,
55+
leftBrace: .leftBrace.withTrailingTrivia(.newlines(1)),
56+
rightBrace: .rightBrace.withLeadingTrivia(.newlines(1)),
57+
casesBuilder: {
58+
for (version, semVer) in versions {
59+
SwitchCase(label: SwitchCaseLabel(caseItemsBuilder: {
60+
CaseItem(pattern: EnumCasePattern(caseName: version))
61+
}), statementsBuilder: {
62+
ReturnStmt(expression: StringLiteralExpr(semVer, closeQuote: .stringQuote.withTrailingTrivia(.newlines(1))))
6663
})
64+
}
65+
})
6766

68-
let syntax = switchStmt.buildSyntax(format: Format())
67+
let syntax = switchStmt.buildSyntax(format: Format())
6968

70-
// The generated code contains whitespace after `:`.
71-
// So replacing whitespace with `␣`.
72-
XCTAssertEqual(syntax.description.replacingOccurrences(of: " ", with: ""), """
73-
switch␣version{
74-
case␣.version_1:␣
75-
return␣"1.0.0"
76-
case␣.version_2:␣
77-
return␣"2.0.0"
78-
case␣.version_3:␣
79-
return␣"3.0.0"
80-
case␣.version_3_1:␣
81-
return␣"3.1.0"
69+
// The generated code contains whitespace after `:`.
70+
// So replacing whitespace with `␣`.
71+
XCTAssertEqual(syntax.description.replacingOccurrences(of: " ", with: ""), """
72+
switch␣version{
73+
case␣.version_1:␣
74+
return␣"1.0.0"
75+
case␣.version_2:␣
76+
return␣"2.0.0"
77+
case␣.version_3:␣
78+
return␣"3.0.0"
79+
case␣.version_3_1:␣
80+
return␣"3.1.0"
8281
83-
}
84-
""")
8582
}
83+
""")
84+
}
8685
}

Tests/SwiftSyntaxBuilderTest/FloatLiteralTests.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class FloatLiteralTests: XCTestCase {

Tests/SwiftSyntaxBuilderTest/FormatTests.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class FormatTests: XCTestCase {

Tests/SwiftSyntaxBuilderTest/IdentifierExprTests.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class IdentifierExprTests: XCTestCase {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import XCTest
2+
import SwiftSyntax
3+
import SwiftSyntaxBuilder
4+
5+
final class IdentifierPatternTests: XCTestCase {
6+
func testStringLiteral() {
7+
let leadingTrivia = Trivia.garbageText("")
8+
9+
let testCases: [UInt: (IdentifierPattern, String)] = [
10+
#line: (IdentifierPattern(identifier: .identifier("Test")), "␣Test"),
11+
#line: (IdentifierPattern(stringLiteral: "Test"), "␣Test"),
12+
#line: (IdentifierPattern("Test"), "␣Test"),
13+
#line: ("Test", "␣Test")
14+
]
15+
16+
for (line, testCase) in testCases {
17+
let (builder, expected) = testCase
18+
let syntax = builder.buildSyntax(format: Format(), leadingTrivia: leadingTrivia)
19+
20+
var text = ""
21+
syntax.write(to: &text)
22+
23+
XCTAssertEqual(text, expected, line: line)
24+
}
25+
}
26+
}

Tests/SwiftSyntaxBuilderTest/ImportTests.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class ImportTests: XCTestCase {

Tests/SwiftSyntaxBuilderTest/IntegerLiteralTests.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class IntegerLiteralTests: XCTestCase {

Tests/SwiftSyntaxBuilderTest/StringLiteralTests.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class StringLiteralTests: XCTestCase {

Tests/SwiftSyntaxBuilderTest/StructTests.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class StructTests: XCTestCase {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import XCTest
2+
import SwiftSyntax
3+
import SwiftSyntaxBuilder
4+
5+
final class TypeAnnotationTests: XCTestCase {
6+
func testStringLiteral() {
7+
let leadingTrivia = Trivia.garbageText("")
8+
9+
let testCases: [UInt: (TypeAnnotation, String)] = [
10+
#line: (TypeAnnotation(type: SimpleTypeIdentifier("Test")), "␣: Test"),
11+
#line: (TypeAnnotation(stringLiteral: "Test"), "␣: Test"),
12+
#line: (TypeAnnotation("Test"), "␣: Test"),
13+
#line: ("Test", "␣: Test")
14+
]
15+
16+
for (line, testCase) in testCases {
17+
let (builder, expected) = testCase
18+
let syntax = builder.buildSyntax(format: Format(), leadingTrivia: leadingTrivia)
19+
20+
var text = ""
21+
syntax.write(to: &text)
22+
23+
XCTAssertEqual(text, expected, line: line)
24+
}
25+
}
26+
}

Tests/SwiftSyntaxBuilderTest/VariableTests.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import XCTest
22
import SwiftSyntax
3-
43
import SwiftSyntaxBuilder
54

65
final class VariableTests: XCTestCase {

0 commit comments

Comments
 (0)