-
Notifications
You must be signed in to change notification settings - Fork 1
/
CompileQuickPlugin.scala
37 lines (28 loc) · 1.47 KB
/
CompileQuickPlugin.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sbt._
import Keys._
import Compiler._
object CompileQuickPlugin extends Plugin {
lazy val compileQuick = InputKey[Unit]("compile-quick", "forces compilation of *only* the given file(s) with a the compiler options in scalac-options(for compile-quick)")
lazy val compileQuickSettings: Seq[Project.Setting[_]] = compileQuickSettings(Compile) ++ compileQuickSettings(Test)
def compileQuickSettings(conf: Configuration): Seq[Project.Setting[_]] = Seq(
scalacOptions in compileQuick <<= scalacOptions,
// TODO Parser to tab-complete source files
compileQuick <<= inputTask { (argTask: TaskKey[Seq[String]]) =>
(argTask, scalacOptions in compileQuick, Keys.compilers, dependencyClasspath in conf,
classDirectory in conf, streams) map {
(args: Seq[String], options: Seq[String], c: Compilers, cp, output, s) =>
val sources = args.map(file)
// TODO (?) use a different output directory to discard the compiled files
c.scalac(sources, cp.map(_.data), output, options, noopCallback, 1000, s.log)
}
}
)
object noopCallback extends xsbti.AnalysisCallback {
def beginSource(source: File) {}
def generatedClass(source: File, module: File, name: String) {}
def api(sourceFile: File, source: xsbti.api.SourceAPI) {}
def sourceDependency(dependsOn: File, source: File) {}
def binaryDependency(binary: File, name: String, source: File) {}
def endSource(sourcePath: File) {}
}
}