Skip to content

Commit cf488dc

Browse files
now accepts strings containing interpolation; bug fix for data attribute
1 parent 8f4fb59 commit cf488dc

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

Sources/HTMLKitMacros/HTMLElement.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ private extension HTMLElement {
8989
var attributes:[String] = []
9090
for attribute in elements {
9191
let function:FunctionCallExprSyntax = attribute.expression.as(FunctionCallExprSyntax.self)!
92-
let functionName:String = function.calledExpression.as(MemberAccessExprSyntax.self)!.declName.baseName.text
92+
var functionName:String = function.calledExpression.as(MemberAccessExprSyntax.self)!.declName.baseName.text
9393
var string:String = ""
9494
switch functionName {
9595
case "accesskey",
@@ -126,6 +126,10 @@ private extension HTMLElement {
126126
break
127127
case "tabIndex": // TODO: fix
128128
break
129+
case "data":
130+
functionName = "data-" + function.arguments.first!.expression.as(StringLiteralExprSyntax.self)!.string
131+
string = function.arguments.last!.expression.as(StringLiteralExprSyntax.self)!.string
132+
break
129133
default:
130134
break
131135
}
@@ -340,7 +344,5 @@ public enum HTMLElementType : String, CaseIterable {
340344
}
341345

342346
extension StringLiteralExprSyntax {
343-
var string : String {
344-
segments.children(viewMode: .sourceAccurate).first!.as(StringSegmentSyntax.self)!.content.text
345-
}
346-
}
347+
var string : String { "\(segments)" }
348+
}

Tests/HTMLKitTests/HTMLKitTests.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ extension HTMLKitTests {
3131
}
3232
}
3333

34+
extension HTMLKitTests {
35+
func test_attribute_data() {
36+
let bro:Int = 0
37+
let string:String = #div(attributes: [.data(id: "id", "\(bro)")])
38+
XCTAssertEqual(string, "<div data-id=\"\(bro)\"></div>")
39+
}
40+
}
41+
3442
extension HTMLKitTests {
3543
func testExample1() {
3644
let test:String = #html(innerHTML: [
@@ -56,4 +64,4 @@ extension HTMLKitTests {
5664
])
5765
XCTAssertEqual(test, "<!DOCTYPE html><html><body><div class=\"bing bong\" title=\"just seeing what blow's\" draggable=\"false\" inputmode=\"email\" hidden=\"hidden\">poggies<div></div><a><div><abbr></abbr></div><address></address></a><div></div><button disabled></button><video autoplay preload=\"auto\" src=\"ezclap\" width=\"5\"></video></div></body></html>")
5866
}
59-
}
67+
}

0 commit comments

Comments
 (0)