summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/tools/nsc/settings/ScalaSettings.scala')
-rw-r--r--src/compiler/scala/tools/nsc/settings/ScalaSettings.scala44
1 files changed, 26 insertions, 18 deletions
diff --git a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
index 8e69598614..91b03869e5 100644
--- a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
+++ b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
@@ -45,7 +45,7 @@ trait ScalaSettings extends AbsScalaSettings
def infoSettings = List[Setting](version, help, Xhelp, Yhelp, showPlugins, showPhases, genPhaseGraph)
/** Any -multichoice:help? Nicer if any option could report that it had help to offer. */
- private def multihelp = allSettings exists { case s: MultiChoiceSetting => s.isHelping case _ => false }
+ private def multihelp = allSettings exists { case s: MultiChoiceSetting[_] => s.isHelping case _ => false }
/** Is an info setting set? */
def isInfo = (infoSettings exists (_.isSetByUser)) || multihelp
@@ -69,28 +69,23 @@ trait ScalaSettings extends AbsScalaSettings
// Would be nice to build this dynamically from scala.languageFeature.
// The two requirements: delay error checking until you have symbols, and let compiler command build option-specific help.
+ object languageFeatures extends MultiChoiceEnumeration {
+ val dynamics = Choice("dynamics", "Allow direct or indirect subclasses of scala.Dynamic")
+ val postfixOps = Choice("postfixOps", "Allow postfix operator notation, such as `1 to 10 toList'")
+ val reflectiveCalls = Choice("reflectiveCalls", "Allow reflective access to members of structural types")
+ val implicitConversions = Choice("implicitConversions", "Allow definition of implicit functions called views")
+ val higherKinds = Choice("higherKinds", "Allow higher-kinded types")
+ val existentials = Choice("existentials", "Existential types (besides wildcard types) can be written and inferred")
+ val macros = Choice("experimental.macros", "Allow macro defintion (besides implementation and application)")
+ }
val language = {
- val features = List(
- "dynamics" -> "Allow direct or indirect subclasses of scala.Dynamic",
- "postfixOps" -> "Allow postfix operator notation, such as `1 to 10 toList'",
- "reflectiveCalls" -> "Allow reflective access to members of structural types",
- "implicitConversions" -> "Allow definition of implicit functions called views",
- "higherKinds" -> "Allow higher-kinded types", // "Ask Adriaan, but if you have to ask..."
- "existentials" -> "Existential types (besides wildcard types) can be written and inferred",
- "experimental.macros" -> "Allow macro defintion (besides implementation and application)"
- )
val description = "Enable or disable language features"
MultiChoiceSetting(
name = "-language",
helpArg = "feature",
descr = description,
- choices = features map (_._1)
- ) { s =>
- val helpline: ((String, String)) => String = {
- case (name, text) => f" $name%-25s $text%n"
- }
- features map helpline mkString (f"$description:%n", "", f"%n")
- }
+ domain = languageFeatures
+ )
}
/*
@@ -193,7 +188,6 @@ trait ScalaSettings extends AbsScalaSettings
val Ygenjavap = StringSetting ("-Ygen-javap", "dir", "Generate a parallel output directory of .javap files.", "")
val Ygenasmp = StringSetting ("-Ygen-asmp", "dir", "Generate a parallel output directory of .asmp files (ie ASM Textifier output).", "")
val Ydumpclasses = StringSetting ("-Ydump-classes", "dir", "Dump the generated bytecode to .class files (useful for reflective compilation that utilizes in-memory classloaders).", "")
- val Ystatistics = BooleanSetting ("-Ystatistics", "Print compiler statistics.") andThen (scala.reflect.internal.util.Statistics.enabled = _)
val stopAfter = PhasesSetting ("-Ystop-after", "Stop after") withAbbreviation ("-stop") // backward compat
val stopBefore = PhasesSetting ("-Ystop-before", "Stop before")
val Yrangepos = BooleanSetting ("-Yrangepos", "Use range positions for syntax trees.")
@@ -217,6 +211,20 @@ trait ScalaSettings extends AbsScalaSettings
private def removalIn212 = "This flag is scheduled for removal in 2.12. If you have a case where you need this flag then please report a bug."
+ object YstatisticsPhases extends MultiChoiceEnumeration { val parser, typer, patmat, erasure, cleanup = Value }
+ val Ystatistics = {
+ val description = "Print compiler statistics for specific phases"
+ MultiChoiceSetting(
+ name = "-Ystatistics",
+ helpArg = "phase",
+ descr = description,
+ domain = YstatisticsPhases,
+ default = Some(List("_"))
+ ) withPostSetHook { _ => scala.reflect.internal.util.Statistics.enabled = true }
+ }
+
+ def YstatisticsEnabled = Ystatistics.value.nonEmpty
+
/** Area-specific debug output.
*/
val Ydocdebug = BooleanSetting("-Ydoc-debug", "Trace all scaladoc activity.")