Skip to content

Commit fe98838

Browse files
authored
Merge pull request #523 from fwcd/variabledecl-convenience-init-initializer
Support optional initializer expression in `VariableDecl` convenience inititializer
2 parents d9af173 + a35107d commit fe98838

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

Sources/SwiftSyntaxBuilder/VariableDeclConvenienceInitializers.swift

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,18 @@
1313
import SwiftSyntax
1414

1515
extension VariableDecl {
16-
public init(_ letOrVarKeyword: TokenSyntax,
17-
name: ExpressibleAsIdentifierPattern,
18-
type: ExpressibleAsTypeAnnotation) {
16+
public init(
17+
_ letOrVarKeyword: TokenSyntax,
18+
name: ExpressibleAsIdentifierPattern,
19+
type: ExpressibleAsTypeAnnotation? = nil,
20+
initializer: ExpressibleAsExprBuildable? = nil
21+
) {
1922
self.init(letOrVarKeyword: letOrVarKeyword) {
20-
PatternBinding(pattern: name.createIdentifierPattern(),
21-
typeAnnotation: type.createTypeAnnotation())
23+
PatternBinding(
24+
pattern: name,
25+
typeAnnotation: type,
26+
initializer: initializer.map { InitializerClause(value: $0) }
27+
)
2228
}
2329
}
2430
}

Tests/SwiftSyntaxBuilderTest/VariableTests.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,16 @@ final class VariableTests: XCTestCase {
7474
func testConvenienceInitializer() {
7575
let leadingTrivia = Trivia.garbageText("")
7676

77-
let testCases: [UInt: (TokenSyntax, String, String, String)] = [
78-
#line: (.let, "foo", "Int", "␣let foo: Int"),
79-
#line: (.var, "bar", "Baz", "␣var bar: Baz")
77+
let testCases: [UInt: (TokenSyntax, String, String?, ExpressibleAsExprBuildable?, String)] = [
78+
#line: (.let, "foo", "Int", nil, "␣let foo: Int"),
79+
#line: (.var, "bar", "Baz", nil, "␣var bar: Baz"),
80+
#line: (.var, "typed", "String", StringLiteralExpr("abc"), #"␣var typed: String = "abc""#),
81+
#line: (.let, "inferred", nil, "typed", "␣let inferred = typed"),
8082
]
8183

8284
for (line, testCase) in testCases {
83-
let (keyword, name, type, expected) = testCase
84-
let builder = VariableDecl(keyword, name: name, type: type)
85+
let (keyword, name, type, initializer, expected) = testCase
86+
let builder = VariableDecl(keyword, name: name, type: type, initializer: initializer)
8587
let syntax = builder.buildSyntax(format: Format(), leadingTrivia: leadingTrivia)
8688

8789
XCTAssertEqual(syntax.description, expected, line: line)

0 commit comments

Comments
 (0)