/scala3-example-project

An example sbt project that compiles using Dotty

Primary LanguageScalaOtherNOASSERTION

Example sbt project that compiles using Scala 3

Build Status

Usage

This is a normal sbt project, you can compile code with sbt compile and run it with sbt run, sbt console will start a Scala 3 REPL.

If compiling this example project fails, you probably have a global sbt plugin that does not work with Scala 3, try to disable all plugins in ~/.sbt/1.0/plugins and ~/.sbt/1.0.

IDE support

Scala 3 comes built-in with IDE support, to try it out see IDE support for Scala 3

Making a new Scala 3 project

The fastest way to start a new Scala 3 project is to use one of the following templates:

Using Scala 3 in an existing project

You will need to make the following adjustments to your build:

project/plugins.sbt

addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.3")

Here, dotty is the project name for technologies that are considered for inclusion in Scala 3. Since the development of Scala 3 is not done, the word dotty and Dotty still can be seen in some names of Scala 3 related tools, sbt plugins, etc.

project/build.properties

sbt.version=1.4.7

You must use sbt 1.4 or newer; older versions of sbt are not supported.

build.sbt

Set up the Scala 3 version:

scalaVersion := "3.0.0-RC1"

Nightly builds

If the latest release of Scala 3 is missing a bugfix or feature you need, you may wish to use a nightly build. Look at the bottom of the list of releases to find the version number for the latest nightly build. Alternatively, you can set scalaVersion := dottyLatestNightlyBuild.get to always use the latest nightly build of Scala 3.

Getting your project to compile with Scala 3

When porting an existing project, it's a good idea to start out with the Scala 2 compatibility mode (note that this mode affects typechecking and thus may prevent some valid Scala 3 code from compiling) by adding to your build.sbt:

scalacOptions ++= { if (isDotty.value) Seq("-source:3.0-migration") else Nil }

Using the isDotty setting ensures that this option will only be set when compiling with Scala 3. For more information on the -source flag, see language versions; for more information on migrating to Scala 3, see the migration guide.

If your build contains dependencies that have only been published for Scala 2.x, you may be able to get them to work on Scala 3 by replacing:

    libraryDependencies += "a" %% "b" % "c"

by:

    libraryDependencies += ("a" %% "b" % "c").withDottyCompat(scalaVersion.value)

This will have no effect when compiling with Scala 2.x, but when compiling with Scala 3 this will change the cross-version to a Scala 2.x one. This works because Scala 3 is currently retro-compatible with Scala 2.x.

Alternatively, to set this setting on all your dependencies, you can use:

    libraryDependencies := libraryDependencies.value.map(_.withDottyCompat(scalaVersion.value))

Discuss

Feel free to come chat with us on the Scala 3 gitter!