@@ -51,7 +51,7 @@ object Deps {
51
51
// The Scala version to use
52
52
// When updating, run "Publish Bridges" Github Actions for the new version
53
53
// and then add to it `bridgeScalaVersions`
54
- val scalaVersion = "2.13.15 "
54
+ val scalaVersion = "3.6.2 "
55
55
val scala2Version = "2.13.15"
56
56
// The Scala 2.12.x version to use for some workers
57
57
val workerScalaVersion212 = "2.12.20"
@@ -65,14 +65,21 @@ object Deps {
65
65
66
66
object Scalajs_1 {
67
67
val scalaJsVersion = "1.18.1"
68
- val scalajsEnvJsdomNodejs = ivy"org.scala-js::scalajs-env-jsdom-nodejs:1.1.0"
69
- val scalajsEnvExoegoJsdomNodejs = ivy"net.exoego::scalajs-env-jsdom-nodejs:2.1.0"
70
- val scalajsEnvNodejs = ivy"org.scala-js::scalajs-env-nodejs:1.4.0"
71
- val scalajsEnvPhantomjs = ivy"org.scala-js::scalajs-env-phantomjs:1.0.0"
72
- val scalajsEnvSelenium = ivy"org.scala-js::scalajs-env-selenium:1.1.1"
73
- val scalajsSbtTestAdapter = ivy"org.scala-js::scalajs-sbt-test-adapter:${scalaJsVersion}"
74
- val scalajsLinker = ivy"org.scala-js::scalajs-linker:${scalaJsVersion}"
75
- val scalajsImportMap = ivy"com.armanbilge::scalajs-importmap:0.1.1"
68
+ val scalajsEnvJsdomNodejs =
69
+ ivy"org.scala-js::scalajs-env-jsdom-nodejs:1.1.0".withDottyCompat(scalaVersion)
70
+ val scalajsEnvExoegoJsdomNodejs =
71
+ ivy"net.exoego::scalajs-env-jsdom-nodejs:2.1.0".withDottyCompat(scalaVersion)
72
+ val scalajsEnvNodejs = ivy"org.scala-js::scalajs-env-nodejs:1.4.0".withDottyCompat(scalaVersion)
73
+ val scalajsEnvPhantomjs =
74
+ ivy"org.scala-js::scalajs-env-phantomjs:1.0.0".withDottyCompat(scalaVersion)
75
+ val scalajsEnvSelenium =
76
+ ivy"org.scala-js::scalajs-env-selenium:1.1.1".withDottyCompat(scalaVersion)
77
+ val scalajsSbtTestAdapter =
78
+ ivy"org.scala-js::scalajs-sbt-test-adapter:${scalaJsVersion}".withDottyCompat(scalaVersion)
79
+ val scalajsLinker =
80
+ ivy"org.scala-js::scalajs-linker:${scalaJsVersion}".withDottyCompat(scalaVersion)
81
+ val scalajsImportMap =
82
+ ivy"com.armanbilge::scalajs-importmap:0.1.1".withDottyCompat(scalaVersion)
76
83
}
77
84
78
85
object Scalanative_0_5 {
@@ -99,9 +106,11 @@ object Deps {
99
106
}
100
107
object Play_2_7 extends Play {
101
108
val playVersion = "2.7.9"
109
+ override def scalaVersion: String = Deps.scala2Version
102
110
}
103
111
object Play_2_8 extends Play {
104
112
val playVersion = "2.8.22"
113
+ override def scalaVersion: String = Deps.scala2Version
105
114
}
106
115
object Play_2_9 extends Play {
107
116
val playVersion = "2.9.6"
@@ -115,12 +124,13 @@ object Deps {
115
124
val acyclic = ivy"com.lihaoyi:::acyclic:0.3.15"
116
125
val ammoniteVersion = "3.0.1"
117
126
val asmTree = ivy"org.ow2.asm:asm-tree:9.7.1"
118
- val bloopConfig = ivy"ch.epfl.scala::bloop-config:1.5.5"
127
+ val bloopConfig = ivy"ch.epfl.scala::bloop-config:1.5.5".withDottyCompat(scalaVersion)
119
128
120
129
val coursierVersion = "2.1.24"
121
- val coursier = ivy"io.get-coursier::coursier:$coursierVersion"
130
+ val coursier = ivy"io.get-coursier::coursier:$coursierVersion".withDottyCompat(scalaVersion)
122
131
val coursierInterface = ivy"io.get-coursier:interface:1.0.27"
123
- val coursierJvm = ivy"io.get-coursier::coursier-jvm:$coursierVersion"
132
+ val coursierJvm =
133
+ ivy"io.get-coursier::coursier-jvm:$coursierVersion".withDottyCompat(scalaVersion)
124
134
125
135
val cask = ivy"com.lihaoyi::cask:0.9.4"
126
136
val castor = ivy"com.lihaoyi::castor:0.3.0"
@@ -151,38 +161,45 @@ object Deps {
151
161
val osLib = ivy"com.lihaoyi::os-lib:0.11.4-M5"
152
162
val pprint = ivy"com.lihaoyi::pprint:0.9.0"
153
163
val mainargs = ivy"com.lihaoyi::mainargs:0.7.6"
154
- val millModuledefsVersion = "0.11.2 "
164
+ val millModuledefsVersion = "0.11.3-M3 "
155
165
val millModuledefsString = s"com.lihaoyi::mill-moduledefs:${millModuledefsVersion}"
156
166
val millModuledefs = ivy"${millModuledefsString}"
157
167
val millModuledefsPlugin =
158
168
ivy"com.lihaoyi:::scalac-mill-moduledefs-plugin:${millModuledefsVersion}"
159
169
// can't use newer versions, as these need higher Java versions
160
170
val testng = ivy"org.testng:testng:7.5.1"
161
171
val sbtTestInterface = ivy"org.scala-sbt:test-interface:1.0"
162
- def scalaCompiler(scalaVersion: String) = ivy"org.scala-lang:scala-compiler:${scalaVersion}"
163
- val scalafmtDynamic = ivy"org.scalameta::scalafmt-dynamic:3.8.5"
172
+ def scalaCompiler(scalaVersion: String) = {
173
+ if (ZincWorkerUtil.isScala3(scalaVersion)) ivy"org.scala-lang:scala3-compiler_3:${scalaVersion}"
174
+ else ivy"org.scala-lang:scala-compiler:${scalaVersion}"
175
+ }
176
+ val scalafmtDynamic = ivy"org.scalameta::scalafmt-dynamic:3.8.5".withDottyCompat(scalaVersion)
164
177
def scalap(scalaVersion: String) = ivy"org.scala-lang:scalap:${scalaVersion}"
165
- def scalaReflect(scalaVersion: String) = ivy"org.scala-lang:scala-reflect:${scalaVersion}"
178
+ def scalaReflect(scalaVersion: String) =
179
+ if (ZincWorkerUtil.isScala3(scalaVersion))
180
+ ivy"org.scala-lang:scala-reflect:${Deps.scala2Version}"
181
+ else ivy"org.scala-lang:scala-reflect:${scalaVersion}"
166
182
val scoverage2Version = "2.2.1"
167
183
val scalacScoverage2Plugin = ivy"org.scoverage:::scalac-scoverage-plugin:${scoverage2Version}"
168
184
val scalacScoverage2Reporter = ivy"org.scoverage::scalac-scoverage-reporter:${scoverage2Version}"
169
185
val scalacScoverage2Domain = ivy"org.scoverage::scalac-scoverage-domain:${scoverage2Version}"
170
186
val scalacScoverage2Serializer =
171
187
ivy"org.scoverage::scalac-scoverage-serializer:${scoverage2Version}"
172
188
val scalaparse = ivy"com.lihaoyi::scalaparse:${fastparse.version}"
173
- val scalatags = ivy"com.lihaoyi::scalatags:0.13.1"
189
+ val scalatags = ivy"com.lihaoyi::scalatags:0.13.1".withDottyCompat(scalaVersion)
174
190
def scalaXml = ivy"org.scala-lang.modules::scala-xml:2.3.0"
175
191
// keep in sync with doc/antora/antory.yml
176
192
val semanticDBscala = ivy"org.scalameta:::semanticdb-scalac:4.12.4"
177
193
val semanticDbJava = ivy"com.sourcegraph:semanticdb-java:0.10.3"
178
- val sourcecode = ivy"com.lihaoyi::sourcecode:0.4.2 "
194
+ val sourcecode = ivy"com.lihaoyi::sourcecode:0.4.3-M5 "
179
195
val upickle = ivy"com.lihaoyi::upickle:3.3.1"
180
196
val windowsAnsi = ivy"io.github.alexarchambault.windows-ansi:windows-ansi:0.0.6"
181
- val zinc = ivy"org.scala-sbt::zinc:1.10.7"
197
+ val zinc = ivy"org.scala-sbt::zinc:1.10.7".withDottyCompat(scalaVersion)
182
198
// keep in sync with doc/antora/antory.yml
183
199
val bsp4j = ivy"ch.epfl.scala:bsp4j:2.2.0-M2"
184
200
val fansi = ivy"com.lihaoyi::fansi:0.5.0"
185
- val jarjarabrams = ivy"com.eed3si9n.jarjarabrams::jarjar-abrams-core:1.14.0"
201
+ val jarjarabrams =
202
+ ivy"com.eed3si9n.jarjarabrams::jarjar-abrams-core:1.14.0".withDottyCompat(scalaVersion)
186
203
val requests = ivy"com.lihaoyi::requests:0.9.0"
187
204
val logback = ivy"ch.qos.logback:logback-classic:1.5.16"
188
205
val sonatypeCentralClient = ivy"com.lumidion::sonatype-central-client-requests:0.3.0"
@@ -302,7 +319,7 @@ def millBinPlatform: T[String] = Task {
302
319
def baseDir = build.millSourcePath
303
320
304
321
val essentialBridgeScalaVersions =
305
- Seq(Deps.scalaVersion, Deps.workerScalaVersion212)
322
+ Seq(Deps.scalaVersion, Deps.scala2Version, Deps. workerScalaVersion212)
306
323
// published compiler bridges
307
324
val bridgeScalaVersions = Seq(
308
325
// Our version of Zinc doesn't work with Scala 2.12.0 and 2.12.4 compiler
@@ -448,30 +465,60 @@ trait MillPublishJavaModule extends MillJavaModule with PublishModule {
448
465
*/
449
466
trait MillScalaModule extends ScalaModule with MillJavaModule with ScalafixModule { outer =>
450
467
def scalaVersion = Deps.scalaVersion
451
- def scalafixScalaBinaryVersion = ZincWorkerUtil.scalaBinaryVersion(scalaVersion())
468
+ def scalapVersion: T[String] = Deps.scala2Version
469
+ def scalafixScalaBinaryVersion = T {
470
+ def sv = scalaVersion()
471
+ if (ZincWorkerUtil.isScala3(sv)) "2.13"
472
+ else ZincWorkerUtil.scalaBinaryVersion(sv)
473
+ }
474
+
475
+ def scalafixConfig = T {
476
+ if (ZincWorkerUtil.isScala3(scalaVersion())) Some(T.workspace / ".scalafix-3.conf") else None
477
+ }
452
478
def semanticDbVersion = Deps.semanticDBscala.version
453
479
def scalacOptions =
454
480
super.scalacOptions() ++ Seq(
455
481
"-deprecation",
456
- "-P:acyclic:force",
457
- "-feature",
458
- "-Xlint:unused",
459
- "-Xlint:adapted-args",
460
- "-Xsource:3",
461
- "-Wconf:msg=inferred type changes:silent",
462
- "-Wconf:msg=case companions no longer extend FunctionN:silent",
463
- "-Wconf:msg=access modifiers for:silent",
464
- "-Wconf:msg=found in a package prefix of the required type:silent"
482
+ "-feature"
483
+ ) ++ (
484
+ if (ZincWorkerUtil.isScala3(scalaVersion())) Seq(
485
+ // "-Werror",
486
+ "-Wunused:all"
487
+ // "-no-indent",
488
+ // "-Wvalue-discard",
489
+ // "-Wshadow:all",
490
+ // "-Wsafe-init",
491
+ // "-Wnonunit-statement",
492
+ // "-Wimplausible-patterns",
493
+ )
494
+ else Seq(
495
+ "-P:acyclic:force",
496
+ "-Xlint:unused",
497
+ "-Xlint:adapted-args",
498
+ "-Xsource:3",
499
+ "-Wconf:msg=inferred type changes:silent",
500
+ "-Wconf:msg=case companions no longer extend FunctionN:silent",
501
+ "-Wconf:msg=access modifiers for:silent",
502
+ "-Wconf:msg=found in a package prefix of the required type:silent"
503
+ )
465
504
)
466
505
467
- def scalacPluginIvyDeps =
506
+ def scalacPluginIvyDeps = T {
507
+ val sv = scalaVersion()
508
+ val binaryVersion = ZincWorkerUtil.scalaBinaryVersion(sv)
509
+ val hasModuleDefs = binaryVersion == "2.13" || binaryVersion == "3"
468
510
super.scalacPluginIvyDeps() ++
469
- Agg(Deps.acyclic) ++
470
- Agg.when(scalaVersion().startsWith("2.13."))(Deps.millModuledefsPlugin)
511
+ Agg.when(binaryVersion != "3")(Deps.acyclic) ++
512
+ Agg.when(hasModuleDefs)(Deps.millModuledefsPlugin)
513
+ }
471
514
472
- def mandatoryIvyDeps =
515
+ def mandatoryIvyDeps = T {
516
+ val sv = scalaVersion()
517
+ val binaryVersion = ZincWorkerUtil.scalaBinaryVersion(sv)
518
+ val hasModuleDefs = binaryVersion == "2.13" || binaryVersion == "3"
473
519
super.mandatoryIvyDeps() ++
474
- Agg.when(scalaVersion().startsWith("2.13."))(Deps.millModuledefs)
520
+ Agg.when(hasModuleDefs)(Deps.millModuledefs)
521
+ }
475
522
476
523
/** Default tests module. */
477
524
lazy val test: MillScalaTests = new MillScalaTests {}
@@ -487,7 +534,8 @@ trait MillScalaModule extends ScalaModule with MillJavaModule with ScalafixModul
487
534
trait MillBaseTestsModule extends TestModule {
488
535
def forkArgs = Task {
489
536
Seq(
490
- s"-DMILL_SCALA_2_13_VERSION=${Deps.scalaVersion}",
537
+ s"-DMILL_SCALA_3_NEXT_VERSION=${Deps.scalaVersion}",
538
+ s"-DMILL_SCALA_2_13_VERSION=${Deps.scala2Version}",
491
539
s"-DMILL_SCALA_2_12_VERSION=${Deps.workerScalaVersion212}",
492
540
s"-DTEST_SCALA_2_13_VERSION=${Deps.testScala213Version}",
493
541
s"-DTEST_SCALA_2_13_VERSION_FOR_SCALANATIVE_4_2=${Deps.testScala213VersionForScalaNative42}",
@@ -506,6 +554,7 @@ trait MillBaseTestsModule extends TestModule {
506
554
}
507
555
508
556
def testFramework = "mill.UTestFramework"
557
+ def testForkGrouping = discoveredTestClasses().grouped(1).toSeq
509
558
}
510
559
511
560
/** Published module which does not contain strictly handled API. */
@@ -618,15 +667,31 @@ trait MillStableScalaModule extends MillPublishScalaModule with Mima {
618
667
Agg.from(
619
668
Settings.mimaBaseVersions
620
669
.filter(v => !skipPreviousVersions().contains(v))
621
- .map(version =>
622
- ivy"${pomSettings().organization}:${artifactId()}:${version}"
623
- )
670
+ .map({ version =>
671
+ val patchedSuffix = {
672
+ val base = artifactSuffix()
673
+ version match {
674
+ case s"0.$minor.$_" if minor.toIntOption.exists(_ < 12) =>
675
+ base match {
676
+ case "_3" => "_2.13"
677
+ case s"_3_$suffix" => s"_2.13_$suffix"
678
+ case _ => base
679
+ }
680
+ case _ => base
681
+ }
682
+ }
683
+ val patchedId = artifactName() + patchedSuffix
684
+ ivy"${pomSettings().organization}:${patchedId}:${version}"
685
+ })
624
686
)
625
687
}
626
688
627
689
def mimaExcludeAnnotations = Seq("mill.api.internal", "mill.api.experimental")
628
- def mimaCheckDirection = CheckDirection.Backward
629
- def skipPreviousVersions: T[Seq[String]] = T(Seq.empty[String])
690
+ // def mimaCheckDirection = CheckDirection.Backward
691
+ def skipPreviousVersions: T[Seq[String]] = T {
692
+ T.log.info("Skipping mima for previous versions (!!1000s of errors due to Scala 3)")
693
+ mimaPreviousVersions() // T(Seq.empty[String])
694
+ }
630
695
}
631
696
632
697
object bridge extends Cross[BridgeModule](compilerBridgeScalaVersions)
@@ -638,8 +703,11 @@ trait BridgeModule extends MillPublishJavaModule with CrossScalaModule {
638
703
def crossFullScalaVersion = true
639
704
def ivyDeps = Agg(
640
705
ivy"org.scala-sbt:compiler-interface:${Deps.zinc.version}",
641
- ivy"org.scala-sbt:util-interface:${Deps.zinc.version}",
642
- ivy"org.scala-lang:scala-compiler:${crossScalaVersion}"
706
+ ivy"org.scala-sbt:util-interface:${Deps.zinc.version}"
707
+ ) ++ Agg(
708
+ if (ZincWorkerUtil.isScala3(crossScalaVersion))
709
+ ivy"org.scala-lang::scala3-compiler:${crossScalaVersion}"
710
+ else ivy"org.scala-lang:scala-compiler:${crossScalaVersion}"
643
711
)
644
712
645
713
def resources = Task {
@@ -648,7 +716,9 @@ trait BridgeModule extends MillPublishJavaModule with CrossScalaModule {
648
716
}
649
717
650
718
def compilerBridgeIvyDeps: T[Agg[Dep]] = Agg(
651
- ivy"org.scala-sbt::compiler-bridge:${Deps.zinc.version}".exclude("*" -> "*")
719
+ (if (ZincWorkerUtil.isScala3(crossScalaVersion))
720
+ ivy"org.scala-lang:scala3-sbt-bridge:${crossScalaVersion}"
721
+ else ivy"org.scala-sbt::compiler-bridge:${Deps.zinc.version}").exclude("*" -> "*")
652
722
)
653
723
654
724
def compilerBridgeSourceJars: T[Agg[PathRef]] = Task {
@@ -723,6 +793,6 @@ implicit object DepSegment extends Cross.ToSegments[Dep]({ dep =>
723
793
*/
724
794
object dummy extends Cross[DependencyFetchDummy](dummyDeps)
725
795
trait DependencyFetchDummy extends ScalaModule with Cross.Module[Dep] {
726
- def scalaVersion = Deps.scalaVersion
796
+ def scalaVersion = Deps.scala2Version
727
797
def compileIvyDeps = Agg(crossValue)
728
798
}
0 commit comments