Skip to content

Commit 441a8c9

Browse files
authored
Merge pull request #526 from fwcd/expr-buildable-initializer-clause
Make `ExprBuildable` expressible as `InitializerClause`
2 parents 39fa244 + f2c88a6 commit 441a8c9

File tree

6 files changed

+29
-24
lines changed

6 files changed

+29
-24
lines changed

Sources/SwiftSyntaxBuilder/VariableDeclConvenienceInitializers.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ extension VariableDecl {
1717
_ letOrVarKeyword: TokenSyntax,
1818
name: ExpressibleAsIdentifierPattern,
1919
type: ExpressibleAsTypeAnnotation? = nil,
20-
initializer: ExpressibleAsExprBuildable? = nil
20+
initializer: ExpressibleAsInitializerClause? = nil
2121
) {
2222
self.init(letOrVarKeyword: letOrVarKeyword) {
2323
PatternBinding(
2424
pattern: name,
2525
typeAnnotation: type,
26-
initializer: initializer.map { InitializerClause(value: $0) }
26+
initializer: initializer
2727
)
2828
}
2929
}

Sources/SwiftSyntaxBuilder/generated/ExpressibleAsProtocols.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func createMemberDeclListItem() -> MemberDeclListItem {
2727
return MemberDeclListItem(decl: self)
2828
}
2929
}
30-
public protocol ExpressibleAsExprBuildable: ExpressibleAsExprList, ExpressibleAsCodeBlockItem {
30+
public protocol ExpressibleAsExprBuildable: ExpressibleAsExprList, ExpressibleAsCodeBlockItem, ExpressibleAsInitializerClause {
3131
func createExprBuildable() -> ExprBuildable
3232
}
3333
public extension ExpressibleAsExprBuildable {
@@ -39,6 +39,10 @@ func createExprList() -> ExprList {
3939
func createCodeBlockItem() -> CodeBlockItem {
4040
return CodeBlockItem(item: self)
4141
}
42+
/// Conformance to ExpressibleAsInitializerClause
43+
func createInitializerClause() -> InitializerClause {
44+
return InitializerClause(value: self)
45+
}
4246
}
4347
public protocol ExpressibleAsPatternBuildable {
4448
func createPatternBuildable() -> PatternBuildable

Sources/SwiftSyntaxBuilder/gyb_helpers/ExpressibleAsConformances.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@
1515
'DictionaryType': [
1616
'TypeAnnotation'
1717
],
18+
'ExprBuildable': [
19+
'CodeBlockItem',
20+
'InitializerClause'
21+
],
1822
'ExprList': [
1923
'ConditionElement'
2024
],
21-
'ExprBuildable': [
22-
'CodeBlockItem'
23-
],
2425
'MemberDeclList': [
2526
'MemberDeclBlock'
2627
],

Sources/SwiftSyntaxBuilderGeneration/gyb_generated/ExpressibleAsConformances.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ let SYNTAX_BUILDABLE_EXPRESSIBLE_AS_CONFORMANCES: [String: [String]] = [
2929
"DictionaryType": [
3030
"TypeAnnotation",
3131
],
32-
"ExprList": [
33-
"ConditionElement",
34-
],
3532
"ExprBuildable": [
3633
"CodeBlockItem",
34+
"InitializerClause",
35+
],
36+
"ExprList": [
37+
"ConditionElement",
3738
],
3839
"MemberDeclList": [
3940
"MemberDeclBlock",

Tests/SwiftSyntaxBuilderTest/EnumCaseElementTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ final class EnumCaseElementTests: XCTestCase {
1616
EnumCaseDecl {
1717
EnumCaseElement(
1818
identifier: "goodMorning",
19-
rawValue: InitializerClause(value: StringLiteralExpr("Good Morning")))
19+
rawValue: StringLiteralExpr("Good Morning"))
2020
EnumCaseElement(
2121
identifier: "helloWorld",
22-
rawValue: InitializerClause(value: StringLiteralExpr("Hello World")))
22+
rawValue: StringLiteralExpr("Hello World"))
2323
EnumCaseElement(identifier: "hi")
2424
}
2525
}

Tests/SwiftSyntaxBuilderTest/VariableTests.swift

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ final class VariableTests: XCTestCase {
2121
PatternBinding(
2222
pattern: "d",
2323
typeAnnotation: DictionaryType(keyType: "String", valueType: "Int"),
24-
initializer: InitializerClause(value: DictionaryExpr()))
24+
initializer: DictionaryExpr())
2525
}
2626

2727
let syntax = buildable.buildSyntax(format: Format(), leadingTrivia: leadingTrivia)
@@ -30,31 +30,30 @@ final class VariableTests: XCTestCase {
3030

3131
func testVariableDeclWithExplicitTrailingCommas() {
3232
let buildable = VariableDecl(letOrVarKeyword: .let, bindings: [
33-
PatternBinding(pattern: "a", initializer: InitializerClause(
34-
value: ArrayExpr(leftSquare: .`leftSquareBracket`.withTrailingTrivia(.newline)) {
35-
for i in 1...3 {
36-
ArrayElement(
37-
expression: IntegerLiteralExpr(i),
38-
trailingComma: .comma.withoutTrailingTrivia().withTrailingTrivia(.newline))
39-
}
40-
}))
33+
PatternBinding(pattern: "a", initializer: ArrayExpr(leftSquare: .`leftSquareBracket`.withTrailingTrivia(.newline)) {
34+
for i in 1...3 {
35+
ArrayElement(
36+
expression: IntegerLiteralExpr(i),
37+
trailingComma: .comma.withoutTrailingTrivia().withTrailingTrivia(.newline))
38+
}
39+
})
4140
])
4241
let syntax = buildable.buildSyntax(format: Format())
4342
XCTAssertEqual(syntax.description, "let a = [\n1,\n2,\n3,\n]")
4443
}
4544

4645
func testMultiPatternVariableDecl() {
4746
let buildable = VariableDecl(letOrVarKeyword: .let) {
48-
PatternBinding(pattern: "a", initializer: InitializerClause(value: ArrayExpr {
47+
PatternBinding(pattern: "a", initializer: ArrayExpr {
4948
for i in 1...3 {
5049
ArrayElement(expression: IntegerLiteralExpr(i))
5150
}
52-
}))
53-
PatternBinding(pattern: "d", initializer: InitializerClause(value: DictionaryExpr {
51+
})
52+
PatternBinding(pattern: "d", initializer: DictionaryExpr {
5453
for i in 1...3 {
5554
DictionaryElement(keyExpression: StringLiteralExpr("key\(i)"), valueExpression: IntegerLiteralExpr(i))
5655
}
57-
}))
56+
})
5857
PatternBinding(pattern: "i", typeAnnotation: "Int")
5958
PatternBinding(pattern: "s", typeAnnotation: "String")
6059
}

0 commit comments

Comments
 (0)