Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to update to scala 2.13 or 3? #684

Open
mrt181 opened this issue Jun 22, 2021 · 9 comments
Open

How to update to scala 2.13 or 3? #684

mrt181 opened this issue Jun 22, 2021 · 9 comments

Comments

@mrt181
Copy link

mrt181 commented Jun 22, 2021

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?

@ErikSchierboom
Copy link
Member

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

@bobahop
Copy link
Member

bobahop commented Sep 4, 2021

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
Copy link
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
Copy link

luigip commented Oct 14, 2021

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
Copy link
Member

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

@LarsWestergren
Copy link
Contributor

LarsWestergren commented Aug 21, 2022

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
Copy link
Member

@LarsWestergren Thanks a ton!

@LarsWestergren LarsWestergren mentioned this issue Aug 31, 2022
@asarkar
Copy link

asarkar commented Dec 20, 2023

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
Copy link
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
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants