Como imprimo uma macro expandida no Scala?
-
12-12-2019 - |
Pergunta
Estou escrevendo uma macro em Scala, mas quando a chamo recebo uma mensagem de erro dizendo "Double não aceita parâmetros".Claramente há algo errado com a forma como a macro constrói o AST.Então, como posso ver a macro expandida?Existe uma maneira de chamar a implementação da macro em tempo de execução?
Solução
Fornecer -Ymacro-debug-lite
ou -Ymacro-debug-verbose
opção para o compilador.
Na minha cabeça, a detalhamento de ASTs impressos é regida por -Yshow-trees-compact
, -Yshow-trees-stringified
, -Xprint-types
, -uniqid
e -Yshow-symkinds
.Você pode encontrar outras joias executando scala -X
e scala -Y
(ou inspecionando as fontes das configurações do scala em https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala).
Além disso, apesar de ser essencialmente uma macro, a reificação possui seu próprio mecanismo de rastreamento que pode ser configurado por -Yreify-copypaste
e -Yreify-debug
.
Outras dicas
Há O açúcar do macrocosmo que pode mostrar como seu código-fonte, incluindo, mas não se limitando a macros, é transformado.
println("TRANSFORMATION:\n"+ desugar{
println("a string")
MY_MACRO("something")
})