簡體   English   中英

SBT 使用通用配置文件的 Formatter 插件

[英]SBT Formatter Plugin Using Common Config File

我有以下代碼:

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 function,我想知道參數是什么,以便我可以將 a.scalafmt-common.conf 作為文件而不是單個元素傳遞。 有任何想法嗎?

這是我想出的:

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(..., ...) 從那里讀取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM