将scalac插件拆分为多个文件
发布时间:2020-12-16 18:56:13 所属栏目:安全 来源:网络整理
导读:我想将我的 scalac插件拆分成多个文件.这听起来很容易,但由于导入global._行导致的路径依赖类型问题,我无法将其拉下来. 这是Lex Spoon的示例插件: package localhostimport scala.tools.nscimport nsc.Globalimport nsc.Phaseimport nsc.plugins.Pluginimpo
我想将我的
scalac插件拆分成多个文件.这听起来很容易,但由于导入global._行导致的路径依赖类型问题,我无法将其拉下来.
这是Lex Spoon的示例插件: package localhost import scala.tools.nsc import nsc.Global import nsc.Phase import nsc.plugins.Plugin import nsc.plugins.PluginComponent class DivByZero(val global: Global) extends Plugin { import global._ val name = "divbyzero" val description = "checks for division by zero" val components = List[PluginComponent](Component) private object Component extends PluginComponent { val global: DivByZero.this.global.type = DivByZero.this.global val runsAfter = "refchecks" // Using the Scala Compiler 2.8.x the runsAfter should be written as below // val runsAfter = List[String]("refchecks"); val phaseName = DivByZero.this.name def newPhase(_prev: Phase) = new DivByZeroPhase(_prev) class DivByZeroPhase(prev: Phase) extends StdPhase(prev) { override def name = DivByZero.this.name def apply(unit: CompilationUnit) { for ( tree @ Apply(Select(rcvr,nme.DIV),List(Literal(Constant(0)))) <- unit.body; if rcvr.tpe <:< definitions.IntClass.tpe) { unit.error(tree.pos,"definitely division by zero") } } } } } 如何在没有导入global._范围的情况下将Component和DivByZeroPhase放在他们自己的文件中? 解决方法
这是一个非常古老的项目,我做了同样的事情:
https://github.com/jsuereth/osgi-scalac-plugin/blob/master/src/main/scala/scala/osgi/compiler/OsgiPlugin.scala 如果您不需要从全局传递路径依赖类型,请不要担心尝试保持其“this.global”部分相关. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |