Skip to content

Commit 1fe16a2

Browse files
committed
Public modifier
1 parent 06a9e89 commit 1fe16a2

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

Sources/EquatableMacros/EquatableExtensionMacro.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@ public enum EquatableExtensionMacro: ExtensionMacro {
2525
throw EquatableExtensionError.onlyApplicableToFinalClassOrActor
2626
}
2727

28+
let isPublic = declaration.modifiers.contains(where: { $0.name.tokenKind == .keyword(.public) })
29+
let addModifiers = isPublic ? "public " : ""
30+
2831
return try [
2932
ExtensionDeclSyntax("extension \(type.trimmed): Equatable") {
30-
try FunctionDeclSyntax("static func == (lhs: \(type.trimmed), rhs: \(type.trimmed)) -> Bool") {
33+
try FunctionDeclSyntax("\(raw: addModifiers)static func == (lhs: \(type.trimmed), rhs: \(type.trimmed)) -> Bool") {
3134
let properties = declaration.memberBlock.members
3235
.compactMap { $0.decl.as(VariableDeclSyntax.self) }
3336
.compactMap { $0.bindings.first?.as(PatternBindingSyntax.self) }

Tests/EquatableTests/EquatableTests.swift

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,49 @@ final class EquatableTests: XCTestCase {
5757
#endif
5858
}
5959

60+
func testEquatableMacroOnPublicFinalClasses() throws {
61+
#if canImport(EquatableMacros)
62+
63+
assertMacroExpansion(
64+
"""
65+
@Equatable
66+
public final class Planet {
67+
let name: String
68+
let mass: Mass
69+
70+
var this: String { "1" }
71+
72+
init(name: String) {
73+
self.name = name
74+
}
75+
}
76+
""",
77+
expandedSource: """
78+
public final class Planet {
79+
let name: String
80+
let mass: Mass
81+
82+
var this: String { "1" }
83+
84+
init(name: String) {
85+
self.name = name
86+
}
87+
}
88+
89+
extension Planet: Equatable {
90+
public static func == (lhs: Planet, rhs: Planet) -> Bool {
91+
lhs.name == rhs.name &&
92+
lhs.mass == rhs.mass
93+
}
94+
}
95+
""",
96+
macros: testMacros
97+
)
98+
#else
99+
throw XCTSkip("macros are only supported when running tests for the host platform")
100+
#endif
101+
}
102+
60103
func testEquatableMacroOnActors() throws {
61104
#if canImport(EquatableMacros)
62105

0 commit comments

Comments
 (0)