sbt/project/ScalaVersionPlugin.scala

45 lines
1.3 KiB
Scala

import sbt.complete.Parser
import sbt.Keys.commands
import sbt.{AutoPlugin, Command}
object ScalaVersionPlugin extends AutoPlugin {
override def trigger = allRequirements
override def buildSettings = Seq(
commands ++= ScalaVersion.map.toSeq.map {
case (sbv, sv) =>
Command(s"scala${sbv.filter(_ != '.')}")(_ => Parser.success(())) { (st, _) =>
val cmd0 = s"++$sv!"
Parser.parse(cmd0, st.combinedParser) match {
case Right(cmd) => cmd()
case Left(msg) => throw sys.error(s"Invalid command: $cmd0\n$msg")
}
}
},
commands += Command("scalaFromEnv")(_ => Parser.success(())) { (st, _) =>
val sv = sys.env.get("SCALA_VERSION") match {
case None =>
throw new Exception("SCALA_VERSION not set")
case Some(s) if s.count(_ == '.') == 1 =>
ScalaVersion.map.getOrElse(
s,
throw new Exception(
s"No scala version found for binary version $s" +
s" (available scala versions: ${ScalaVersion.versions.mkString(", ")})"
)
)
case Some(s) =>
s
}
val cmd0 = s"++$sv!"
Parser.parse(cmd0, st.combinedParser) match {
case Right(cmd) => cmd()
case Left(msg) => throw sys.error(s"Invalid command: $cmd0\n$msg")
}
}
)
}