Skip to content

Commit

Permalink
Add an error about Scala 2.12 not supported for toolkits
Browse files Browse the repository at this point in the history
  • Loading branch information
MaciejG604 committed Dec 13, 2023
1 parent 03278e6 commit 5a22278
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 5 deletions.
24 changes: 24 additions & 0 deletions modules/build/src/test/scala/scala/build/tests/BuildTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -951,4 +951,28 @@ abstract class BuildTests(server: Boolean) extends TestUtil.ScalaCliBuildSuite {
expect(maybeBuild.exists(_.success))
}
}

for (dirValue <- Seq("default", "typelevel:default"))
test(s"error when toolkit $dirValue is used with Scala 2.12") {
val testInputs = TestInputs(
os.rel / "simple.sc" ->
s"""//> using toolkit $dirValue
|
|val n = 2
|println(s"n=$$n")
|""".stripMargin
)

val scala212Options = baseOptions.copy(
scalaOptions = baseOptions.scalaOptions.copy(
scalaVersion = Some(MaybeScalaVersion(Constants.defaultScala212Version)),
scalaBinaryVersion = None
),
scriptOptions = ScriptOptions(Some(true))
)

testInputs.withBuild(scala212Options, buildThreads, bloopConfigOpt) { (_, _, maybeBuild) =>
expect(maybeBuild.left.exists(_.message.startsWith("Toolkits do not support Scala 2.12")))
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package scala.build.errors

import scala.build.Position

final class ToolkitVersionError(msg: String, positions: Seq[Position])
extends BuildException(msg, positions)
19 changes: 14 additions & 5 deletions modules/options/src/main/scala/scala/build/Artifacts.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ package scala.build

import coursier.cache.FileCache
import coursier.core.{Classifier, Module, ModuleName, Organization, Repository, Version}
import coursier.error.{CoursierError, ResolutionError}
import coursier.parse.RepositoryParser
import coursier.error.ResolutionError
import coursier.util.Task
import coursier.{Dependency => CsDependency, Fetch, Resolution, core => csCore, util => csUtil}
import coursier.{Fetch, Resolution, Dependency => CsDependency, core => csCore, util => csUtil}
import dependency.*

import java.net.URL

import scala.build.CoursierUtils.*
import scala.build.EitherCps.{either, value}
import scala.build.Ops.*
Expand All @@ -18,7 +16,7 @@ import scala.build.errors.{
CompositeBuildException,
FetchingDependenciesError,
NoScalaVersionProvidedError,
RepositoryFormatError
ToolkitVersionError
}
import scala.build.internal.Constants
import scala.build.internal.Constants.*
Expand Down Expand Up @@ -654,6 +652,17 @@ object Artifacts {
dependencies: Seq[Positioned[coursier.Dependency]],
resolutionError: coursier.error.ResolutionError.Simple
) = resolutionError match {
// FIXME This if may not be enough when new toolkits are added
case ex: ResolutionError.CantDownloadModule
if ex.module.name.value == s"${Constants.toolkitName}_2.12" || ex.module.name.value == s"${Constants.toolkitTestName}_2.12" =>
val errorPositions = dependencies.collect {
case Positioned(pos, dep)
if ex.module == dep.module => pos
}.flatten
new ToolkitVersionError(
"Toolkits do not support Scala 2.12",
errorPositions
)
case ex: ResolutionError.CantDownloadModule =>
val errorPositions = dependencies.collect {
case Positioned(pos, dep)
Expand Down

0 comments on commit 5a22278

Please sign in to comment.