跳转至

Scala

linthis 使用 Scalafix 进行检查,使用 Scalafmt 进行 Scala 代码格式化。

支持的扩展名

  • .scala
  • .sc

工具

工具 类型 描述
Scalafix 检查器 Scala 重构和代码检查工具
Scalafmt 格式化器 Scala 代码格式化工具

安装

使用 Coursier

# 首先安装 Coursier
curl -fL https://github.com/coursier/launchers/raw/master/cs-x86_64-apple-darwin.gz | gzip -d > cs
chmod +x cs
./cs install cs

# 安装 scalafix 和 scalafmt
cs install scalafix
cs install scalafmt

使用 sbt(项目级别)

添加到 project/plugins.sbt

addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.11.1")
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2")

配置

Scalafix

在项目根目录创建 .scalafix.conf

rules = [
  DisableSyntax,
  ExplicitResultTypes,
  NoAutoTupling,
  OrganizeImports,
  RemoveUnused
]

DisableSyntax {
  noVars = true
  noThrows = true
  noNulls = true
  noReturns = true
}

OrganizeImports {
  groups = [
    "re:javax?\\."
    "scala."
    "*"
  ]
}

Scalafmt

在项目根目录创建 .scalafmt.conf

version = "3.7.17"

runner.dialect = scala3

maxColumn = 100

indent {
  main = 2
  callSite = 2
}

align {
  preset = more
}

rewrite {
  rules = [
    RedundantBraces,
    RedundantParens,
    SortModifiers
  ]
}

newlines {
  beforeCurlyLambdaParams = multilineWithCaseOnly
}

用法

# 检查 Scala 文件
linthis --lang scala --check-only

# 格式化 Scala 文件
linthis --lang scala --format-only

# 检查并格式化
linthis --lang scala

常见问题

未使用的导入

// 错误
import scala.collection.mutable.ListBuffer  // 未使用

object Main extends App {
  println("Hello")
}

// 正确
object Main extends App {
  println("Hello")
}

显式结果类型

// 错误(公共方法缺少返回类型)
def calculate(x: Int) = x * 2

// 正确
def calculate(x: Int): Int = x * 2

严重性映射

Scalafix 级别 linthis 严重性
error 错误
warning 警告
info 信息

行内禁用

// scalafix:off DisableSyntax.noVars
var mutableVar = 1
// scalafix:on

// 单行
var x = 1 // scalafix:ok DisableSyntax.noVars