Lunatech course - "Moving forward from Scala 2 to Scala 3"
This release bump the Scala version to 3.0.0-M3, which is the Scala 3.0.0 Developer Preview release. This is a major milestone as a prerelease marks a stabilisation of the language syntax. The M3 release will be followed by the first release candidate (RC1).
See the 3.0.0-M3 blog post for more details on the release.
The impact of the 3.0.0-M3 release on this course is found in the syntax change in given instances with the drop of the as
keyword and the change to using with
. See the relevant doc page for more details.
Regression: a workaround for Scala 3.0.0-M3 issue 10857 see issue #73
Changes in this release:
Eql
typeclass has been renamed CanEqual
#10449
Changes in this release:
Changes in this release:
0.25.0-RC2
to 0.27.0-RC1
Changes in this release:
0.24.0
to 0.25.0-RC2
ScalaTest
to MUnit
git
dotc
code re-writesNOTE: the slide deck is unchanged from the previous release
IDE support:
- VCS with Metals v0.9.1 has support for 0.25.0-RC2
- IntelliJ with Scala Plugin nightly build
The default branch of this repository was renamed to main
. If you have a local clone or fork of the repository, please execute the following commands in this clone/fork to apply this name change:
$ git checkout exercises-master
$ git branch -m exercises-master main
$ git fetch upstream
$ git branch --unset-upstream
$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
Changes in this release:
scalafmt
in exercise 0 and then carrying it forward using linearize
/delinearize
and interactive rebasing.scalafmt
hasn't been added to the project for an obvious reason: as most exercises use new Dotty syntax, scalafmt
is not going to be very helpful as it doesn't (yet) support Dotty's syntax. I include the scalafmt
config at the end of the release notes.scalafmt configuration used to reformat exercise 0 (note that some manual reformatting was applied afterwards (specifically in messages sent to actors using the tell
(!
) method.
$ cat .scalafmt.conf
version = "2.5.3"
align.preset = none
align.openParenCallSite = true
align.openParenDefnSite = true
//align.multiline = true
rewrite.rules = [AvoidInfix,
RedundantBraces,
RedundantParens,
SortImports,
PreferCurlyFors,
SortModifiers]
rewrite.sortModifiers.order = ["private", "protected", "implicit",
"final", "sealed", "abstract",
"override", "lazy"]
danglingParentheses = true
docstrings = ScalaDoc
maxColumn = 100
spaces.inImportCurlyBraces = true
continuationIndent.callSite = 2
continuationIndent.defnSite = 2
newlines.alwaysBeforeElseAfterCurlyIf = true
rewrite.neverInfix.excludeFilters = [
and
min
max
until
to
by
eq
ne
"should.*"
"contain.*"
"must.*"
in
ignore
be
taggedAs
thrownBy
synchronized
have
when
size
only
noneOf
oneElementOf
noElementsOf
atLeastOneElementOf
atMostOneElementOf
allElementsOf
inOrderElementsOf
theSameElementsAs
]