diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2014-07-21 09:50:18 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@typesafe.com> | 2014-07-21 09:50:18 +0200 |
commit | 73fb460c1cd20ee97556ec0867d17efaa795d129 (patch) | |
tree | f541766eb081385c5fde91433e03dfce56f1429e /src | |
parent | afa96e3be767935cfe128d9365c8c9e04355dfde (diff) | |
parent | 5a30c40d3c9882bf4213124f8921b2be10d5f444 (diff) | |
download | scala-73fb460c1cd20ee97556ec0867d17efaa795d129.tar.gz scala-73fb460c1cd20ee97556ec0867d17efaa795d129.tar.bz2 scala-73fb460c1cd20ee97556ec0867d17efaa795d129.zip |
Merge pull request #3888 from som-snytt/issue/8736v2.11.2
SI-8736 Restore -language to former glory
Diffstat (limited to 'src')
3 files changed, 19 insertions, 9 deletions
diff --git a/src/compiler/scala/tools/nsc/settings/AbsScalaSettings.scala b/src/compiler/scala/tools/nsc/settings/AbsScalaSettings.scala index c73e7ce00e..d0b8fd70ed 100644 --- a/src/compiler/scala/tools/nsc/settings/AbsScalaSettings.scala +++ b/src/compiler/scala/tools/nsc/settings/AbsScalaSettings.scala @@ -29,7 +29,7 @@ trait AbsScalaSettings { def ChoiceSetting(name: String, helpArg: String, descr: String, choices: List[String], default: String): ChoiceSetting def IntSetting(name: String, descr: String, default: Int, range: Option[(Int, Int)], parser: String => Option[Int]): IntSetting def MultiStringSetting(name: String, helpArg: String, descr: String): MultiStringSetting - def MultiChoiceSetting(name: String, helpArg: String, descr: String, choices: List[String], default: () => Unit)(helper: MultiChoiceSetting => String): MultiChoiceSetting + def MultiChoiceSetting(name: String, helpArg: String, descr: String, choices: List[String], default: Option[() => Unit])(helper: MultiChoiceSetting => String): MultiChoiceSetting def OutputSetting(outputDirs: OutputDirs, default: String): OutputSetting def PathSetting(name: String, descr: String, default: String): PathSetting def PhasesSetting(name: String, descr: String, default: String): PhasesSetting diff --git a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala index 3f41ede3ad..f26192f88a 100644 --- a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala +++ b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala @@ -211,7 +211,7 @@ class MutableSettings(val errorFn: String => Unit) add(new ChoiceSetting(name, helpArg, descr, choices, default)) def IntSetting(name: String, descr: String, default: Int, range: Option[(Int, Int)], parser: String => Option[Int]) = add(new IntSetting(name, descr, default, range, parser)) def MultiStringSetting(name: String, arg: String, descr: String) = add(new MultiStringSetting(name, arg, descr)) - def MultiChoiceSetting(name: String, helpArg: String, descr: String, choices: List[String], default: () => Unit = () => ())( + def MultiChoiceSetting(name: String, helpArg: String, descr: String, choices: List[String], default: Option[() => Unit] = None)( helper: MultiChoiceSetting => String = _ => choices.mkString(f"$descr:%n", f"%n ", f"%n") ) = add(new MultiChoiceSetting(name, helpArg, descr, choices, default, helper)) @@ -563,19 +563,23 @@ class MutableSettings(val errorFn: String => Unit) arg: String, descr: String, override val choices: List[String], - val default: () => Unit, + val default: Option[() => Unit], helper: MultiChoiceSetting => String ) extends MultiStringSetting(name, s"_,$arg,-$arg", s"$descr: `_' for all, `$name:help' to list") { private def badChoice(s: String, n: String) = errorFn(s"'$s' is not a valid choice for '$name'") private def choosing = choices.nonEmpty private def isChoice(s: String) = (s == "_") || (choices contains (s stripPrefix "-")) - private var sawHelp = false + + private var sawHelp = false + private var sawAll = false + private val adderAll = () => sawAll = true + private val noargs = () => errorFn(s"'$name' requires an option. See '$name:help'.") override protected def tts(args: List[String], halting: Boolean) = { val added = collection.mutable.ListBuffer.empty[String] def tryArg(arg: String) = arg match { - case "_" if choosing => default() + case "_" if choosing => addAll() case "help" if choosing => sawHelp = true case s if !choosing || isChoice(s) => added += s case s => badChoice(s, name) @@ -587,13 +591,19 @@ class MutableSettings(val errorFn: String => Unit) case Nil => Nil } val rest = loop(args) - if (rest.size == args.size) default() // if no arg consumed, trigger default action - else value = added.toList // update all new settings at once + if (rest.size == args.size) + (default getOrElse noargs)() // if no arg consumed, trigger default action or error + else + value ++= added.toList // update all new settings at once Some(rest) } def isHelping: Boolean = sawHelp - def help: String = helper(this) + def help: String = helper(this) + def addAll(): Unit = (default getOrElse adderAll)() + + // the semantics is: s is enabled, i.e., either s or (_ but not -s) + override def contains(s: String) = isChoice(s) && (value contains s) || (sawAll && !(value contains s"-$s")) } /** A setting that accumulates all strings supplied to it, diff --git a/src/compiler/scala/tools/nsc/settings/Warnings.scala b/src/compiler/scala/tools/nsc/settings/Warnings.scala index 9989d1d188..bec068b56a 100644 --- a/src/compiler/scala/tools/nsc/settings/Warnings.scala +++ b/src/compiler/scala/tools/nsc/settings/Warnings.scala @@ -116,7 +116,7 @@ trait Warnings { helpArg = "warning", descr = description, choices = choices, - default = () => xlint.value = true + default = Some(() => xlint.value = true) ) { s => def helpline(n: String) = lintWarnings.find(_.name == n).map(w => f" ${w.name}%-25s ${w.helpDescription}%n") choices flatMap (helpline(_)) mkString (f"$description:%n", "", f"%n") |