Skip to content

Commit

Permalink
SI-9832 -Xlint:help shows default
Browse files Browse the repository at this point in the history
Conclude help method with the default list.

Extra words are supplied for underscore.
  • Loading branch information
som-snytt committed Oct 12, 2016
1 parent 823b2d9 commit 12fb6fe
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 5 deletions.
18 changes: 13 additions & 5 deletions src/compiler/scala/tools/nsc/settings/MutableSettings.scala
Original file line number Diff line number Diff line change
Expand Up @@ -744,11 +744,19 @@ class MutableSettings(val errorFn: String => Unit)
def isHelping: Boolean = sawHelp

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 = {
Expand Down
63 changes: 63 additions & 0 deletions test/junit/scala/tools/nsc/settings/SettingsTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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 "There was a problem parsing 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
})
}
}

0 comments on commit 12fb6fe

Please sign in to comment.