Scala工具删除所有未使用的代码

时间:2016-03-09 22:12:12

标签: scala sbt static-analysis unused-variables scala-meta

我正在为我使用的编辑器编写Scala插件,该插件会突出显示所有未使用的代码路径(可能未使用defsvalsclassesimplicits),并为用户提供从.scala文件中抽出它们的选项。

我该怎么做?为了简化问题,让我们假设我们只有一个单个根级.scala文件,对文件库或任何其他代码文件没有外部依赖。

理想情况下,我希望这是一个SBT插件,只要有一个这样的Foo.scala文件,就会吐出Foo_min.Scala文件并删除所有未使用的代码。

3 个答案:

答案 0 :(得分:4)

你需要某种语义API来遍历代码并提出像#34这样的问题;是否使用了这个变量/导入" ?

据我所知,Intellij使用var data = data.replace(/image/g, '/image/440x600/'); 来实现相同的目标。对于scala,您可以等待Meta programming System的2.0版本,其中(很可能)将支持语义API。

答案 1 :(得分:1)

Scalafix对此进行了重写:RemoveUnusedImports

按照这些说明运行它:https://scalacenter.github.io/scalafix/#Installation

答案 2 :(得分:0)

您基本上在寻找callgraph

Dotty Linker中实现了一个完整但复杂的Scala代码调用图。这是最先进的。然而,即使构建一个更简单的调用图也不是一项简单的任务。如果Meta实现被限制执行这样的任务,我不会感到惊讶。特别是,您需要非常小心 implicits 作用域,特别是考虑到元宏在typer之后扩展的事实。

创建自己的调用图需要符号,类型和隐式搜索。我担心您需要等到Scala Meta 2.0中的Semantic API发布。