用于删除所有未使用代码的 Scala 工具
Scala tool to remove all unused code
我正在为我使用的编辑器编写一个 Scala 插件,它会突出显示所有未使用的代码路径(可能未使用 defs
、vals
、classes
和 implicits
),并给用户一个选项,将它们从 .scala
文件中拉出。
我该怎么做?为了简化问题,让我们假设我们只有一个 单个 根级别 .scala
文件,对库或任何其他代码文件没有外部依赖性。
理想情况下,我希望这是一个 SBT 插件,给定一个这样的 Foo.scala
文件,将吐出 Foo_min.Scala
文件并删除所有未使用的代码。
您需要某种语义 API 来遍历代码并提出诸如 "is this variable/import ever used" ?
之类的问题
据我所知,Intellij 使用 Meta programming System
来实现相同的目标。对于 scala,你可以等待 scalameta
的 2.0 版本,它(很可能)将支持语义 API.
您基本上是在寻找 callgraph。
在 Dotty Linker 中实现了一个完整但复杂的 Scala 代码调用图。这是最先进的。然而,即使构建一个更简单的调用图也不是一项简单的任务。如果 Meta 实现会被限制执行这样的任务,我不会感到惊讶。特别是,您需要非常小心 implicits 和 scoping,尤其是考虑到元宏在 typer 之后扩展的事实。
创建您自己的调用图需要符号、类型和隐式搜索。恐怕你需要等到 Scala Meta 2.0 中的语义 API 发布。
Scalafix 对此进行了重写:RemoveUnusedImports
按照这些说明 运行 它:https://scalacenter.github.io/scalafix/#Installation
我正在为我使用的编辑器编写一个 Scala 插件,它会突出显示所有未使用的代码路径(可能未使用 defs
、vals
、classes
和 implicits
),并给用户一个选项,将它们从 .scala
文件中拉出。
我该怎么做?为了简化问题,让我们假设我们只有一个 单个 根级别 .scala
文件,对库或任何其他代码文件没有外部依赖性。
理想情况下,我希望这是一个 SBT 插件,给定一个这样的 Foo.scala
文件,将吐出 Foo_min.Scala
文件并删除所有未使用的代码。
您需要某种语义 API 来遍历代码并提出诸如 "is this variable/import ever used" ?
之类的问题据我所知,Intellij 使用 Meta programming System
来实现相同的目标。对于 scala,你可以等待 scalameta
的 2.0 版本,它(很可能)将支持语义 API.
您基本上是在寻找 callgraph。
在 Dotty Linker 中实现了一个完整但复杂的 Scala 代码调用图。这是最先进的。然而,即使构建一个更简单的调用图也不是一项简单的任务。如果 Meta 实现会被限制执行这样的任务,我不会感到惊讶。特别是,您需要非常小心 implicits 和 scoping,尤其是考虑到元宏在 typer 之后扩展的事实。
创建您自己的调用图需要符号、类型和隐式搜索。恐怕你需要等到 Scala Meta 2.0 中的语义 API 发布。
Scalafix 对此进行了重写:RemoveUnusedImports
按照这些说明 运行 它:https://scalacenter.github.io/scalafix/#Installation