Skip to content

Commit 1e72d11

Browse files
committed
Revert Prism macro back to member macro instead of ext
1 parent e0ce718 commit 1e72d11

File tree

3 files changed

+41
-98
lines changed

3 files changed

+41
-98
lines changed

Sources/SwiftRexMacroImplementation/Macros/Prism/Prism.swift

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,12 @@ public struct PrismCase: PeerMacro {
2828
}
2929
}
3030

31-
public struct Prism: ExtensionMacro {
31+
public struct Prism: MemberMacro {
3232
public static func expansion(
3333
of node: SwiftSyntax.AttributeSyntax,
34-
attachedTo declaration: some SwiftSyntax.DeclGroupSyntax,
35-
providingExtensionsOf type: some SwiftSyntax.TypeSyntaxProtocol,
36-
conformingTo protocols: [SwiftSyntax.TypeSyntax],
34+
providingMembersOf declaration: some SwiftSyntax.DeclGroupSyntax,
3735
in context: some SwiftSyntaxMacros.MacroExpansionContext
38-
) throws -> [SwiftSyntax.ExtensionDeclSyntax] {
36+
) throws -> [SwiftSyntax.DeclSyntax] {
3937
guard let enumDeclaration = declaration.as(EnumDeclSyntax.self) else {
4038
throw MacroError.notAnEnum
4139
}
@@ -49,26 +47,13 @@ public struct Prism: ExtensionMacro {
4947
$0.elements.compactMap { $0.name.text.isEmpty ? nil : $0 }
5048
}
5149

52-
let (prisms, predicates) = (
50+
return cases
51+
.map(\.prism)
52+
.map { $0.set(visibility: node.visibility) }
53+
.compactMap { $0.as(DeclSyntax.self) } +
5354
cases
54-
.map(\.prism).map { $0.set(visibility: node.visibility) }
55-
.map { MemberBlockItemSyntax(decl: $0) },
56-
cases
57-
.map(\.predicate).map { $0.set(visibility: node.visibility) }
58-
.map { MemberBlockItemSyntax(decl: $0) }
59-
)
60-
61-
return [
62-
prisms.isEmpty ? nil : ExtensionDeclSyntax(
63-
attributes: AttributeListSyntax(""),
64-
extendedType: type,
65-
memberBlock: .init(members: MemberBlockItemListSyntax(prisms))
66-
),
67-
predicates.isEmpty ? nil : ExtensionDeclSyntax(
68-
attributes: AttributeListSyntax(""),
69-
extendedType: type,
70-
memberBlock: .init(members: MemberBlockItemListSyntax(predicates))
71-
)
72-
].compactMap { $0 }
55+
.map(\.predicate)
56+
.map { $0.set(visibility: node.visibility) }
57+
.compactMap { $0.as(DeclSyntax.self) }
7358
}
7459
}

Sources/SwiftRexMacros/SwiftRexMacros.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public enum DeclarationVisibility: String {
101101
/// - Use `PrismCase` in a case if you want a different visibility only for that case generated code.
102102
/// - Use only `PrismCase` without `Prism` in the enum if you want code generated only for that case.
103103
/// - Use `NoPrism` in a case if you don't want code generated for that case.
104-
@attached(extension, names: arbitrary)
104+
@attached(member, names: arbitrary)
105105
public macro Prism(visibility: DeclarationVisibility = .internal) = #externalMacro(module: "SwiftRexMacroImplementation", type: "Prism")
106106

107107
/// A macro that produces predicates and prisms for a single case of an Enum.

0 commit comments

Comments
 (0)