定义Scala宏时,是否可以从符号或类型转到树

定义Scala宏时,是否可以从符号或类型转到树,scala,scala-macros,scala-macro-paradise,Scala,Scala Macros,Scala Macro Paradise,定义Scala宏时,是否可以从符号或类型转到树 具体来说,该场景希望在一个伴随对象上查找一个文本 在scala代码中,如下所示: class Fred(a: String) object Fred { val FredDescription = "hello" } 在宏中,我可以访问Fred的WeakTypeTag,并可以使用它访问同伴及其类型签名: context.universe.weakTypeOf[A].typeSymbol.companionSymbol.typeSignatu

定义Scala宏时,是否可以从符号或类型转到树

具体来说,该场景希望在一个伴随对象上查找一个文本

在scala代码中,如下所示:

class Fred(a: String)

object Fred {
  val FredDescription = "hello"
}
在宏中,我可以访问Fred的WeakTypeTag,并可以使用它访问同伴及其类型签名:

context.universe.weakTypeOf[A].typeSymbol.companionSymbol.typeSignature
但是我看不到任何访问文本或树的方法来匹配伴随对象的文本


这可能吗?为某些任意类型或符号获取树有什么诀窍吗?

在某些情况下,这是可能的,例如,在调用宏的同一文件中定义了类型,但在一般情况下,我不希望这样


这是因为您正在检查的类型或符号可能来自已编译的类文件。在这种情况下,您要查找的树根本不存在。

在我们的实验性nextgen宏系统中,我们正在研究为您编译的程序保存AST,以便您始终可以获取您可能感兴趣的程序元素的AST:。