Как распечатать расширенный макрос в Scala?

Я пишу макрос в Scala, но когда я его вызываю, я получаю сообщение об ошибке "Double не принимает параметры". Ясно, что что-то не так с тем, как макрос создает АСТ. Итак, как я могу увидеть расширенный макрос? Есть ли способ вызвать реализацию макроса во время выполнения?

Ответы

Ответ 1

Предоставить компилятору опцию -Ymacro-debug-lite или -Ymacro-debug-verbose.

Сверху моей головы, детализация печатных АСТ определяется -Yshow-trees-compact, -Yshow-trees-stringified, -Xprint-types, -uniqid и -Yshow-symkinds. Вы можете найти другие драгоценные камни, запустив scala -X и scala -Y (или проверив источники настроек scala на https://github.com/scala/scala/blob/2.10.x/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala).

Кроме того, несмотря на то, что он по существу является макросом, у reification есть свой собственный механизм трассировки, который можно настроить с помощью -Yreify-copypaste и -Yreify-debug.

Ответ 2

Существует Macrocosm desugar, который может показать, как ваш исходный код, в том числе, но не ограничиваясь макросами, преобразуется в.

    println("TRANSFORMATION:\n"+ desugar{
        println("a string") 
        MY_MACRO("something")
    })