Skip to content

Commit a7e3a15

Browse files
authored
Merge pull request swiftlang#644 from fwcd/fwcd/var-decl-attributes
Add attributes to VariableDecl convenience initializers
2 parents 6c2eabe + 72f2e39 commit a7e3a15

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

Sources/SwiftSyntaxBuilder/VariableDeclConvenienceInitializers.swift

+16-4
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,19 @@ extension VariableDecl {
1616
/// Creates an optionally initialized property.
1717
public init(
1818
leadingTrivia: Trivia = [],
19-
modifiers: ModifierList? = nil,
19+
attributes: ExpressibleAsAttributeList? = nil,
20+
modifiers: ExpressibleAsModifierList? = nil,
2021
_ letOrVarKeyword: TokenSyntax,
2122
name: ExpressibleAsIdentifierPattern,
2223
type: ExpressibleAsTypeAnnotation? = nil,
2324
initializer: ExpressibleAsInitializerClause? = nil
2425
) {
25-
self.init(leadingTrivia: leadingTrivia, modifiers: modifiers, letOrVarKeyword: letOrVarKeyword) {
26+
self.init(
27+
leadingTrivia: leadingTrivia,
28+
attributes: attributes,
29+
modifiers: modifiers,
30+
letOrVarKeyword: attributes != nil ? letOrVarKeyword.withLeadingTrivia(.space) : letOrVarKeyword
31+
) {
2632
PatternBinding(
2733
pattern: name,
2834
typeAnnotation: type,
@@ -34,12 +40,18 @@ extension VariableDecl {
3440
/// Creates a computed property with the given accessor.
3541
public init(
3642
leadingTrivia: Trivia = [],
37-
modifiers: ModifierList? = nil,
43+
attributes: ExpressibleAsAttributeList? = nil,
44+
modifiers: ExpressibleAsModifierList? = nil,
3845
name: ExpressibleAsIdentifierPattern,
3946
type: ExpressibleAsTypeAnnotation,
4047
@CodeBlockItemListBuilder accessor: () -> ExpressibleAsCodeBlockItemList
4148
) {
42-
self.init(leadingTrivia: leadingTrivia, modifiers: modifiers, letOrVarKeyword: .var) {
49+
self.init(
50+
leadingTrivia: leadingTrivia,
51+
attributes: attributes,
52+
modifiers: modifiers,
53+
letOrVarKeyword: .varKeyword(leadingTrivia: attributes != nil ? .space : .zero)
54+
) {
4355
PatternBinding(
4456
pattern: name,
4557
typeAnnotation: type,

Tests/SwiftSyntaxBuilderTest/VariableTests.swift

+27
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,31 @@ final class VariableTests: XCTestCase {
105105
}
106106
""")
107107
}
108+
109+
func testAttributedVariables() {
110+
let attributedVar = VariableDecl(
111+
attributes: CustomAttribute(attributeName: "Test", argumentList: nil),
112+
.var,
113+
name: "x",
114+
type: "Int"
115+
)
116+
117+
XCTAssertEqual(attributedVar.buildSyntax(format: Format()).description, """
118+
@Test var x: Int
119+
""")
120+
121+
let attributedProperty = VariableDecl(
122+
attributes: CustomAttribute(attributeName: "Test", argumentList: nil),
123+
name: "y",
124+
type: "String"
125+
) {
126+
StringLiteralExpr("Hello world!")
127+
}
128+
129+
XCTAssertEqual(attributedProperty.buildSyntax(format: Format()).description, """
130+
@Test var y: String {
131+
"Hello world!"
132+
}
133+
""")
134+
}
108135
}

0 commit comments

Comments
 (0)