Avatar
Kishikawa Katsumi 3/4/2025 1:17 AM
マクロの展開に関してはユニットテストから実行してデバッグするのが簡単ですよ。
1:19 AM
SwiftSyntaxMacrosTestSupportというのが提供されていて、assertMacroExpansion関数に文字列でSwiftソースコードの断片を渡してそれが意図した通りに展開されるかテストできる。そこでブレイクポイントをマクロのコードに仕掛けたら止まる。
1:21 AM
ワシはassertMacroExpansion関数よりもう少しシンプルにやりたいと思うから次のように書いてる。これもマクロ側にブレイクポイントを適当に置いてテストを実行したら止まる。 let sourceFile = Parser.parse( source: """ let numbers = [1, 2, 3, 4, 5] #assert(numbers[2] == 4) """ ) let macros: [String: any Macro.Type] = [ "assert": PowerAssertMacro.self, ] let context = BasicMacroExpansionContext( sourceFiles: [sourceFile: .init(moduleName: testModuleName, fullFilePath: testFileName)] ) let expanded = "\(sourceFile.expand(macros: macros, in: context))" ...