summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-12-16 23:52:30 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-12-16 23:52:30 -0800
commit02455ac5105a9bf542ef09e6f495fb9065ca493e (patch)
tree96079019eff6df481b77b92b645dff427561e3d0 /core/src
parent6954d5d8f3da7666a566eefd89f80dd36c55ce5c (diff)
downloadmill-02455ac5105a9bf542ef09e6f495fb9065ca493e.tar.gz
mill-02455ac5105a9bf542ef09e6f495fb9065ca493e.tar.bz2
mill-02455ac5105a9bf542ef09e6f495fb9065ca493e.zip
Allow top-level targets in build files by configuring Ammonite's `codeWrapper` to inherit from `mill.Module`
Diffstat (limited to 'core/src')
-rw-r--r--core/src/main/scala/mill/Main.scala52
1 files changed, 35 insertions, 17 deletions
diff --git a/core/src/main/scala/mill/Main.scala b/core/src/main/scala/mill/Main.scala
index 90a70edb..6a9d1945 100644
--- a/core/src/main/scala/mill/Main.scala
+++ b/core/src/main/scala/mill/Main.scala
@@ -1,15 +1,16 @@
package mill
-import ammonite.interp.Interpreter
+import ammonite.interp.{Interpreter, Preprocessor}
import ammonite.main.Scripts
import ammonite.ops._
-import ammonite.util.{Colors, Res}
+import ammonite.util._
import mill.define.Task
import mill.discover._
import mill.eval.{Evaluator, Result}
import mill.util.{Logger, OSet, PrintLogger}
import ammonite.main.Scripts.pathScoptRead
import ammonite.repl.Repl
+import ammonite.util.Util.normalizeNewlines
import mill.define.Task.TaskModule
object Main {
def parseSelector(input: String) = {
@@ -158,28 +159,45 @@ object Main {
System.err.println(msg)
System.exit(1)
case Right((cliConfig, leftoverArgs)) =>
- if (repl){
-
- val runner = new ammonite.MainRunner(
- cliConfig.copy(
- predefFile = Some(pwd / 'out / "run.sc"),
- predefCode = "import build._",
- welcomeBanner = None
- ),
- System.out, System.err,
- System.in, System.out, System.err
+ val config =
+ if(!repl) cliConfig
+ else cliConfig.copy(
+ predefFile = Some(pwd / 'out / "run.sc"),
+ predefCode = "import build._",
+ welcomeBanner = None
)
+
+ val runner = new ammonite.MainRunner(
+ config,
+ System.out, System.err,
+ System.in, System.out, System.err
+ ){
+ override def initMain(isRepl: Boolean) = {
+ super.initMain(isRepl).copy(codeWrapper = customCodeWrapper)
+ }
+ }
+
+ if (repl){
runner.printInfo("Loading...")
runner.runRepl()
} else {
- val runner = new ammonite.MainRunner(
- cliConfig,
- System.out, System.err,
- System.in, System.out, System.err
- )
runner.runScript(syntheticPath, leftoverArgs)
}
}
}
+ val customCodeWrapper = new Preprocessor.CodeWrapper {
+ def top(pkgName: Seq[Name], imports: Imports, indexedWrapperName: Name) = {
+ normalizeNewlines(s"""
+package ${pkgName.head.encoded}
+package ${Util.encodeScalaSourcePath(pkgName.tail)}
+$imports
+
+object ${indexedWrapperName.backticked} extends mill.Module{\n""")
+ }
+
+ def bottom(printCode: String, indexedWrapperName: Name, extraCode: String) = {
+ Preprocessor.CodeWrapper.bottom(printCode, indexedWrapperName, extraCode)
+ }
+ }
}