Skip to content

Commit 90cc4e8

Browse files
committed
Use computed properties in Format
1 parent 6eb1701 commit 90cc4e8

File tree

8 files changed

+45
-39
lines changed

8 files changed

+45
-39
lines changed

Sources/SwiftSyntaxBuilder/generated/BuildableCollectionNodes.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public struct CodeBlockItemList: ExpressibleByArrayLiteral, SyntaxBuildable, Exp
3636
}
3737
public func buildCodeBlockItemList(format: Format, leadingTrivia: Trivia? = nil) -> CodeBlockItemListSyntax {
3838
let result = CodeBlockItemListSyntax(elements.map {
39-
$0.buildCodeBlockItem(format: format, leadingTrivia: Trivia.newline + format._makeIndent())
39+
$0.buildCodeBlockItem(format: format, leadingTrivia: Trivia.newline + format._indentTrivia)
4040
})
4141
if let leadingTrivia = leadingTrivia {
4242
return result.withLeadingTrivia((leadingTrivia + (result.leadingTrivia ?? [])).addingSpacingAfterNewlinesIfNeeded())
@@ -771,7 +771,7 @@ public struct MemberDeclList: ExpressibleByArrayLiteral, SyntaxBuildable, Expres
771771
}
772772
public func buildMemberDeclList(format: Format, leadingTrivia: Trivia? = nil) -> MemberDeclListSyntax {
773773
let result = MemberDeclListSyntax(elements.map {
774-
$0.buildMemberDeclListItem(format: format, leadingTrivia: Trivia.newline + format._makeIndent())
774+
$0.buildMemberDeclListItem(format: format, leadingTrivia: Trivia.newline + format._indentTrivia)
775775
})
776776
if let leadingTrivia = leadingTrivia {
777777
return result.withLeadingTrivia((leadingTrivia + (result.leadingTrivia ?? [])).addingSpacingAfterNewlinesIfNeeded())
@@ -1549,7 +1549,7 @@ public struct SwitchCaseList: ExpressibleByArrayLiteral, SyntaxBuildable, Expres
15491549
}
15501550
public func buildSwitchCaseList(format: Format, leadingTrivia: Trivia? = nil) -> SwitchCaseListSyntax {
15511551
let result = SwitchCaseListSyntax(elements.map {
1552-
$0.buildSyntax(format: format, leadingTrivia: Trivia.newline + format._makeIndent())
1552+
$0.buildSyntax(format: format, leadingTrivia: Trivia.newline + format._indentTrivia)
15531553
})
15541554
if let leadingTrivia = leadingTrivia {
15551555
return result.withLeadingTrivia((leadingTrivia + (result.leadingTrivia ?? [])).addingSpacingAfterNewlinesIfNeeded())

Sources/SwiftSyntaxBuilder/generated/BuildableNodes.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public struct CodeBlock: SyntaxBuildable, ExpressibleAsCodeBlock {
115115
/// - Parameter leadingTrivia: Additional leading trivia to attach, typically used for indentation.
116116
/// - Returns: The built `CodeBlockSyntax`.
117117
func buildCodeBlock(format: Format, leadingTrivia additionalLeadingTrivia: Trivia? = nil) -> CodeBlockSyntax {
118-
let result = CodeBlockSyntax(unexpectedBeforeLeftBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), leftBrace: leftBrace, unexpectedBetweenLeftBraceAndStatements?.buildUnexpectedNodes(format: format, leadingTrivia: nil), statements: statements.buildCodeBlockItemList(format: format._indented(), leadingTrivia: nil), unexpectedBetweenStatementsAndRightBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), rightBrace: rightBrace.withLeadingTrivia(.newline + format._makeIndent() + (rightBrace.leadingTrivia ?? [])))
118+
let result = CodeBlockSyntax(unexpectedBeforeLeftBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), leftBrace: leftBrace, unexpectedBetweenLeftBraceAndStatements?.buildUnexpectedNodes(format: format, leadingTrivia: nil), statements: statements.buildCodeBlockItemList(format: format._indented, leadingTrivia: nil), unexpectedBetweenStatementsAndRightBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), rightBrace: rightBrace.withLeadingTrivia(.newline + format._indentTrivia + (rightBrace.leadingTrivia ?? [])))
119119
let combinedLeadingTrivia = leadingTrivia + (additionalLeadingTrivia ?? []) + (result.leadingTrivia ?? [])
120120
if combinedLeadingTrivia.isEmpty {
121121
return result
@@ -2968,7 +2968,7 @@ public struct ClosureExpr: ExprBuildable, ExpressibleAsClosureExpr {
29682968
/// - Parameter leadingTrivia: Additional leading trivia to attach, typically used for indentation.
29692969
/// - Returns: The built `ClosureExprSyntax`.
29702970
func buildClosureExpr(format: Format, leadingTrivia additionalLeadingTrivia: Trivia? = nil) -> ClosureExprSyntax {
2971-
let result = ClosureExprSyntax(unexpectedBeforeLeftBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), leftBrace: leftBrace, unexpectedBetweenLeftBraceAndSignature?.buildUnexpectedNodes(format: format, leadingTrivia: nil), signature: signature?.buildClosureSignature(format: format, leadingTrivia: nil), unexpectedBetweenSignatureAndStatements?.buildUnexpectedNodes(format: format, leadingTrivia: nil), statements: statements.buildCodeBlockItemList(format: format._indented(), leadingTrivia: nil), unexpectedBetweenStatementsAndRightBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), rightBrace: rightBrace.withLeadingTrivia(.newline + format._makeIndent() + (rightBrace.leadingTrivia ?? [])))
2971+
let result = ClosureExprSyntax(unexpectedBeforeLeftBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), leftBrace: leftBrace, unexpectedBetweenLeftBraceAndSignature?.buildUnexpectedNodes(format: format, leadingTrivia: nil), signature: signature?.buildClosureSignature(format: format, leadingTrivia: nil), unexpectedBetweenSignatureAndStatements?.buildUnexpectedNodes(format: format, leadingTrivia: nil), statements: statements.buildCodeBlockItemList(format: format._indented, leadingTrivia: nil), unexpectedBetweenStatementsAndRightBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), rightBrace: rightBrace.withLeadingTrivia(.newline + format._indentTrivia + (rightBrace.leadingTrivia ?? [])))
29722972
let combinedLeadingTrivia = leadingTrivia + (additionalLeadingTrivia ?? []) + (result.leadingTrivia ?? [])
29732973
if combinedLeadingTrivia.isEmpty {
29742974
return result
@@ -6000,7 +6000,7 @@ public struct MemberDeclBlock: SyntaxBuildable, ExpressibleAsMemberDeclBlock {
60006000
/// - Parameter leadingTrivia: Additional leading trivia to attach, typically used for indentation.
60016001
/// - Returns: The built `MemberDeclBlockSyntax`.
60026002
func buildMemberDeclBlock(format: Format, leadingTrivia additionalLeadingTrivia: Trivia? = nil) -> MemberDeclBlockSyntax {
6003-
let result = MemberDeclBlockSyntax(unexpectedBeforeLeftBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), leftBrace: leftBrace, unexpectedBetweenLeftBraceAndMembers?.buildUnexpectedNodes(format: format, leadingTrivia: nil), members: members.buildMemberDeclList(format: format._indented(), leadingTrivia: nil), unexpectedBetweenMembersAndRightBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), rightBrace: rightBrace.withLeadingTrivia(.newline + format._makeIndent() + (rightBrace.leadingTrivia ?? [])))
6003+
let result = MemberDeclBlockSyntax(unexpectedBeforeLeftBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), leftBrace: leftBrace, unexpectedBetweenLeftBraceAndMembers?.buildUnexpectedNodes(format: format, leadingTrivia: nil), members: members.buildMemberDeclList(format: format._indented, leadingTrivia: nil), unexpectedBetweenMembersAndRightBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), rightBrace: rightBrace.withLeadingTrivia(.newline + format._indentTrivia + (rightBrace.leadingTrivia ?? [])))
60046004
let combinedLeadingTrivia = leadingTrivia + (additionalLeadingTrivia ?? []) + (result.leadingTrivia ?? [])
60056005
if combinedLeadingTrivia.isEmpty {
60066006
return result
@@ -9914,7 +9914,7 @@ public struct SwitchStmt: StmtBuildable, ExpressibleAsSwitchStmt {
99149914
/// - Parameter leadingTrivia: Additional leading trivia to attach, typically used for indentation.
99159915
/// - Returns: The built `SwitchStmtSyntax`.
99169916
func buildSwitchStmt(format: Format, leadingTrivia additionalLeadingTrivia: Trivia? = nil) -> SwitchStmtSyntax {
9917-
let result = SwitchStmtSyntax(unexpectedBeforeSwitchKeyword?.buildUnexpectedNodes(format: format, leadingTrivia: nil), switchKeyword: switchKeyword, unexpectedBetweenSwitchKeywordAndExpression?.buildUnexpectedNodes(format: format, leadingTrivia: nil), expression: expression.buildExpr(format: format, leadingTrivia: nil), unexpectedBetweenExpressionAndLeftBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), leftBrace: leftBrace, unexpectedBetweenLeftBraceAndCases?.buildUnexpectedNodes(format: format, leadingTrivia: nil), cases: cases.buildSwitchCaseList(format: format, leadingTrivia: nil), unexpectedBetweenCasesAndRightBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), rightBrace: rightBrace.withLeadingTrivia(.newline + format._makeIndent() + (rightBrace.leadingTrivia ?? [])))
9917+
let result = SwitchStmtSyntax(unexpectedBeforeSwitchKeyword?.buildUnexpectedNodes(format: format, leadingTrivia: nil), switchKeyword: switchKeyword, unexpectedBetweenSwitchKeywordAndExpression?.buildUnexpectedNodes(format: format, leadingTrivia: nil), expression: expression.buildExpr(format: format, leadingTrivia: nil), unexpectedBetweenExpressionAndLeftBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), leftBrace: leftBrace, unexpectedBetweenLeftBraceAndCases?.buildUnexpectedNodes(format: format, leadingTrivia: nil), cases: cases.buildSwitchCaseList(format: format, leadingTrivia: nil), unexpectedBetweenCasesAndRightBrace?.buildUnexpectedNodes(format: format, leadingTrivia: nil), rightBrace: rightBrace.withLeadingTrivia(.newline + format._indentTrivia + (rightBrace.leadingTrivia ?? [])))
99189918
let combinedLeadingTrivia = leadingTrivia + (additionalLeadingTrivia ?? []) + (result.leadingTrivia ?? [])
99199919
if combinedLeadingTrivia.isEmpty {
99209920
return result
@@ -10989,7 +10989,7 @@ public struct SwitchCase: SyntaxBuildable, ExpressibleAsSwitchCase {
1098910989
/// - Parameter leadingTrivia: Additional leading trivia to attach, typically used for indentation.
1099010990
/// - Returns: The built `SwitchCaseSyntax`.
1099110991
func buildSwitchCase(format: Format, leadingTrivia additionalLeadingTrivia: Trivia? = nil) -> SwitchCaseSyntax {
10992-
let result = SwitchCaseSyntax(unexpectedBeforeUnknownAttr?.buildUnexpectedNodes(format: format, leadingTrivia: nil), unknownAttr: unknownAttr?.buildAttribute(format: format, leadingTrivia: nil), unexpectedBetweenUnknownAttrAndLabel?.buildUnexpectedNodes(format: format, leadingTrivia: nil), label: label.buildSyntax(format: format, leadingTrivia: nil), unexpectedBetweenLabelAndStatements?.buildUnexpectedNodes(format: format, leadingTrivia: nil), statements: statements.buildCodeBlockItemList(format: format._indented(), leadingTrivia: nil))
10992+
let result = SwitchCaseSyntax(unexpectedBeforeUnknownAttr?.buildUnexpectedNodes(format: format, leadingTrivia: nil), unknownAttr: unknownAttr?.buildAttribute(format: format, leadingTrivia: nil), unexpectedBetweenUnknownAttrAndLabel?.buildUnexpectedNodes(format: format, leadingTrivia: nil), label: label.buildSyntax(format: format, leadingTrivia: nil), unexpectedBetweenLabelAndStatements?.buildUnexpectedNodes(format: format, leadingTrivia: nil), statements: statements.buildCodeBlockItemList(format: format._indented, leadingTrivia: nil))
1099310993
let combinedLeadingTrivia = leadingTrivia + (additionalLeadingTrivia ?? []) + (result.leadingTrivia ?? [])
1099410994
if combinedLeadingTrivia.isEmpty {
1099510995
return result

Sources/SwiftSyntaxBuilder/generated/Format.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@ public struct Format {
2222
}
2323
}
2424
extension Format {
25-
public func _indented() -> Format {
25+
public var _indented: Self {
2626
var copy = self
2727
copy.indents += 1
2828
return copy
2929
}
30-
public func _makeIndent() -> Trivia {
31-
return indents == 0 ? .zero : Trivia.spaces(indents * indentWidth)
30+
public var _indentTrivia: Trivia {
31+
indents == 0 ? .zero : .spaces(indents * indentWidth)
32+
}
33+
private var indentedNewline: Trivia {
34+
.newline + _indentTrivia
3235
}
3336
}

Sources/SwiftSyntaxBuilder/gyb_helpers/SyntaxBuildableWrappers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ def generate_expr_build_syntax_node(self, var_name, format_name):
3131
"""
3232
if self.type().is_token():
3333
if self.child.requires_leading_newline:
34-
return var_name + '.withLeadingTrivia(.newline + ' + format_name + '._makeIndent() + (' + var_name + '.leadingTrivia ?? []))'
34+
return var_name + '.withLeadingTrivia(.newline + ' + format_name + '._indentTrivia + (' + var_name + '.leadingTrivia ?? []))'
3535
else:
3636
return var_name
3737
else:
3838
format = format_name
3939
if self.child.is_indented:
40-
format += '._indented()'
40+
format += '._indented'
4141

4242
expr = var_name
4343
if self.type().is_optional:

Sources/generate-swift-syntax-builder/SyntaxBuildableChild.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ extension Child {
4141
SequenceExpr {
4242
MemberAccessExpr(name: "newline")
4343
BinaryOperatorExpr("+")
44-
FunctionCallExpr(MemberAccessExpr(base: formatName, name: "_makeIndent"))
44+
MemberAccessExpr(base: formatName, name: "_indentTrivia")
4545
BinaryOperatorExpr("+")
4646
TupleExpr {
4747
SequenceExpr {
@@ -58,7 +58,7 @@ extension Child {
5858
} else {
5959
var format: ExpressibleAsExprBuildable = formatName
6060
if isIndented {
61-
format = FunctionCallExpr(MemberAccessExpr(base: format, name: "_indented"))
61+
format = MemberAccessExpr(base: format, name: "_indented")
6262
}
6363
let expr = type.optionalChained(expr: varName)
6464
return FunctionCallExpr(MemberAccessExpr(base: expr, name: "build\(type.baseName)")) {

Sources/generate-swift-syntax-builder/Templates/BuildableCollectionNodesFile.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ private func createBuildFunction(node: Node) -> FunctionDecl {
198198
? SequenceExpr {
199199
MemberAccessExpr(base: "Trivia", name: "newline")
200200
BinaryOperatorExpr("+")
201-
FunctionCallExpr(MemberAccessExpr(base: "format", name: "_makeIndent"))
201+
MemberAccessExpr(base: "format", name: "_indentTrivia")
202202
}
203203
: NilLiteralExpr()
204204
)

Sources/generate-swift-syntax-builder/Templates/FormatFile.swift

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,10 @@ let formatFile = SourceFile {
5858
}
5959

6060
ExtensionDecl(extendedType: "Format") {
61-
FunctionDecl(
61+
VariableDecl(
6262
modifiers: [TokenSyntax.public],
63-
identifier: .identifier("_indented"),
64-
signature: FunctionSignature(
65-
input: ParameterClause(),
66-
output: "Format"
67-
)
63+
name: "_indented",
64+
type: "Self"
6865
) {
6966
VariableDecl(.var, name: "copy", initializer: "self")
7067
SequenceExpr {
@@ -75,32 +72,38 @@ let formatFile = SourceFile {
7572
ReturnStmt(expression: "copy")
7673
}
7774

78-
FunctionDecl(
75+
VariableDecl(
7976
modifiers: [TokenSyntax.public],
80-
identifier: .identifier("_makeIndent"),
81-
signature: FunctionSignature(
82-
input: ParameterClause(),
83-
output: "Trivia"
84-
)
77+
name: "_indentTrivia",
78+
type: "Trivia"
8579
) {
86-
// TODO: Use sugared TernaryExpr once https://github.com/apple/swift-syntax/pull/610 is merged
87-
ReturnStmt(expression: TernaryExpr(
88-
conditionExpression: SequenceExpr {
80+
TernaryExpr(
81+
if: SequenceExpr {
8982
"indents"
9083
BinaryOperatorExpr("==")
9184
IntegerLiteralExpr(0)
9285
},
93-
questionMark: .infixQuestionMark.withLeadingTrivia(.space).withTrailingTrivia(.space),
94-
firstChoice: MemberAccessExpr(name: "zero"),
95-
colonMark: .colon.withLeadingTrivia(.space).withTrailingTrivia(.space),
96-
secondChoice: FunctionCallExpr(MemberAccessExpr(base: "Trivia", name: "spaces")) {
86+
then: MemberAccessExpr(name: "zero"),
87+
else: FunctionCallExpr(MemberAccessExpr(name: "spaces")) {
9788
TupleExprElement(expression: SequenceExpr {
9889
"indents"
9990
BinaryOperatorExpr("*")
10091
"indentWidth"
10192
})
10293
}
103-
))
94+
)
95+
}
96+
97+
VariableDecl(
98+
modifiers: [TokenSyntax.private],
99+
name: "indentedNewline",
100+
type: "Trivia"
101+
) {
102+
SequenceExpr {
103+
MemberAccessExpr(name: "newline")
104+
BinaryOperatorExpr("+")
105+
"_indentTrivia"
106+
}
104107
}
105108
}
106109
}

Tests/SwiftSyntaxBuilderTest/FormatTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ final class FormatTests: XCTestCase {
77
for width in 1 ... 4 {
88
let format = Format(indentWidth: width)
99

10-
XCTAssertEqual(format._makeIndent(), .zero)
11-
XCTAssertEqual(format._indented()._makeIndent(), .spaces(width))
12-
XCTAssertEqual(format._indented()._indented()._makeIndent(), .spaces(width * 2))
10+
XCTAssertEqual(format._indentTrivia, .zero)
11+
XCTAssertEqual(format._indented._indentTrivia, .spaces(width))
12+
XCTAssertEqual(format._indented._indented._indentTrivia, .spaces(width * 2))
1313
}
1414
}
1515
}

0 commit comments

Comments
 (0)