我需要将 Scala 3 宏开发转换Expr
为Tree
Scala 3 宏开发,但我还没有找到合适的转换机制。
在 Scala 2 中,有一种tree
方法Expr
可以让这项任务变得简单,就像我看到的那样:
def expr_impl(c: blackbox.Context)(expr: c.Expr[AnyRef]): c.Expr[Expression] = {
import c.universe._
expr.tree match {
//...
}
}
但这个方法似乎在Scala 3中被删除了。
我需要它来检查使用 Quotes 表达式的结果。如果我使用showRaw
,输出并不详细,这是我的情况的问题:
import scala.quoted.*
import scala.reflect.runtime.universe.showRaw
import quotes.reflect.*
//...
val obj: Expr[_] = '{object AnObject}
report.error(s"from macro annotation1 ${showRaw(obj)}")
这会产生如下非详细输出:from macro annotation1 '{ ... }
还尝试过Printer.TreeStructure.show
,它需要 aTree
而不是Expr
,这就是为什么我需要提到的转换,因为这Printer.TreeStructure.show
会导致详细的输出。
如果有任何详细且类似于Printer.TreeStructure.show
并期望 anExpr
作为参数的方法,那也可以解决我的问题。