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 规则来修复。到目前为止,相关规则是
- 过程语法
- 显式结果类型
- 值 Eta 扩展:
fix.scala213.ExplicitNullaryEtaExpansion
在 scala/scala-rewrites - 自动应用:
fix.scala213.ExplicitNonNullaryApply
在 scala/scala-rewrites any2stringadd
转换:fix.scala213.Any2StringAdd
在 scala/scala-rewrites
你可以使用 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 开源库列表。