scala 使用公共配置文件的SBT格式化程序插件

svmlkihl  于 2023-01-02  发布在  Scala
关注(0)|答案(1)|浏览(122)

我有下面的代码:

package my.package

import sbt._
import Keys._

object OpenElectronsScalaFmtPlugin extends AutoPlugin {
  override def trigger = allRequirements
  override def requires = plugins.JvmPlugin
  override def buildSettings: Seq[Def.Setting[_]] = {
    SettingKey[Unit]("scalafmtGenerateConfig") :=
      IO.write(
        // writes to file once when build is loaded
        file(".scalafmt-common.conf"),
        ("version = 3.6.1\n" +
          "runner.dialect = scala213source3\n\n" +
          "project.git = true\n" +
          "preset = default\n\n" +
          "align.preset = none\n" +
          "align.tokens = [\n" +
          "  {code = \"<-\"},\n" +
          "]\n\n" +
          "docstrings.style = keep\n" +
          "maxColumn = 120\n\n"
          ).stripMargin.getBytes("UTF-8")
      )
  }
}

正如你所看到的,我一个接一个地追加条目,这让我觉得很乏味。我的IDE没有帮助我查看IO.write函数,我想知道它的参数是什么,这样我就可以将.scalafmt-common.conf作为一个文件而不是单个元素传入。

nc1teljy

nc1teljy1#

以下是我的结论:

val commonScalaFormatConfig: String =
    """
      |version = 3.6.1
      |runner.dialect = scala213source3
      |
      |project.git = true
      |preset = default
      |
      |align.preset = none
      |align.tokens = [
      |  {code = "<-"},
      |]
      |
      |docstrings.style = keep
      |maxColumn = 120
      |
      |rewrite.rules = [
      |  SortImports,
      |  AvoidInfix,
      |]
      |
      |spaces.inImportCurlyBraces = true
      |includeNoParensInSelectChains = false
      |trailingCommas = preserve
      |
      |continuationIndent {
      |  callSite = 2
      |  defnSite = 2
      |  extendSite = 2
      |}
      |
      |optIn {
      |  forceBlankLineBeforeDocstring = false
      |}
      |
      |newlines {
      |  source = keep
      |  afterCurlyLambdaParams = preserve
      |  beforeCurlyLambdaParams = multilineWithCaseOnly
      |  topLevelBodyIfMinStatements = []
      |}
      |""".stripMargin

  override def trigger = allRequirements
  override def requires = plugins.JvmPlugin
  override def buildSettings: Seq[Def.Setting[_]] = {
    SettingKey[Unit]("scalafmtGenerateConfig") :=
      IO.write(
        // writes to file once when build is loaded
        file(".scalafmt-common.conf"), commonScalaFormatConfig.stripMargin.getBytes("UTF-8")
      )
  }

不完全是我所期望的,但至少比我原来的版本好了一步。
另一种方法是将conf文件放在某个位置,然后使用IO.copyFromFile(...,...)从那里读取它。

相关问题