Skip to content

Commit fe71ac9

Browse files
committed
Change cli to compile with Scala 3
1 parent 9bb3467 commit fe71ac9

File tree

10 files changed

+47
-38
lines changed

10 files changed

+47
-38
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ jobs:
2727
jvm: "temurin:17"
2828
- name: Unit 3.x tests
2929
run: |
30-
./mill -i _[3.1.1].compile
30+
./mill -i cli3.compile
31+
./mill -i cli3.test
3132
./mill -i _[3.1.1].test
3233
jvm-tests:
3334
timeout-minutes: 120

build.sc

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ import _root_.scala.util.Properties
3333
implicit def millModuleBasePath: define.BasePath =
3434
define.BasePath(super.millModuleBasePath.value / "modules")
3535

36-
object cli extends Cli
36+
object cli extends Cli
37+
// remove once migrate to Scala 3
38+
object cli3 extends Cli { override def myScalaVersion = Scala.scala3 }
3739
object `cli-options` extends CliOptions
3840
object `build-macros` extends Cross[BuildMacros](Scala.defaultInternal, Scala.scala3)
3941
object options extends Cross[Options](Scala.defaultInternal, Scala.scala3)
@@ -196,9 +198,10 @@ class BuildMacros(val crossScalaVersion: String) extends ScalaCliCrossSbtModule
196198
def asyncScalacOptions(scalaVersion: String) =
197199
if (scalaVersion.startsWith("3")) Nil else Seq("-Xasync")
198200

