2016-12-27 74 views
0

我正在將Scala函數導出爲外部格式。爲此我使用scala.metaStaticAnnotation。喜歡的東西:如何保留宏註釋中的糖,格式和空格(內聯元)?

@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樹的樹轉換。這種方法不可能獲得諸如格式化或註釋這樣的瑣事,所以對你的問題的快速回答是:不,而不是宏註釋。

但是,scala.meta擁有一流的API支持,例如格式和註釋等詳細信息。根據您的應用程序,您可能不需要宏註釋,您可以直接使用scala.meta parser作爲庫。