scala - 基于scala中包的自动修复目录结构

标签 scala package sbt scalafix

我有一个文件 src/main/scala/foo.scala 需要在包 bar 中。理想情况下,该文件应位于 src/main/scala/bar/foo.scala 中。

// src/main/scala/foo.scala


package bar

// ... 

如何在整个项目中自动修复此问题,使文件夹结构与包结构匹配?

是否有任何 SBT 插件等可以帮助我解决此问题?

最佳答案

据我所知,没有这样的工具,尽管 AFAIR IntelliJ 可以警告包目录不匹配。

如果是自定义 scalafix ( https://scalacenter.github.io/scalafix/ ) 规则,我能想到的最好 - scalafix/scalameta 将用于检查文件的实际包,将其转换为预期目录,如果它们不同,则移动文件。

我建议使用 scalafix/scalameta,因为有一些特殊情况,例如:

  • 你可以这样写你的包:

    package a
    package b
    package c
    

    几乎package a.b.c除了它会自动从 a 导入所有内容和 b

  • 你可以拥有package object在你的文件中,然后如果你有

package a.b

package object c

这个文件应该在a/b/c目录

所以我更愿意检查文件是否不属于使用某些现有工具的任何文件。

如果你确定你没有这样的情况(我不会不检查)你可以:

  • 用正则表达式匹配第一行 ( ^package (.*) )
  • 翻译a.b.c进入a/b/c ( matched.split('.').map(_.trim).mkString(File.separator) )
  • 将生成的位置与实际位置进行比较(我建议解析绝对文件位置)
  • 必要时移动文件

如果可能有比这更复杂的情况,我可以通过查询 scalafix/scalameta 实用程序来替换第一步。

关于scala - 基于scala中包的自动修复目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61693510/

相关文章:

scala - 在用于 neo4j Spark 连接器的 build.sbt 中使用哪些依赖项?

java - Scala SBT 和 scala-library.jar 文件包含

scala - 可堆叠特征中的继承和代码重用

java - 有谁知道一个代表所有Java包的图表

scala - 如何使用 SBT 和 Scala 在开发和生产中正确管理 logback 配置?

apache-spark - sbt 程序集着色以创建 fat jar 以在 Spark 上运行

java - Spark 2.0 中的字符串、数据集对

scala - Scala可以比较不兼容对象的原因和/或好处是什么?

package - 如何在 Ada 中用一条语句包含多个包?

meteor - 使用陨石包的特定分支