199-
trait BuildLikeModule
200-
extends ScalaCliCrossSbtModule with ScalaCliPublishModule with HasTests
201-
with ScalaCliScalafixModule {
201+
trait ProtoBuildModule extends ScalaCliPublishModule with HasTests
202+
with ScalaCliScalafixModule
203+
204+
trait BuildLikeModule extends ScalaCliCrossSbtModule with ProtoBuildModule {
202205

203206
def scalacOptions = T {
204207
super.scalacOptions() ++ Seq("-Ywarn-unused", "-deprecation")
@@ -484,28 +487,32 @@ trait CliOptions extends SbtModule with ScalaCliPublishModule with settings.Scal
484487
def scalaVersion = Scala.defaultInternal
485488
}
486489

487-
trait Cli extends SbtModule with CliLaunchers with ScalaCliPublishModule with FormatNativeImageConf
488-
with HasTests with HasMacroAnnotations with ScalaCliScalafixModule {
489-
def scalaVersion = Scala.defaultInternal
490+
trait Cli extends SbtModule with ProtoBuildModule with CliLaunchers
491+
with HasMacroAnnotations with FormatNativeImageConf {
492+
493+
def millSourcePath = super.millSourcePath / os.up / "cli"
494+
495+
def myScalaVersion = Scala.defaultInternal
496+
497+
def scalaVersion = T(myScalaVersion)
498+
490499
def scalacOptions = T {
491-
super.scalacOptions() ++ Seq("-Xasync", "-Ywarn-unused", "-deprecation")
500+
super.scalacOptions() ++ asyncScalacOptions(scalaVersion()) ++ Seq("-Ywarn-unused")
492501
}
493502
def javacOptions = T {
494503
super.javacOptions() ++ Seq("--release", "16")
495504
}
496505
def moduleDeps = Seq(
497-
build(Scala.defaultInternal),
498-
`test-runner`(Scala.defaultInternal),
499-
`cli-options`
506+
build(myScalaVersion),
507+
`cli-options`,
508+
`test-runner`(myScalaVersion)
500509
)
501510

502511
def repositories = super.repositories ++ customRepositories
503512

504513
def ivyDeps = super.ivyDeps() ++ Agg(
505-
Deps.caseApp,
506514
Deps.coursierLauncher,
507515
Deps.coursierPublish,
508-
Deps.dataClass,
509516
Deps.jimfs, // scalaJsEnvNodeJs pulls jimfs:1.1, whose class path seems borked (bin compat issue with the guava version it depends on)
510517
Deps.jniUtils,
511518
Deps.jsoniterCore,
@@ -522,7 +529,7 @@ trait Cli extends SbtModule with CliLaunchers with ScalaCliPublishModule with Fo
522529

523530
object test extends Tests with ScalaCliScalafixModule {
524531
def moduleDeps = super.moduleDeps ++ Seq(
525-
build(Scala.defaultInternal).test
532+
build(myScalaVersion).test
526533
)
527534
}
528535
}
File renamed without changes.

modules/cli/src/main/scala/scala/cli/commands/CustomWindowsEnvVarUpdater.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package scala.cli.commands
22

33
import coursier.env._
4-
import dataclass._
54

65
// Only using this instead of coursier.env.WindowsEnvVarUpdater for the "\u0000" striping thing,
76
// that earlier version of the Scala CLI may have left behind.
87
// We should be able to switch back to coursier.env.WindowsEnvVarUpdater
98
// after a bit of time (once super early users used this code more).
109

11-
@data class CustomWindowsEnvVarUpdater(
10+
case class CustomWindowsEnvVarUpdater(
1211
powershellRunner: PowershellRunner = PowershellRunner(),
13-
@since
1412
useJni: Option[Boolean] = None
1513
) extends EnvVarUpdater {
1614

15+
def withUseJni(opt: Option[Boolean]) = copy(useJni = opt)
16+
1717
private lazy val useJni0 = useJni.getOrElse {
1818
// FIXME Should be coursier.paths.Util.useJni(), but it's not available from here.
1919
!System.getProperty("coursier.jni", "").equalsIgnoreCase("false")

modules/cli/src/main/scala/scala/cli/commands/Fmt.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,11 @@ object Fmt extends ScalaCommand[FmtOptions] {
4141
def readVersionFromFile(workspace: os.Path, logger: Logger): (Option[String], Boolean) = {
4242
case class ScalafmtVersionConfig(version: String = "")
4343
object ScalafmtVersionConfig {
44-
lazy val default = ScalafmtVersionConfig()
45-
implicit lazy val surface = metaconfig.generic.deriveSurface[ScalafmtVersionConfig]
46-
implicit lazy val decoder = metaconfig.generic.deriveDecoder[ScalafmtVersionConfig](default)
44+
lazy val default = ScalafmtVersionConfig()
45+
implicit lazy val surface: metaconfig.generic.Surface[ScalafmtVersionConfig] =
46+
metaconfig.generic.deriveSurface[ScalafmtVersionConfig]
47+
implicit lazy val decoder: metaconfig.ConfDecoder[ScalafmtVersionConfig] =
48+
metaconfig.generic.deriveDecoder[ScalafmtVersionConfig](default)
4749
}
4850

4951
val confName = ".scalafmt.conf"

modules/cli/src/main/scala/scala/cli/commands/Package.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package scala.cli.commands
22

33
import caseapp._
44
import coursier.launcher._
5-
import dependency.dependencyString
5+
import dependency._
66
import packager.config._
77
import packager.deb.DebianPackage
88
import packager.docker.DockerPackage

modules/cli/src/main/scala/scala/cli/internal/ProfileFileUpdater.scala

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,16 @@ object ProfileFileUpdater {
2828
): Boolean = {
2929

3030
def updated(content: String): Option[String] = {
31-
val start = s"# >>> $title >>>\n"
32-
val end = s"# <<< $title <<<\n"
31+
val start = s"# >>> $title >>>\n"
32+
val endStr = s"# <<< $title <<<\n"
3333
val withTags = "\n" +
3434
start +
35-
addition.stripSuffix("\n") + "\n" +
36-
end
35+
addition.stripSuffix("\n") + "\n" + endStr
3736
if (content.contains(withTags))
3837
None
3938
else
4039
Some {
41-
startEndIndices(start, end, content) match {
40+
startEndIndices(start, endStr, content) match {
4241
case None =>
4342
content + withTags
4443
case Some((startIdx, endIdx)) =>

modules/cli/src/main/scala/scala/cli/internal/ScalaJsLinker.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package scala.cli.internal
22

3+
import coursier.Repositories
34
import coursier.cache.{ArchiveCache, FileCache}
45
import coursier.util.Task
5-
import coursier.{Repositories, moduleString}
66
import org.scalajs.testing.adapter.{TestAdapterInitializer => TAI}
77

88
import java.io.File
99

10+
import scala.build.CoursierUtils._
1011
import scala.build.EitherCps.{either, value}
1112
import scala.build.errors.{BuildException, ScalaJsLinkingError}
1213
import scala.build.internal.{FetchExternalBinary, Runner, ScalaJsLinkerConfig}
@@ -36,13 +37,13 @@ object ScalaJsLinker {
3637
val scalaJsCliDep = {
3738
val mod =
3839
if (scalaJsCliVersion.contains("-sc"))
39-
mod"io.github.alexarchambault.tmp:scalajs-cli_2.13"
40-
else mod"org.scala-js:scalajs-cli_2.13"
40+
cmod"io.github.alexarchambault.tmp:scalajs-cli_2.13"
41+
else cmod"org.scala-js:scalajs-cli_2.13"
4142
coursier.Dependency(mod, scalaJsCliVersion)
4243
}
4344

4445
val forcedVersions = Seq(
45-
mod"org.scala-js:scalajs-linker_2.13" -> scalaJsVersion
46+
cmod"org.scala-js:scalajs-linker_2.13" -> scalaJsVersion
4647
)
4748

4849
val extraRepos =

modules/runner/src/main/scala-3-unstable/scala/cli/runner/Stacktrace.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package scala.cli.runner
22

33
object Stacktrace {
44

5-
def print(t: Throwable, prefix: String): Boolean =
5+
def print(t: Throwable, prefix: String, verbosity: Int): Boolean =
66
false
77

88
}

project/deps.sc

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,12 @@ object Deps {
6161
// Force using of 2.13 - is there a better way?
6262
def bloopConfig = ivy"io.github.alexarchambault.bleep:bloop-config_2.13:1.4.19-1"
6363
def bsp4j = ivy"ch.epfl.scala:bsp4j:2.0.0"
64-
def caseApp = ivy"com.github.alexarchambault::case-app:2.1.0-M13"
64+
def caseApp = ivy"com.github.alexarchambault:case-app_2.13:2.1.0-M13"
6565
def collectionCompat = ivy"org.scala-lang.modules::scala-collection-compat:2.7.0"
6666
// Force using of 2.13 - is there a better way?
6767
def coursierJvm = ivy"io.get-coursier:coursier-jvm_2.13:${Versions.coursier}"
68-
def coursierLauncher = ivy"io.get-coursier::coursier-launcher:${Versions.coursier}"
69-
def coursierPublish = ivy"io.get-coursier.publish::publish:0.1.0"
70-
def dataClass = ivy"io.github.alexarchambault::data-class:0.2.5"
68+
def coursierLauncher = ivy"io.get-coursier:coursier-launcher_2.13:${Versions.coursier}"
69+
def coursierPublish = ivy"io.get-coursier.publish:publish_2.13:0.1.0"
7170
// TODO - update to working version
7271
def dependency = ivy"io.get-coursier::dependency:0.2.2"
7372
def dockerClient = ivy"com.spotify:docker-client:8.16.0"
@@ -103,8 +102,8 @@ object Deps {
103102
def scalaJsTestAdapter = ivy"org.scala-js:scalajs-sbt-test-adapter_2.13:${Scala.scalaJs}"
104103
// Force using of 2.13 - is there a better way?
105104
def scalametaTrees = ivy"org.scalameta:trees_2.13:${Versions.scalaMeta}"
106-
def scalaPackager = ivy"org.virtuslab::scala-packager:${Versions.scalaPackager}"
107-
def scalaPackagerCli = ivy"org.virtuslab::scala-packager-cli:${Versions.scalaPackager}"
105+
def scalaPackager = ivy"org.virtuslab:scala-packager_2.13:${Versions.scalaPackager}"
106+
def scalaPackagerCli = ivy"org.virtuslab:scala-packager-cli_2.13:${Versions.scalaPackager}"
108107
// Force using of 2.13 - is there a better way?
109108
def scalaparse = ivy"com.lihaoyi:scalaparse_2.13:2.3.3"
110109
def scalaReflect(sv: String) = ivy"org.scala-lang:scala-reflect:$sv"

0 commit comments

Comments
 (0)