Skip to content

How to update to scala 2.13 or 3? #684

Open
@mrt181

Description

@mrt181

What is needed to update to Scala 2.13 or 3 and make it work with exercism.
I am sure someone will do that in a PR but its likely a little more involved than just updating the build.sbt in each exercise?
The sbt-test-runner must be updated too?
Can you provide some directions?

Activity

ErikSchierboom

ErikSchierboom commented on Jun 22, 2021

@ErikSchierboom
Member

There are a couple of things that need to be done:

bobahop

bobahop commented on Sep 4, 2021

@bobahop
Member

I'm guessing this a work in progress?

I downloaded isogram via CLI and the build.sbt was set to scalaVersion := "2.12.8". The Metals extension in vscode reported that 2.12.8 may not work in future versions of Metals and that Scala should be updated to at least 2.12.12. I jumped through some hoops, some of them probably unnecessary, and after being prompted to download/import a couple files the build.sbt was set to scalaVersion := "2.12.14".

I then looked at several previously downloaded Scala exercises and they all had scalaVersion := "2.12.14" already.

Just to inform you that updating the Scala version is appreciated and, at least for the vscode Metals extension, somewhat needed.

ErikSchierboom

ErikSchierboom commented on Sep 7, 2021

@ErikSchierboom
Member

Ideally, we'd upgrade to Scala 3 as that should give us a bit of a performance bump that might actually get the test runner to run within the allotted time. I have no idea how hard it would be to upgrade to Scala 3 though.

luigip

luigip commented on Oct 14, 2021

@luigip

Should be pretty easy to update the exercises to work with Scala 3. Just need to update the version numbers in the build.sbt file, and the imports in the test files. Also you need to use sbt version 1.5.x +.

I wrote a blog about it (including some tips for working with IntelliJ) at http://luigip.atwebpages.com/?p=275

This is the script I run to do the above conversions (I don't think the build.properties bit is actually relevant to the downloads but it's something I ran into where it was set by IntelliJ if I tried to import the module before running sbt from the terminal first).

It works in 95% of cases but there are a few odd cases where there are imports of Scalaz or I think the one involving an optics library, that need a bit of manual intervention. Also I remember 1 case where a test used procedure syntax (def xyz {}) which is now deprecated.

#!/usr/bin/env bash
 
# Check we're in a valid directory
if [[ $PWD =~ xercism/scala/.+ ]] ; then
    echo "directory OK"
  else
    echo "invalid directory"; exit 1
fi
 
# build.sbt: Replace scala and scalatest versions
perl -i -0pe 's/scalaVersion :=.*/scalaVersion := "3.0.1"/' build.sbt
perl -i -0pe 's/"scalatest" % "[^"]*"/"scalatest" % "3.2.9"/' build.sbt
 
# build.properties (if supplied): Replace sbt version
if [[ -a project/build.properties ]] ; then
perl -i -0pe 's/sbt\.version=.*/sbt.version=1.5.5/' project/build.properties
echo build.properties updated
fi
 
# test source: Change scalatest imports
filename=$(find src/test/scala/*.scala |head -1)
## FunSuite
perl -i -0pe 's/import org.scalatest.{Matchers, FunSuite}/import org.scalatest.funsuite.AnyFunSuite\nimport org.scalatest.matchers.should.Matchers/' "$filename"
perl -i -0pe 's/import org.scalatest.{FunSuite, Matchers}/import org.scalatest.funsuite.AnyFunSuite\nimport org.scalatest.matchers.should.Matchers/' "$filename"
perl -i -0pe 's/extends FunSuite/extends AnyFunSuite/' "$filename"
## FlatSpec
perl -i -0pe 's/import org.scalatest.{Matchers, FlatSpec}/import org.scalatest.flatspec.AnyFlatSpec\nimport org.scalatest.matchers.should.Matchers/' "$filename"
perl -i -0pe 's/extends FlatSpec/extends AnyFlatSpec/' "$filename"
ErikSchierboom

ErikSchierboom commented on Oct 14, 2021

@ErikSchierboom
Member

@luigip That sounds great! Would you be willing to submit a PR?

LarsWestergren

LarsWestergren commented on Aug 21, 2022

@LarsWestergren
Contributor

I'm willing to try this.

  • Exercises. Remaining compile warnings (will fix if time):
    • alphametics - 1 feature, 3 deprecation warnings
    • armstrong numbers - 1 deprecation warning
    • binary-search-tree - 1 unreachable match warning
    • forth - 1 pattern match exhaustivity warning
    • grade-school - 1 deprecation warning
    • lens-person - 10 deprecation warnings
    • linked-list - 6 unchecked runtime types warnings
    • matching-brackets - 1 pattern match exhaustivity warning
    • matrix - 1 deprecation warning
    • nth-prime - 2 deprecation warnings
    • ocatal - 1 deprecation warning
    • pangram - 1 deprecation warning
    • say - 1 deprecation warning
    • sgf-parsing - 1 pattern match exhaustivity warning
    • simple-linked-list - 2 unchecked runtime types warnings
    • spiral-matrix - 1 deprecation warning
    • trinary - 1 deprecation warning
    • word-count - 1 deprecation warning
    • wordy - 1 pattern match exhaustivity warning
  • Test Generators
    Docs
    scala test-runner project
ErikSchierboom

ErikSchierboom commented on Aug 23, 2022

@ErikSchierboom
Member

@LarsWestergren Thanks a ton!

asarkar

asarkar commented on Dec 20, 2023

@asarkar

Hi, I'm planning to start the Scala track and wanted to check if there is any interest in moving forward with this ticket.

ErikSchierboom

ErikSchierboom commented on Jan 2, 2024

@ErikSchierboom
Member

Definitely! I see that you also posted at #734 (comment), which is great!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @LarsWestergren@ErikSchierboom@mrt181@luigip@asarkar

      Issue actions

        How to update to scala 2.13 or 3? · Issue #684 · exercism/scala