Scala 3 迁移指南

迁移工具概览

语言

Scala 编译器

迁移已在两个编译器中事先经过精心准备,以便过渡轻松而顺利。

Scala 2.13 编译器

Scala 2.13 编译器支持 -Xsource:3,此选项可启用迁移警告以及某些 Scala 3 语法和行为。

Scala 2 with -Xsource:3 页面详细解释了此标志。

Scala 3 编译器

迁移模式

类似地,Scala 3 编译器带有 -source:3.0-migration 选项。在此模式下,它接受一些旧的 Scala 2.13 语法,并发出警告以解释更改。

更重要的是,您可以将其与 -rewrite 结合使用,以自动修补您的代码。

Scala 3 迁移模式 页面中了解更多相关信息。

语法重写

一旦你的代码在 Scala 3 中编译,你可以使用 语法重写 选项将其转换为新的可选 Scala 3 语法。

构建工具

sbt

在 sbt 1.4 中需要 sbt-dotty 插件来获得对 Scala 3 的支持。自 sbt 1.5 以来,它不再有用。

sbt 开箱即用地支持 Scala 3。所有常见任务和设置都旨在以相同的方式工作。许多 sbt 插件也应该完全相同地工作。

为了帮助迁移,sbt 1.5 引入了新的 Scala 3 特定的交叉版本

// Use a Scala 2.13 library in Scala 3
libraryDependency += ("org.foo" %% "foo" % "1.0.0").cross(CrossVersion.for3Use2_13)

// Use a Scala 3 library in Scala 2.13 
libraryDependency += ("org.bar" %% "bar" % "1.0.0").cross(CrossVersion.for2_13Use3)

Mill

Mill 0.9.x 支持 Scala 3。

Maven

自 4.5.1 以来,Scala Maven 插件支持 Scala 3。

代码编辑器和 IDE

Metals

Metals 是 VS Code 的 Scala 扩展。它还适用于 Vim、Emacs、Sublime Text 和其他编辑器。

IntelliJ IDEA

适用于 IntelliJ 的 Scala 插件 支持 Scala 3。

格式化工具

Scalafmt

Scalafmt 自 v3.0.0 起支持 Scala 2.13 和 Scala 3。

要启用 Scala 3 格式化,你必须在 .scalafmt.conf 文件中设置 runner.dialect = scala3

如果你想有选择地启用它,你可以设置 fileOverride 配置

//.scalafmt.conf
fileOverride {
  "glob:**/scala-3*/**" {
    runner.dialect = scala3
  }
}

Scalafmt 还可以使用 Scala 3 重写 来强制执行新的 Scala 3 语法。

迁移工具

Scalafix

Scalafix 是一个用于 Scala 的重构工具。

不兼容性表 显示了哪些不兼容性可以通过现有的 Scalafix 规则来修复。到目前为止,相关规则是

你可以使用 sbt-scalafix 插件在 sbt 中应用这些规则。它们也用于下面描述的 sbt-scala3-migrate 中。

sbt 的 Scala 3 迁移插件

Scala 3 Migrate 是一个 sbt 插件,它可以在迁移到 Scala 3 期间帮助你。

它提出了一种基于四个 sbt 命令的渐进式方法

  • migrateDependencies 帮助你更新 libraryDependencies 列表
  • migrateScalacOptions 帮助你更新 scalacOptions 列表
  • migrateSyntax 修复了 Scala 2.13 和 Scala 3 之间的一些语法不兼容性
  • migrateTypes 尝试通过推断类型并在需要时解析隐式函数来将你的代码编译到 Scala 3。

有关如何使用 Scala 3 Migrate 的详细说明,请参见 此处

Scaladex

Scaladex 中查看 Scala 3 开源库列表。

此页面的贡献者