Eu preciso converter um Expr
para Tree
fazer o desenvolvimento macro do Scala 3 e ainda não encontrei um mecanismo de conversão apropriado para isso.
No Scala 2 existia um tree
método Expr
que facilitava essa tarefa a meu ver, assim:
def expr_impl(c: blackbox.Context)(expr: c.Expr[AnyRef]): c.Expr[Expression] = {
import c.universe._
expr.tree match {
//...
}
}
Mas esse método parece ter sido removido no Scala 3.
Eu preciso disso para examinar os resultados do uso de uma expressão de aspas. Se eu usar showRaw
, a saída não é detalhada, o que é um problema no meu caso:
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)}")
Isso resulta em uma saída não detalhada como esta:from macro annotation1 '{ ... }
Também tentei Printer.TreeStructure.show
, que espera um Tree
em vez de Expr
, e é por isso que preciso da conversão mencionada, pois Printer.TreeStructure.show
resultaria em uma saída detalhada.
Se houver algum método que seja detalhado e semelhante Printer.TreeStructure.show
e espere um Expr
como argumento, isso também resolveria meu problema.