Skip to content

Commit 4b07603

Browse files
committed
changed where to closure
1 parent 886cc7e commit 4b07603

4 files changed

Lines changed: 25 additions & 17 deletions

File tree

Examples/Completed/for_loops/dsl.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,14 @@ Group {
3939
}
4040
Variable(.let, name: "numbers", equals: Literal.array([Literal.integer(1), Literal.integer(2), Literal.integer(3), Literal.integer(4), Literal.integer(5), Literal.integer(6), Literal.integer(7), Literal.integer(8), Literal.integer(9), Literal.integer(10)]))
4141

42-
For(VariableExp("number"), in: VariableExp("numbers"), where: Infix("==") {
43-
Infix("%") {
44-
VariableExp("number")
45-
Literal.integer(2)
42+
For(VariableExp("number"), in: VariableExp("numbers"), where: {
43+
Infix("==") {
44+
Infix("%") {
45+
VariableExp("number")
46+
Literal.integer(2)
47+
}
48+
Literal.integer(0)
4649
}
47-
Literal.integer(0)
4850
}, then: {
4951
Call("print") {
5052
ParameterExp(unlabeled: "\"Even number: \\(number)\"")

Sources/SyntaxKit/For.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,18 @@ public struct For: CodeBlock {
4040
/// - Parameters:
4141
/// - pattern: A `CodeBlock` that also conforms to `PatternConvertible` for the loop variable(s).
4242
/// - sequence: A `CodeBlock` that produces the sequence to iterate over.
43-
/// - whereClause: An optional `CodeBlock` that produces the where clause condition.
43+
/// - whereClause: An optional `CodeBlockBuilder` that produces the where clause condition.
4444
/// - then: A ``CodeBlockBuilder`` that provides the body of the loop.
4545
public init(
4646
_ pattern: any CodeBlock & PatternConvertible,
4747
in sequence: CodeBlock,
48-
where whereClause: CodeBlock? = nil,
48+
@CodeBlockBuilderResult where whereClause: () -> [CodeBlock] = { [] },
4949
@CodeBlockBuilderResult then: () -> [CodeBlock]
5050
) {
5151
self.pattern = pattern
5252
self.sequence = sequence
53-
self.whereClause = whereClause
53+
let whereBlocks = whereClause()
54+
self.whereClause = whereBlocks.isEmpty ? nil : whereBlocks[0]
5455
self.body = then()
5556
}
5657

Tests/SyntaxKitTests/Integration/ForLoopsExampleTests.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,21 @@ import Testing
6464

6565
For(
6666
VariableExp("number"), in: VariableExp("numbers"),
67-
where: Infix("==") {
68-
Infix("%") {
69-
VariableExp("number")
70-
Literal.integer(2)
67+
where: {
68+
Infix("==") {
69+
Infix("%") {
70+
VariableExp("number")
71+
Literal.integer(2)
72+
}
73+
Literal.integer(0)
7174
}
72-
Literal.integer(0)
7375
},
7476
then: {
7577
Call("print") {
7678
ParameterExp(unlabeled: "\"Even number: \\(number)\"")
7779
}
78-
})
80+
}
81+
)
7982

8083
// MARK: - For-in with Dictionary
8184
Call("print") {

Tests/SyntaxKitTests/Unit/BasicTests.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@ final class ForLoopTests {
5757
let forLoop = For(
5858
VariableExp("number"),
5959
in: VariableExp("numbers"),
60-
where: Infix("%") {
61-
VariableExp("number")
62-
Literal.integer(2)
60+
where: {
61+
Infix("%") {
62+
VariableExp("number")
63+
Literal.integer(2)
64+
}
6365
},
6466
then: {
6567
Call("print") {

0 commit comments

Comments
 (0)