@@ -33,34 +33,53 @@ import SwiftSyntaxMacros
33
33
public enum NSModelActorMacro { }
34
34
35
35
extension NSModelActorMacro : ExtensionMacro {
36
- public static func expansion( of _: SwiftSyntax . AttributeSyntax , attachedTo _: some SwiftSyntax . DeclGroupSyntax , providingExtensionsOf type: some SwiftSyntax . TypeSyntaxProtocol , conformingTo _: [ SwiftSyntax . TypeSyntax ] , in _: some SwiftSyntaxMacros . MacroExpansionContext ) throws -> [ SwiftSyntax . ExtensionDeclSyntax ] {
37
- let decl : DeclSyntax =
38
- """
39
- extension \( type. trimmed) : CoreDataEvolution.NSModelActor {}
40
- """
36
+ public static func expansion( of _: SwiftSyntax . AttributeSyntax , attachedTo _: some SwiftSyntax . DeclGroupSyntax , providingExtensionsOf type: some SwiftSyntax . TypeSyntaxProtocol , conformingTo _: [ SwiftSyntax . TypeSyntax ] , in _: some SwiftSyntaxMacros . MacroExpansionContext ) throws -> [ SwiftSyntax . ExtensionDeclSyntax ] {
37
+ let decl : DeclSyntax =
38
+ """
39
+ extension \( type. trimmed) : CoreDataEvolution.NSModelActor {}
40
+ """
41
41
42
- guard let extensionDecl = decl. as ( ExtensionDeclSyntax . self) else {
43
- return [ ]
44
- }
42
+ guard let extensionDecl = decl. as ( ExtensionDeclSyntax . self) else {
43
+ return [ ]
44
+ }
45
45
46
- return [ extensionDecl]
47
- }
46
+ return [ extensionDecl]
47
+ }
48
48
}
49
49
50
50
extension NSModelActorMacro : MemberMacro {
51
- public static func expansion( of _: AttributeSyntax , providingMembersOf _: some DeclGroupSyntax , conformingTo _: [ TypeSyntax ] , in _: some MacroExpansionContext ) throws -> [ DeclSyntax ] {
52
- [
53
- """
54
- public nonisolated let modelExecutor: CoreDataEvolution.NSModelObjectContextExecutor
55
- public nonisolated let modelContainer: CoreData.NSPersistentContainer
51
+ public static func expansion(
52
+ of node: AttributeSyntax ,
53
+ providingMembersOf _: some DeclGroupSyntax ,
54
+ conformingTo _: [ TypeSyntax ] ,
55
+ in _: some MacroExpansionContext
56
+ ) throws -> [ DeclSyntax ] {
57
+ var generateInitializer = true
58
+ if let argumentList = node. arguments? . as ( LabeledExprListSyntax . self) {
59
+ for argument in argumentList {
60
+ if argument. label? . text == " disableGenerateInit " ,
61
+ let booleanLiteral = argument. expression. as ( BooleanLiteralExprSyntax . self)
62
+ {
63
+ generateInitializer = booleanLiteral. literal. text != " true "
64
+ }
65
+ }
66
+ }
56
67
57
- public init(container: CoreData.NSPersistentContainer) {
58
- let context: NSManagedObjectContext
59
- context = container.newBackgroundContext()
60
- modelExecutor = CoreDataEvolution.NSModelObjectContextExecutor(context: context)
61
- modelContainer = container
62
- }
63
- """ ,
64
- ]
65
- }
68
+ let decl : DeclSyntax =
69
+ """
70
+ public nonisolated let modelExecutor: CoreDataEvolution.NSModelObjectContextExecutor
71
+ public nonisolated let modelContainer: CoreData.NSPersistentContainer
72
+
73
+ """
74
+ let initializer : DeclSyntax = generateInitializer ?
75
+ """
76
+ public init(container: CoreData.NSPersistentContainer) {
77
+ let context: NSManagedObjectContext
78
+ context = container.newBackgroundContext()
79
+ modelExecutor = CoreDataEvolution.NSModelObjectContextExecutor(context: context)
80
+ modelContainer = container
81
+ }
82
+ """ : " "
83
+ return [ decl, initializer]
84
+ }
66
85
}
0 commit comments