diff options
author | Adriaan Moors <adriaan@lightbend.com> | 2016-10-18 11:07:40 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan@lightbend.com> | 2016-10-18 11:07:40 -0700 |
commit | 2d8bae6f21288ba259c59ae150255f3aafd641fe (patch) | |
tree | c2c5e37e656066082b932395ba6f28988fa40278 | |
parent | 4376a02516a8d85a57e454043b0c01c07fc417fa (diff) | |
parent | 9f7c26e8ccc809c48484921f87b52eb56b978dcf (diff) | |
download | scala-2d8bae6f21288ba259c59ae150255f3aafd641fe.tar.gz scala-2d8bae6f21288ba259c59ae150255f3aafd641fe.tar.bz2 scala-2d8bae6f21288ba259c59ae150255f3aafd641fe.zip |
Merge 2.11.x into 2.12.x
Fix conflict in #5453:
```
- def help: String = {
+ override def help: String = {
```
-rw-r--r-- | src/compiler/scala/tools/nsc/settings/MutableSettings.scala | 18 | ||||
-rw-r--r-- | test/junit/scala/tools/nsc/settings/SettingsTest.scala | 63 |
2 files changed, 76 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala index 7b4c55c2af..822e0f16bf 100644 --- a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala +++ b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala @@ -751,11 +751,19 @@ class MutableSettings(val errorFn: String => Unit) override def isHelping: Boolean = sawHelp override def help: String = { - val choiceLength = choices.map(_.length).max + 1 - val formatStr = s" %-${choiceLength}s %s" - choices.zipAll(descriptions, "", "").map { - case (arg, descr) => formatStr.format(arg, descr) - } mkString (f"$descr%n", f"%n", "") + val describe: ((String, String)) => String = { + val choiceWidth = choices.map(_.length).max + 1 + val formatStr = s" %-${choiceWidth}s %s" + locally { + case (choice, description) => formatStr.format(choice, description) + } + } + val verboseDefault = default match { + case Some("_" :: Nil) => Some("All choices are enabled by default." :: Nil) + case _ => default + } + val orelse = verboseDefault.map(_.mkString(f"%nDefault: ", ", ", f"%n")).getOrElse("") + choices.zipAll(descriptions, "", "").map(describe).mkString(f"${descr}%n", f"%n", orelse) } def clear(): Unit = { diff --git a/test/junit/scala/tools/nsc/settings/SettingsTest.scala b/test/junit/scala/tools/nsc/settings/SettingsTest.scala index 0f2d206273..db8d083835 100644 --- a/test/junit/scala/tools/nsc/settings/SettingsTest.scala +++ b/test/junit/scala/tools/nsc/settings/SettingsTest.scala @@ -180,4 +180,67 @@ class SettingsTest { assertThrows[IllegalArgumentException](check(expected = "2.11", "-Xsource", "2.11"), _ == "-Xsource requires an argument, the syntax is -Xsource:<version>") assertThrows[IllegalArgumentException](check(expected = "2.11", "-Xsource:2.invalid"), _ contains "Bad version (2.invalid)") } + + @Test def helpHasDefault(): Unit = { + val s = new MutableSettings(msg => throw new IllegalArgumentException(msg)) + object mChoices extends s.MultiChoiceEnumeration { + val a = Choice("a", "help a") + val b = Choice("b", "help b") + val c = Choice("c", "help c") + } + val m = s.MultiChoiceSetting("-m", "args", "magic sauce", mChoices, Some(List("b"))) + + def check(args: String*)(t: s.MultiChoiceSetting[mChoices.type] => Boolean): Boolean = { + m.clear() + val (ok, rest) = s.processArguments(args.toList, processAll = true) + assert(rest.isEmpty) + t(m) + } + + import mChoices._ + + assertTrue(check("-m")(_.value == Set(b))) + assertTrue(check("-m") { _ => + assertEquals( + """magic sauce + | a help a + | b help b + | c help c + |Default: b + |""".stripMargin, + m.help) + true + }) + } + @Test def helpHasDefaultAll(): Unit = { + val s = new MutableSettings(msg => throw new IllegalArgumentException(msg)) + object mChoices extends s.MultiChoiceEnumeration { + val a = Choice("a", "help a") + val b = Choice("b", "help b") + val c = Choice("c", "help c") + } + val m = s.MultiChoiceSetting("-m", "args", "magic sauce", mChoices, Some(List("_"))) + + def check(args: String*)(t: s.MultiChoiceSetting[mChoices.type] => Boolean): Boolean = { + m.clear() + val (ok, rest) = s.processArguments(args.toList, processAll = true) + assert(rest.isEmpty) + t(m) + } + + import mChoices._ + + assertTrue(check("-m")(_.value == Set(a, b, c))) + assertTrue(check("-m") { _ => + assertEquals( + """magic sauce + | a help a + | b help b + | c help c + |Default: All choices are enabled by default. + |""".stripMargin, + m.help) + true + }) + } } |