Avatar
Kishikawa Katsumi 7/29/2023 8:13 PM
マクロの動作は Text => AST(a) => AST(b) => Text => Compiler だけどAST(b) => TextのところTextにしないで Text => AST(a) => AST(b) => CompilerってASTで渡すほうがいいと思うんだけどなんか理由があってTextにしてたんだったかな。
8:20 PM
というのもAST(b) => TextがあるためにSwiftSyntaxで作るTree構造はトークンレベルでスペース等をちゃんと入れないといけないのがけっこうな負担になってる。 で、現在はそれを軽減するためにマクロの出力は自動的にフォーマットされるようになったんだけど(ここで使われるフォーマッタは足りないスペースを適切に足してくれる。フォーマットしない設定もできる。)、現在はフォーマットによって間違ったソースコードが出る場合もあって、それは直ると思うんだけど未発見のケースもたぶんありそうだし、あまりいいやり方と思えないんですよね。
8:22 PM
うーん、でもSwiftSyntaxのASTがTrivia以外まったく同じでもTriviaが空白か改行かで意味が変わることがあるからダメか。
8:24 PM
たとえば下の2つのコードはTrivia以外はまったく同じ構造のTreeにParseされるけど下はコンパイルエラーになるしな。 let a = 1 let b = 2 let a = 1 let b = 2