You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SBT ScalaFmt插件中直接传入配置文件替代字符串拼接

解决SBT插件中直接读取配置文件替代字符串拼接的问题

你可以把scalafmt的配置文件作为插件的资源文件嵌入,然后在代码中直接读取这个资源的内容,替代手动拼接字符串的方式。具体步骤如下:

第一步:添加配置文件到插件资源目录

在你的SBT插件项目中,创建src/main/resources目录(如果还没有的话),然后把你的.scalafmt-common.conf文件放到这个目录下。文件内容就是你之前拼接的配置:

version = 3.6.1
runner.dialect = scala213source3

project.git = true
preset = default

align.preset = none
align.tokens = [
  {code = "<-"},
]

docstrings.style = keep
maxColumn = 120

第二步:修改插件代码读取资源文件

更新你的OpenElectronsScalaFmtPlugin代码,从资源中读取配置文件内容,替代手动拼接字符串:

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") := {
      // 从插件资源中读取配置文件内容
      val configContent = Option(getClass.getResourceAsStream("/.scalafmt-common.conf"))
        .map(IO.readBytes)
        .getOrElse(throw new RuntimeException("无法找到scalafmt配置资源文件"))
      
      IO.write(file(".scalafmt-common.conf"), configContent)
    }
  }
}

关键说明

  • getClass.getResourceAsStream("/.scalafmt-common.conf"):从插件的classpath中读取指定的资源文件,路径开头的/表示根路径。
  • IO.readBytes:sbt的IO工具类会自动处理输入流的读取和关闭,避免手动管理流的麻烦。
  • 增加了空值判断,如果找不到资源文件会抛出明确的异常,方便排查问题。

这样修改后,你可以直接在IDE中编辑.scalafmt-common.conf文件,享受语法高亮和格式提示,再也不用手动拼接字符串了。

内容的提问来源于stack exchange,提问作者joesan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:20:08