mirror of https://github.com/sbt/sbt.git
tab complete main classes, trigger auto-detection tasks on compilation
This commit is contained in:
parent
f24af2a05b
commit
30e454af0a
|
|
@ -128,7 +128,7 @@ object Defaults
|
|||
compileInputs <<= compileInputsTask,
|
||||
console <<= consoleTask,
|
||||
consoleQuick <<= consoleQuickTask,
|
||||
discoveredMainClasses <<= compile map discoverMainClasses,
|
||||
discoveredMainClasses <<= TaskData.write(compile map discoverMainClasses) triggeredBy compile,
|
||||
definedSbtPlugins <<= discoverPlugins,
|
||||
inTask(run)(runnerSetting :: Nil).head,
|
||||
selectMainClass <<= discoveredMainClasses map selectRunMain,
|
||||
|
|
@ -190,7 +190,7 @@ object Defaults
|
|||
loadedTestFrameworks <<= (testFrameworks, streams, testLoader) map { (frameworks, s, loader) =>
|
||||
frameworks.flatMap(f => f.create(loader, s.log).map( x => (f,x)).toIterable).toMap
|
||||
},
|
||||
definedTests <<= TaskData.write(detectTests, _.map(_.name).distinct),
|
||||
definedTests <<= TaskData.writeRelated(detectTests)(_.map(_.name).distinct) triggeredBy compile,
|
||||
testListeners :== Nil,
|
||||
testOptions :== Nil,
|
||||
executeTests <<= (streams in test, loadedTestFrameworks, testOptions in test, testLoader, definedTests) flatMap {
|
||||
|
|
@ -293,8 +293,7 @@ object Defaults
|
|||
def runMainTask(classpath: ScopedTask[Classpath], scalaRun: ScopedSetting[ScalaRun]): Initialize[InputTask[Unit]] =
|
||||
{
|
||||
import DefaultParsers._
|
||||
val mainParser = (Space ~> token(NotSpace, "<main-class>")) ~ complete.Parsers.spaceDelimited("<arg>")
|
||||
InputTask(_ => mainParser) { result =>
|
||||
InputTask( TaskData(discoveredMainClasses)(runMainParser)(Nil) ) { result =>
|
||||
(classpath, scalaRun, streams, result) map { case (cp, runner, s, (mainClass, args)) =>
|
||||
runner.run(mainClass, data(cp), args, s.log) foreach error
|
||||
}
|
||||
|
|
@ -381,6 +380,12 @@ object Defaults
|
|||
mappings
|
||||
}
|
||||
|
||||
def runMainParser: (State, Seq[String]) => Parser[(String, Seq[String])] =
|
||||
{
|
||||
import DefaultParsers._
|
||||
(state, mainClasses) => Space ~> token(NotSpace examples mainClasses.toSet) ~ spaceDelimited("<arg>")
|
||||
}
|
||||
|
||||
def testOnlyParser: (State, Seq[String]) => Parser[(Seq[String],Seq[String])] =
|
||||
{ (state, tests) =>
|
||||
import DefaultParsers._
|
||||
|
|
|
|||
|
|
@ -292,6 +292,8 @@ object Project extends Init[Scope] with ProjectExtra
|
|||
str.open()
|
||||
s.put(logged, str.log).addExitHook { str.close() }
|
||||
}
|
||||
// this is here instead of Scoped so that it is considered without need for import (because of Project.Initialize)
|
||||
implicit def richInitializeTask[T](init: Initialize[Task[T]]): Scoped.RichInitializeTask[T] = new Scoped.RichInitializeTask(init)
|
||||
}
|
||||
|
||||
trait ProjectExtra
|
||||
|
|
|
|||
|
|
@ -213,8 +213,6 @@ object Scoped
|
|||
def dependOn: Initialize[Task[Unit]] = Apply.tasks(KList.fromList(keys)) { kl => nop.dependsOn(kl.toList :_*) }
|
||||
}
|
||||
|
||||
|
||||
implicit def richInitializeTask[T](init: Initialize[Task[T]]): RichInitializeTask[T] = new RichInitializeTask(init)
|
||||
final class RichInitializeTask[T](init: Initialize[Task[T]])
|
||||
{
|
||||
def triggeredBy(tasks: ScopedTask[_]*): Initialize[Task[T]] = nonLocal(tasks, Keys.triggeredBy)
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@ object TaskData
|
|||
val key = ScopedKey(Scope.fillTaskAxis(defined, readFrom), readFrom)
|
||||
structure.streams.use(reader)(ts => f(ts, key))
|
||||
}
|
||||
def write[T, S](i: Initialize[Task[T]], convert: T => S = idFun, id: String = DefaultDataID)(implicit f: Format[S]): Initialize[Task[T]] =
|
||||
def write[T](i: Initialize[Task[T]], id: String = DefaultDataID)(implicit f: Format[T]): Initialize[Task[T]] = writeRelated(i, id)(idFun[T])(f)
|
||||
|
||||
def writeRelated[T, S](i: Initialize[Task[T]], id: String = DefaultDataID)(convert: T => S)(implicit f: Format[S]): Initialize[Task[T]] =
|
||||
(streams.identity zipWith i) { (sTask, iTask) =>
|
||||
(sTask,iTask) map { case s :+: value :+: HNil =>
|
||||
Operations.write( s.binary(id), convert(value) )(f)
|
||||
|
|
|
|||
Loading…
Reference in New Issue