Avatar
public let testMacros: [String: Macro.Type] = [ "checkContext": CheckContextIndependenceMacro.self, "colorLiteral": ColorLiteralMacro.self, "fileID": FileIDMacro.self, "imageLiteral": ImageLiteralMacro.self, "stringify": StringifyMacro.self, "myError": ErrorMacro.self, "bitwidthNumberedStructs": DefineBitwidthNumberedStructsMacro.self, "addCompletionHandler": AddCompletionHandler.self, "addBackingStorage": AddBackingStorage.self, ]
11:32 PM
public struct AddBackingStorage: MemberDeclarationMacro { public static func expansion( of node: CustomAttributeSyntax, attachedTo decl: DeclSyntax, in context: inout MacroExpansionContext ) throws -> [DeclSyntax] { let storage: DeclSyntax = "var _storage: Storage<Self>" return [ storage.withLeadingTrivia([.newlines(1), .spaces(2)]) ] } }
11:32 PM
これだけか
11:35 PM
varが生えるとかstructが生えるとかがノーヒントなのは、型定義がある式マクロと比べるとわかりにくい
11:36 PM
しかし、「何が起きるのかわかるように宣言する」機能と、「マクロでなんでもできる」性質は矛盾するから仕様のバランスが難しそうだなあ