Skip to content

Commit

Permalink
rename empty -> isEmpty, remove unneeded KeyValue.Value type
Browse files Browse the repository at this point in the history
  • Loading branch information
MahdiBM committed Jul 18, 2024
1 parent 8a1c80e commit 0843ae2
Show file tree
Hide file tree
Showing 7 changed files with 18 additions and 95 deletions.
6 changes: 4 additions & 2 deletions Sources/EnumeratorMacroImpl/Types/EArray.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ extension EArray: EMustacheTransformable {
return EOptionalsArray(underlying: self.reversed().map { $0 })
case "count":
return self.underlying.count
case "empty":
case "isEmpty":
return self.underlying.isEmpty
case "joined":
let joined = self.underlying
Expand Down Expand Up @@ -79,7 +79,9 @@ extension EArray: EMustacheTransformable {
default:
if let keyValues = self as? EArray<EKeyValue> {
/// Don't throw even if the key doesn't exist.
return keyValues.underlying.first(named: EString(name))
return EOptional(
keyValues.underlying.first(where: { $0.key.underlying == name })?.value
)
}
if let comparable = self as? EComparableSequence {
/// The underlying type is in charge of adding a diagnostic, if needed.
Expand Down
86 changes: 1 addition & 85 deletions Sources/EnumeratorMacroImpl/Types/EKeyValue.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ extension EKeyValue: EMustacheTransformable {
case "key":
return self.key
case "value":
return Value(base: self)
return self.value
default:
RenderingContext.current.addOrReplaceDiagnostic(
.invalidTransform(
Expand All @@ -50,87 +50,3 @@ extension EKeyValue: EMustacheTransformable {
}
}
}

extension EKeyValue {
struct Value {
fileprivate let base: EOptional<EKeyValue>

init(base: EKeyValue?) {
self.base = .init(base)
}
}
}

extension [EKeyValue] {
func first(named name: EString) -> EKeyValue.Value {
EKeyValue.Value(
base: self.first(where: { $0.key == name })
)
}
}

extension [EOptional<EKeyValue>] {
func first(named name: EString) -> EKeyValue.Value {
EKeyValue.Value(
base: self.first(where: { $0.toOptional()?.key == .some(name) })?.toOptional()
)
}
}

extension EKeyValue.Value: CustomStringConvertible {
var description: String {
String(describing: self.base.map(\.value))
}
}

extension EKeyValue.Value: WithNormalizedTypeName {
static var normalizedTypeName: String {
"KeyValue<String, String>.Value"
}
}

extension EKeyValue.Value: Comparable {
static func < (lhs: EKeyValue.Value, rhs: EKeyValue.Value) -> Bool {
lhs.base.map(\.value) < rhs.base.map(\.value)
}

static func == (lhs: EKeyValue.Value, rhs: EKeyValue.Value) -> Bool {
lhs.base.map(\.value) == rhs.base.map(\.value)
}
}

extension EKeyValue.Value: EMustacheTransformable {
func transform(_ name: String) -> Any? {
switch self.base {
case .none:
switch name {
case "exists":
return false
case "empty":
return true
case "bool":
return false
default:
RenderingContext.current.addOrReplaceDiagnostic(
.invalidTransform(
transform: name,
normalizedTypeName: Self.normalizedTypeName
)
)
return nil
}
case let .some(keyValue):
let value = keyValue.value
switch name {
case "exists":
return true
case "empty":
return value.isEmpty
case "bool":
return Bool(value)
default:
return value.transform(name)
}
}
}
}
2 changes: 1 addition & 1 deletion Sources/EnumeratorMacroImpl/Types/EOptional.swift
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ extension EOptional: EMustacheTransformable {
switch self {
case .none:
switch name {
case "empty":
case "isEmpty":
return true
case "bool":
return false
Expand Down
9 changes: 7 additions & 2 deletions Sources/EnumeratorMacroImpl/Types/EOptionalsArray.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ extension EOptionalsArray: EMustacheTransformable {
return EOptionalsArray(underlying: self.reversed().map { $0 })
case "count":
return self.underlying.count
case "empty":
case "isEmpty":
return self.underlying.isEmpty
case "joined":
let joined = self.underlying
Expand Down Expand Up @@ -83,7 +83,12 @@ extension EOptionalsArray: EMustacheTransformable {
default:
if let keyValues = self as? EOptionalsArray<EKeyValue> {
/// Don't throw even if the key doesn't exist.
return keyValues.underlying.first(named: EString(name))
switch keyValues.underlying.first(where: { $0.toOptional()?.key.underlying == name }) {
case let .some(wrapped):
return wrapped.map(\.value)
case nil:
return EOptional<EString>.none
}
}
if let comparable = self as? EComparableSequence {
/// The underlying type is in charge of adding a diagnostic, if needed.
Expand Down
2 changes: 1 addition & 1 deletion Sources/EnumeratorMacroImpl/Types/EString.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ extension EString: CustomReflectable {
extension EString: EMustacheTransformable {
func transform(_ name: String) -> Any? {
switch name {
case "empty":
case "isEmpty":
return self.isEmpty
case "capitalized":
if self.isEmpty || self[self.startIndex].isUppercase {
Expand Down
4 changes: 2 additions & 2 deletions Tests/EnumeratorMacroTests/EnumeratorMacroTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ final class EnumeratorMacroTests: XCTestCase {
#"""
@Enumerator("""
{{#cases}}
{{^empty(parameters)}}
{{^isEmpty(parameters)}}
func get{{capitalized(name)}}() -> ({{joined(tupleValue(parameters))}})? {
switch self {
case let .{{name}}{{withParens(joined(names(parameters)))}}:
Expand All @@ -204,7 +204,7 @@ final class EnumeratorMacroTests: XCTestCase {
return nil
}
}
{{/empty(parameters)}}
{{/isEmpty(parameters)}}
{{/cases}}
""")
enum TestEnum {
Expand Down
4 changes: 2 additions & 2 deletions Tests/EnumeratorMacroTests/TransformTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import XCTest
final class TransformTests: XCTestCase {
func testCommentsValueIsEmptyBecauseDoesNotExist() throws {
do {
let template = "{{empty(custom_params(keyValues(comments)))}}"
let template = "{{isEmpty(custom_params(keyValues(comments)))}}"
let render = try MustacheTemplate(
string: "{{%CONTENT_TYPE:TEXT}}\n" + template
).render(
Expand All @@ -27,7 +27,7 @@ final class TransformTests: XCTestCase {

func testCommentsValueIsEmptyButExists() throws {
do {
let template = "{{empty(custom_params(keyValues(comments)))}}"
let template = "{{isEmpty(custom_params(keyValues(comments)))}}"
let render = try MustacheTemplate(
string: "{{%CONTENT_TYPE:TEXT}}\n" + template
).render(
Expand Down

0 comments on commit 0843ae2

Please sign in to comment.