diff options
author | Martin Odersky <odersky@gmail.com> | 2015-06-15 17:11:19 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-06-29 08:59:39 +0200 |
commit | 6beb1b402f84d4a3f3096a1fca2f71b69fb03c1a (patch) | |
tree | a6225111499a16a1c5981f049a14138eba18dcc9 | |
parent | de8368d5db436bb126e2f327d58fa1882e427e51 (diff) | |
download | dotty-6beb1b402f84d4a3f3096a1fca2f71b69fb03c1a.tar.gz dotty-6beb1b402f84d4a3f3096a1fca2f71b69fb03c1a.tar.bz2 dotty-6beb1b402f84d4a3f3096a1fca2f71b69fb03c1a.zip |
Refactor Driver
- Make parts more reusable
- Introduce hook "sourcesRequired" that controls whether
no sources on the command line give a help message.
-rw-r--r-- | src/dotty/tools/dotc/Driver.scala | 41 | ||||
-rw-r--r-- | src/dotty/tools/dotc/config/CompilerCommand.scala | 5 |
2 files changed, 26 insertions, 20 deletions
diff --git a/src/dotty/tools/dotc/Driver.scala b/src/dotty/tools/dotc/Driver.scala index f5e41cbef..7e9d4a5e4 100644 --- a/src/dotty/tools/dotc/Driver.scala +++ b/src/dotty/tools/dotc/Driver.scala @@ -8,33 +8,40 @@ import scala.util.control.NonFatal abstract class Driver extends DotClass { - val prompt = "\ndotc>" + val prompt = "\ndotc> " protected def newCompiler(): Compiler protected def emptyReporter: Reporter = new StoreReporter - protected def doCompile(compiler: Compiler, fileNames: List[String], reporter: Option[Reporter] = None) - (implicit ctx: Context): Reporter = - if (fileNames.nonEmpty) { - val run = compiler.newRun(ctx, reporter) - run.compile(fileNames) - run.printSummary() - } else emptyReporter + protected def doCompile(compiler: Compiler, fileNames: List[String])(implicit ctx: Context): Reporter = + if (fileNames.nonEmpty) + try { + val run = compiler.newRun + run.compile(fileNames) + run.printSummary() + } + catch { + case ex: FatalError => + ctx.error(ex.getMessage) // signals that we should fail compilation. + ctx.typerState.reporter + } + else emptyReporter protected def initCtx = (new ContextBase).initialCtx - def process(args: Array[String], rootCtx: Context, reporter: Option[Reporter] = None): Reporter = { + protected def sourcesRequired = true + + def setup(args: Array[String], rootCtx: Context): (List[String], Context) = { val summary = CompilerCommand.distill(args)(rootCtx) implicit val ctx: Context = initCtx.fresh.setSettings(summary.sstate) - val fileNames = CompilerCommand.checkUsage(summary) - try { - doCompile(newCompiler(), fileNames, reporter) - } catch { - case ex: FatalError => - ctx.error(ex.getMessage) // signals that we should fail compilation. - ctx.typerState.reporter - } + val fileNames = CompilerCommand.checkUsage(summary, sourcesRequired) + (fileNames, ctx) + } + + def process(args: Array[String], rootCtx: Context): Reporter = { + val (fileNames, ctx) = setup(args, rootCtx) + doCompile(newCompiler(), fileNames)(ctx) } def main(args: Array[String]): Unit = diff --git a/src/dotty/tools/dotc/config/CompilerCommand.scala b/src/dotty/tools/dotc/config/CompilerCommand.scala index 3ba8db3ba..e34ca07f9 100644 --- a/src/dotty/tools/dotc/config/CompilerCommand.scala +++ b/src/dotty/tools/dotc/config/CompilerCommand.scala @@ -60,7 +60,7 @@ object CompilerCommand extends DotClass { * are already applied in context. * @return The list of files to compile. */ - def checkUsage(summary: ArgsSummary)(implicit ctx: Context): List[String] = { + def checkUsage(summary: ArgsSummary, sourcesRequired: Boolean)(implicit ctx: Context): List[String] = { val settings = ctx.settings /** Creates a help message for a subset of options based on cond */ @@ -121,8 +121,7 @@ object CompilerCommand extends DotClass { ctx.println(infoMessage) Nil } else { - if (summary.arguments.isEmpty && !settings.resident.value) - ctx.println(usageMessage) + if (sourcesRequired && summary.arguments.isEmpty) ctx.println(usageMessage) summary.arguments } } |