diff --git a/main/Main.scala b/main/Main.scala index cd6ea2920..8057fa8c1 100644 --- a/main/Main.scala +++ b/main/Main.scala @@ -144,14 +144,28 @@ object BuiltinCommands { val e = Project.extract(s) val current = "The current project is " + Project.display(e.currentRef) + "\n" - val built = e.getOpt(Keys.scalaVersion) match { - case Some(sv) => "The current project is built against Scala " + sv + "\n" - case None => "" - } + val sc = aboutScala(s, e) + val built = if(sc.isEmpty) "" else "The current project is built against " + sc + "\n" current + built } else "No project is currently loaded.\n" + def aboutScala(s: State, e: Extracted): String = + { + val scalaVersion = e.getOpt(Keys.scalaVersion) + val scalaHome = e.getOpt(Keys.scalaHome).flatMap(idFun) + val instance = e.getOpt(Keys.scalaInstance.task).flatMap(_ => quiet(e.evalTask(Keys.scalaInstance, s))) + (scalaVersion, scalaHome, instance) match { + case (sv, Some(home), Some(si)) => "local Scala version " + selectScalaVersion(sv, si) + " at " + home.getAbsolutePath + case (_, Some(home), None) => "a local Scala build at " + home.getAbsolutePath + case (sv, None, Some(si)) => "Scala " + selectScalaVersion(sv, si) + case (Some(sv), None, None) => "Scala " + sv + case (None, None, None) => "" + } + } + private[this] def selectScalaVersion(sv: Option[String], si: ScalaInstance): String = sv match { case Some(si.version) => si.version; case _ => si.actualVersion } + private[this] def quiet[T](t: => T): Option[T] = try { Some(t) } catch { case e: Exception => None } + def tasks = Command.command(TasksCommand, tasksBrief, tasksDetailed) { s => System.out.println(tasksPreamble) System.out.println(tasksHelp(s)) diff --git a/main/Project.scala b/main/Project.scala index 643cf30fb..91fed9692 100644 --- a/main/Project.scala +++ b/main/Project.scala @@ -74,8 +74,7 @@ final case class Extracted(structure: BuildStructure, session: SessionSettings, def evalTask[T](key: ScopedTask[T], state: State): T = { import EvaluateTask._ - val extracted = Project.extract(state) - val rkey = Project.mapScope(Scope.resolveScope(GlobalScope, extracted.currentRef.build, rootProject) )( key.scopedKey ) + val rkey = Project.mapScope(Scope.resolveScope(GlobalScope, currentRef.build, rootProject) )( key.scopedKey ) val value: Option[Result[T]] = evaluateTask(structure, key.task.scopedKey, state, currentRef) val result = getOrError(rkey.scope, rkey.key, value) processResult(result, ConsoleLogger())