Skip to content

Commit ed5a280

Browse files
authored
Merge pull request #65 from plummer/fix/Fix-52-β€˜#export()'depends-on-β€˜{β€˜-location
Fix/fix 52 β€˜#export()'depends on β€˜{β€˜ location
2 parents 77062cd + a7c5533 commit ed5a280

File tree

5 files changed

+57
-4
lines changed

5 files changed

+57
-4
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#extend("basic-extendable")
2+
3+
#export("greeting"){ Aloha }
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#extend("basic-extendable")
2+
3+
#export("greeting")
4+
5+
6+
7+
{ Aloha }
8+
9+

β€ŽSources/Leaf/Buffer/Buffer+Leaf.swiftβ€Ž

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,24 @@ extension Buffer {
126126
mutating func extractInstruction(stem: Stem) throws -> TagTemplate {
127127
let name = try extractInstructionName()
128128
let parameters = try extractInstructionParameters()
129-
130-
// check if body
131-
moveForward()
132-
guard current == .space, next == .leftCurlyBracket else {
129+
130+
// check if body exists
131+
132+
// Check for immediate curly brace without whitespace.
133+
// If there is an immediate brace, do nothing.
134+
if next != .leftCurlyBracket {
135+
moveForward()
136+
}
137+
138+
// Move through any redundant whitespace
139+
while current?.isWhitespace == true && next?.isWhitespace == true {
140+
moveForward()
141+
}
142+
143+
guard next == .leftCurlyBracket else {
133144
return TagTemplate(name: name, parameters: parameters, body: Leaf?.none)
134145
}
146+
135147
moveForward() // queue up `{`
136148

137149
// TODO: Body should be leaf components
@@ -153,6 +165,7 @@ extension Buffer {
153165
guard current == .leftParenthesis else {
154166
throw ParseError.expectedOpenParenthesis(line: line, column: column)
155167
}
168+
156169
return name.makeString()
157170
}
158171

@@ -168,6 +181,7 @@ extension Buffer {
168181
}
169182

170183
mutating func extractSection(opensWith opener: Byte, closesWith closer: Byte) throws -> Bytes {
184+
171185
guard current == opener else {
172186
let have = current.flatMap { [$0] }?.makeString()
173187
throw ParseError.missingBodyOpener(
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import Foundation
2+
import XCTest
3+
@testable import Leaf
4+
5+
class BodyWhitespaceTests: XCTestCase {
6+
7+
static let allTests = [
8+
("testAdditionalWhitespace", testAdditionalWhitespace),
9+
("testNoWhitespace", testNoWhitespace)
10+
]
11+
12+
func testAdditionalWhitespace() throws {
13+
let leaf = try stem.spawnLeaf(at: "variable-body-whitespace")
14+
let rendered = try stem.render(leaf, with: Context(["name": "World"])).makeString()
15+
let expectation = "Aloha, World!"
16+
XCTAssertEqual(rendered, expectation)
17+
}
18+
19+
func testNoWhitespace() throws {
20+
let leaf = try stem.spawnLeaf(at: "no-body-whitespace")
21+
let rendered = try stem.render(leaf, with: Context(["name": "World"])).makeString()
22+
let expectation = "Aloha, World!"
23+
XCTAssertEqual(rendered, expectation)
24+
}
25+
26+
}

β€ŽTests/LinuxMain.swiftβ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ XCTMain([
2121
testCase(VariableTests.allTests),
2222
testCase(LayoutTests.allTests),
2323
testCase(RawTests.allTests),
24+
testCase(BodyWhitespaceTests.allTests)
2425
])

0 commit comments

Comments
Β (0)