Skip to content

Commit eac08a4

Browse files
committed
Add check for a closure
1 parent d5b3c15 commit eac08a4

File tree

1 file changed

+29
-6
lines changed

1 file changed

+29
-6
lines changed

Sources/SwiftRefactor/ConvertStoredPropertyToComputed.swift

+29-6
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,42 @@ public struct ConvertStoredPropertyToComputed: SyntaxRefactoringProvider {
2222
return nil
2323
}
2424

25-
let body = CodeBlockItemSyntax(
26-
item: .expr(initializer.value)
27-
)
25+
let codeBlockSyntax: CodeBlockItemListSyntax
26+
27+
if let functionExpression = initializer.value.as(FunctionCallExprSyntax.self),
28+
let closureExpression = functionExpression.calledExpression.as(ClosureExprSyntax.self)
29+
{
30+
let statements = closureExpression.statements
31+
codeBlockSyntax =
32+
statements
33+
.with(
34+
\.leadingTrivia,
35+
functionExpression.leadingTrivia + closureExpression.leftBrace.leadingTrivia
36+
+ closureExpression.leftBrace.trailingTrivia + statements.leadingTrivia
37+
)
38+
.with(
39+
\.trailingTrivia,
40+
statements.trailingTrivia + closureExpression.trailingTrivia + closureExpression.rightBrace.leadingTrivia
41+
+ closureExpression.rightBrace.trailingTrivia + functionExpression.trailingTrivia
42+
)
43+
} else {
44+
var body = CodeBlockItemListSyntax([
45+
CodeBlockItemSyntax(
46+
item: .expr(initializer.value)
47+
)
48+
])
49+
body.leadingTrivia = initializer.equal.trailingTrivia + body.leadingTrivia
50+
body.trailingTrivia += .space
51+
codeBlockSyntax = body
52+
}
2853

2954
let newBinding =
3055
binding
3156
.with(\.initializer, nil)
3257
.with(
3358
\.accessorBlock,
3459
AccessorBlockSyntax(
35-
leftBrace: .leftBraceToken(trailingTrivia: initializer.equal.trailingTrivia),
36-
accessors: .getter(CodeBlockItemListSyntax([body])),
37-
rightBrace: .rightBraceToken(leadingTrivia: .space)
60+
accessors: .getter(codeBlockSyntax)
3861
)
3962
)
4063

0 commit comments

Comments
 (0)