Skip to content

Commit be5126f

Browse files
committed
Extensive help text for -opt-inline-from
Allows StringSetting to be helping.
1 parent 7230580 commit be5126f

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

src/compiler/scala/tools/nsc/settings/AbsScalaSettings.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ trait AbsScalaSettings {
3838
def OutputSetting(outputDirs: OutputDirs, default: String): OutputSetting
3939
def PathSetting(name: String, descr: String, default: String): PathSetting
4040
def PhasesSetting(name: String, descr: String, default: String): PhasesSetting
41-
def StringSetting(name: String, helpArg: String, descr: String, default: String): StringSetting
41+
def StringSetting(name: String, helpArg: String, descr: String, default: String, helpText: Option[String] = None): StringSetting
4242
def PrefixSetting(name: String, prefix: String, descr: String): PrefixSetting
4343
}

src/compiler/scala/tools/nsc/settings/MutableSettings.scala

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ class MutableSettings(val errorFn: String => Unit)
235235
add(new MultiChoiceSetting[E](name, helpArg, descr, domain, default))
236236
def OutputSetting(outputDirs: OutputDirs, default: String) = add(new OutputSetting(outputDirs, default))
237237
def PhasesSetting(name: String, descr: String, default: String = "") = add(new PhasesSetting(name, descr, default))
238-
def StringSetting(name: String, arg: String, descr: String, default: String) = add(new StringSetting(name, arg, descr, default))
238+
def StringSetting(name: String, arg: String, descr: String, default: String, helpText: Option[String]) = add(new StringSetting(name, arg, descr, default, helpText))
239239
def ScalaVersionSetting(name: String, arg: String, descr: String, initial: ScalaVersion, default: Option[ScalaVersion] = None) =
240240
add(new ScalaVersionSetting(name, arg, descr, initial, default))
241241
def PathSetting(name: String, descr: String, default: String): PathSetting = {
@@ -500,18 +500,30 @@ class MutableSettings(val errorFn: String => Unit)
500500
name: String,
501501
val arg: String,
502502
descr: String,
503-
val default: String)
503+
val default: String,
504+
helpText: Option[String])
504505
extends Setting(name, descr) {
505506
type T = String
506507
protected var v: T = default
507508

509+
protected var sawHelp: Boolean = false
510+
508511
def tryToSet(args: List[String]) = args match {
509512
case Nil => errorAndValue("missing argument", None)
510-
case x :: xs => value = x ; Some(xs)
513+
case x :: xs =>
514+
if (helpText.nonEmpty && x == "help")
515+
sawHelp = true
516+
else
517+
value = x
518+
Some(xs)
511519
}
512520
def unparse: List[String] = if (value == default) Nil else List(name, value)
513521

514522
withHelpSyntax(name + " <" + arg + ">")
523+
524+
override def isHelping: Boolean = sawHelp
525+
526+
override def help = helpText.get
515527
}
516528

517529
/** A setting represented by a Scala version.
@@ -554,7 +566,7 @@ class MutableSettings(val errorFn: String => Unit)
554566
default: String,
555567
prependPath: StringSetting,
556568
appendPath: StringSetting)
557-
extends StringSetting(name, "path", descr, default) {
569+
extends StringSetting(name, "path", descr, default, None) {
558570
import util.ClassPath.join
559571
def prepend(s: String) = prependPath.value = join(s, prependPath.value)
560572
def append(s: String) = appendPath.value = join(appendPath.value, s)
@@ -571,7 +583,7 @@ class MutableSettings(val errorFn: String => Unit)
571583
class OutputSetting private[nsc](
572584
private[nsc] val outputDirs: OutputDirs,
573585
default: String)
574-
extends StringSetting("-d", "directory|jar", "destination for generated classfiles.", default) {
586+
extends StringSetting("-d", "directory|jar", "destination for generated classfiles.", default, None) {
575587
value = default
576588
override def value_=(str: String) {
577589
super.value_=(str)

src/compiler/scala/tools/nsc/settings/ScalaSettings.scala

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,26 @@ trait ScalaSettings extends AbsScalaSettings
307307
val optInlineFrom = StringSetting(
308308
"-opt-inline-from",
309309
"patterns",
310-
"Classfile name patterns from which to allow inlining. ** = anything, * = package or class name, ! to exclude. Example: scala.**:!scala.Predef$:corp.*.util.*:corp.**.*Util*",
311-
"")
310+
"Patterns for classfile names from which to allow inlining, `help` for details.",
311+
"",
312+
helpText = Some(
313+
"""Patterns for classfile names from which the inliner is allowed to pull in code.
314+
| * Matches classes in the empty package
315+
| ** All classes
316+
| a.C Class a.C
317+
| a.* Classes in package a
318+
| a.** Classes in a and in sub-packages of a
319+
| **.Util Classes named Util in any package (including the empty package)
320+
| a.**.*Util* Classes in a and sub-packages with Util in their name (including a.Util)
321+
| a.C$D The nested class D defined in class a.C
322+
| scala.Predef$ The scala.Predef object
323+
|
324+
|The setting accepts a colon-separated list of patterns. A leading `!` marks a pattern excluding.
325+
|The last matching pattern defines whether a classfile is included or excluded (default: excluded).
326+
|For example, `a.**:!a.b.**` includes classes in a and sub-packages, but not in a.b and sub-packages.
327+
|
328+
|Note: on the command-line you might need to quote patterns containing `*` to prevent the shell
329+
|from expanding it to a list of files in the current directory.""".stripMargin))
312330

313331
val YoptInlineHeuristics = ChoiceSetting(
314332
name = "-Yopt-inline-heuristics",

0 commit comments

Comments
 (0)