gpt4 book ai didi

scala - 如何创建我的项目可以依赖的自定义 scalafmt 样式?

转载 作者:行者123 更新时间:2023-12-03 16:51:01 35 4
gpt4 key购买 nike

我有一堆 Scala 项目。他们应该共享一个共同的代码风格。我正在使用 scalafmt 来强制执行某些规则,但我必须创建一个

 .scalafmt.conf

对于每个项目。如果团队更改了 scalafmt 规则,我们就必须为每个项目手动更改它。所以这些文件很容易自行演变。

我怎样才能创建一个通用的 scalafmt.conf作为我自己的其他项目可以导入的依赖项?这样,一个项目仍然可以依赖于他们自己版本的代码风格——但是升级路径更直接,应该只包含升级依赖项。

Scalafmt 支持默认样式,例如:
 style = default

或者
 style  = defaultWithAlign

我基本上是在寻找一种方法来定义我自己的风格并在我的项目中引用它:
style = MyCompanyDefault

最佳答案

考虑定义一个自定义任务到 download .scalafmt.conf从远程存储库

lazy val remoteScalafmtConfig = taskKey[Unit]("Fetch .scalafmt from external repository")
remoteScalafmtConfig := {
import scala.sys.process._
streams.value.log.info("Downloading .scalafmt.conf config from remote repository")
val remoteScalafmtFile = "https://some/external/repo/.scalafmt.conf"
val baseDir = (Compile / baseDirectory).value
url(s"$remoteScalafmtFile") #> (baseDir / ".scalafmt.conf") !
}

然后有 compile任务 depend on remoteProtoFiles像这样的任务
compile in Compile := (compile in Compile).dependsOn(remoteScalafmtConfig).value

现在执行 sbt compile应该下载 .scalafmt.conf在编译执行之前进入项目的基本目录。

我们可以 create an sbt auto plugin分发到每个项目:
package example

import sbt._
import Keys._

object ScalafmtRemoteConfigPlugin extends AutoPlugin {
object autoImport {
lazy val remoteScalafmtConfig = taskKey[Unit]("Fetch .scalafmt from external repository")
}

import autoImport._
override lazy val projectSettings = Seq(
remoteScalafmtConfig := remoteScalafmtConfigImpl.value,
compile in Compile := (compile in Compile).dependsOn(remoteScalafmtConfig).value
)

lazy val remoteScalafmtConfigImpl = Def.task {
import scala.sys.process._
streams.value.log.info("Downloading .scalafmt config from remote repository...")
val remoteScalafmtFile = "https://github.com/guardian/tip/blob/master/.scalafmt.conf"
val baseDir = (Compile / baseDirectory).value
url(s"$remoteScalafmtFile") #> (baseDir / ".scalafmt.conf") !
}
}

现在在 project/plugins.sbt 中导入插件并通过 enablePlugins(ScalafmtRemoteConfigPlugin) 启用会自动下载 .scalafmt执行后 sbt compile .

关于scala - 如何创建我的项目可以依赖的自定义 scalafmt 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56627980/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com