@@ -33,34 +33,53 @@ import SwiftSyntaxMacros
3333public enum NSModelActorMacro { }
3434
3535extension 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+ """
4141
42- guard let extensionDecl = decl. as ( ExtensionDeclSyntax . self) else {
43- return [ ]
44- }
42+ guard let extensionDecl = decl. as ( ExtensionDeclSyntax . self) else {
43+ return [ ]
44+ }
4545
46- return [ extensionDecl]
47- }
46+ return [ extensionDecl]
47+ }
4848}
4949
5050extension 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+ }
5667
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+ }
6685}
0 commit comments