私はScala関数を外部形式にエクスポートしています。この目的のために、私はscala.meta
とStaticAnnotation
を使用します。ような何か:x.max(y)
:ExportFunctions extends StaticAnnotation
の実装でマクロ注釈(インラインメタ)の砂糖、書式設定、および空白を維持する方法は?
@ExportFunctions
object MyFunctions {
def max(x: Int, y: Int): Int = x max y
}
class ExportFunctions extends StaticAnnotation {
inline def apply(defn: Any): Any = meta {
defn match {
case q"object $name extends { ..$earlydefns } with ..$parents { ..$stats }" =>
stats.flatMap{
case [email protected](modifiers, fname, tparams, paramss, Some(returnType), body) =>
println(body.syntax)
}
case _ =>
}
defn
}
}
は、機能の本体は、脱糖ツリーとして表現されます。
しかし、ドキュメンテーションの目的で、実際のソースコードを作成する方がはるかに良いでしょう。または少なくとも砂糖(x max y
)。
オリジナルの書式/砂糖を保存する方法はありますか?