@@ -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}
0 commit comments