2016-12-27 17 views
0

Я экспортирую функции Scala во внешний формат. Для этой цели я использую scala.meta и StaticAnnotation. Что-то вроде:Как сохранить сахар, форматирование и пробелы в макрокомандах (inline-meta)?

@ExportFunctions 
object MyFunctions { 
    def max(x: Int, y: Int): Int = x max y 
} 

class ExportFunctions extends StaticAnnotation { 
    inline def apply(defn: Any): Any = meta { 
    defn match { 
     case q"object $name extends { ..$earlydefns } with ..$parents { ..$stats }" => 
     stats.flatMap{ 
      case [email protected](modifiers, fname, tparams, paramss, Some(returnType), body) => 
      println(body.syntax) 
     } 
     case _ => 
    } 
    defn 
    } 
} 

В реализации ExportFunctions extends StaticAnnotation тело функций представляется в виде Обессахаренный дерева: x.max(y).

Однако для целей документации было бы намного лучше иметь исходный код. Или, по крайней мере, сахар (x max y).

Есть ли способ сохранить исходное форматирование/сахар?

ответ

0

Начиная с 3.0.0-M8, аннотации макроса scala.meta paradise реализуются как преобразование деревьев из деревьев, отражающих scala, в деревья scala.meta. Такой подход не позволяет получить пустяки, такие как форматирование или комментарии, поэтому быстрый ответ на ваш вопрос: no, а не с макрокомандами.

Однако у scala.meta есть api с первоклассной поддержкой для таких деталей, как форматирование и комментарии. В зависимости от вашего приложения вам могут не потребоваться макрокоманды, вы можете использовать scala.meta parser непосредственно в качестве библиотеки.

 Смежные вопросы

  • Нет связанных вопросов^_^