我目前正在尝试构建一个访问Scala生成的AST来运行一些规则检查的插件。到目前为止,它只是打印AST才能获得参与.AFAK,这个插件可能会在不同的阶段后运行,但我尝试了这两个:
我错误地认为我必须运行typer阶段才能实现我的目标,因为我将完成解决方案。如果我是对的,是否有scalac配置可以帮助发出具有未解析类型的节点而不是在编译单元级别停止编译?如果我错了,为什么我不能从插件中看到任何打印输出
演示编译器会帮助吗?或者也许想要插件的想法不是正确的。
以下是调用的代码用法
object TestJF {
val settings = new Settings
settings.plugin.appendToValue("")
settings.bootclasspath.append("C:\\Users\\JTR\\.ivy2\\cache\\org.scala-lang\\scala-library\\jars\\scala-library-2.11.8.jar")
settings.classpath.append("C:\\Users\\JTR\\.ivy2\\cache\\org.scala-lang\\scala-library\\jars\\scala-library-2.11.8.jar")
settings.classpath.append("C:\\Users\\JTR\\.ivy2\\cache\\org.scala-lang\\scala-library\\jars\\scala-library-2.11.8.jar")
settings.classpath.append("C:\\Users\\JTR\\.ivy2\\cache\\org.scala-lang\\scala-compiler\\jars\\scala-compiler-2.11.8.jar")
// missing jar here to trigger resolution issues
//settings.classpath.append("C:\\Users\\JTR\\.ivy2\\cache\\org.scala-lang\\scala-reflect\\jars\\scala-reflect-2.11.8.jar")
settings.plugin.appendToValue("C:\\Users\\jeff\\IdeaProjects\\scalanyzer\\target\\scala-2.11\\scalanyzer_2.11-1.0.jar")
settings.Yidedebug.value = true
settings.genPhaseGraph.value = "phases"
settings.Ylogcp.value = true
settings.nowarn.value = true
settings.developer.value = true
settings.withErrorFn (err => { println("ERROR" +err) })
val global = Global(settings, new ConsoleReporter(settings)
{
override def hasErrors: Boolean = false
})
def main (args : Array[String]) : Unit = {
val run = new global.Run() {
override def informUnitStarting(phase: Phase, unit: TestJF.global.CompilationUnit): Unit = {
println(s"Phase ${phase.name} with unit ${unit.source.path}")
}
}
run.compile(List("C:\\Users\\jeff\\IdeaProjects\\untitled\\src\\main\\java\\TestJf.scala"))
}