summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/settings/Warnings.scala
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2014-05-24 06:08:17 -0700
committerSom Snytt <som.snytt@gmail.com>2014-07-08 21:28:35 -0700
commit44855dcd3c2e19d5dbaf01b2165ea8dc9fb287d3 (patch)
tree02bc8677560fb0e78b6b2eb67487ec6e29790ac1 /src/compiler/scala/tools/nsc/settings/Warnings.scala
parent91670d91824493e8bbbd88e9861e04e710311cbb (diff)
downloadscala-44855dcd3c2e19d5dbaf01b2165ea8dc9fb287d3.tar.gz
scala-44855dcd3c2e19d5dbaf01b2165ea8dc9fb287d3.tar.bz2
scala-44855dcd3c2e19d5dbaf01b2165ea8dc9fb287d3.zip
SI-8525 Add -Xlint:-warn-missing-interpolator
Turn off lint warnings with negating prefix, and add a lint-only warning for the infamously nagging "Did you forget the interpolator?" That message is made more dignified. Without `-Xlint:false`, there is no mechanism to turn off anonymous linters once `-Xlint` is selected.
Diffstat (limited to 'src/compiler/scala/tools/nsc/settings/Warnings.scala')
-rw-r--r--src/compiler/scala/tools/nsc/settings/Warnings.scala24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/settings/Warnings.scala b/src/compiler/scala/tools/nsc/settings/Warnings.scala
index ae2696accf..f1ed45a2a0 100644
--- a/src/compiler/scala/tools/nsc/settings/Warnings.scala
+++ b/src/compiler/scala/tools/nsc/settings/Warnings.scala
@@ -31,9 +31,10 @@ trait Warnings {
warnNullaryOverride,
warnNullaryUnit,
warnAdaptedArgs,
- warnInferAny
+ warnInferAny,
// warnUnused SI-7712, SI-7707 warnUnused not quite ready for prime-time
// warnUnusedImport currently considered too noisy for general use
+ warnMissingInterpolator
)
private lazy val warnSelectNullable = BooleanSetting("-Xcheck-null", "This option is obsolete and does nothing.")
@@ -50,23 +51,32 @@ trait Warnings {
val warnUnused = BooleanSetting ("-Ywarn-unused", "Warn when local and private vals, vars, defs, and types are are unused")
val warnUnusedImport = BooleanSetting ("-Ywarn-unused-import", "Warn when imports are unused")
+ // Lint warnings that are not -Y
+ val warnMissingInterpolator = new BooleanSetting("warn-missing-interpolator", "Warn when a string literal appears to be missing an interpolator id.")
+
// Warning groups.
val lint = {
// Boolean setting for testing if lint is on; not "added" to option processing
val xlint = new BooleanSetting("-Xlint", "Enable recommended additional warnings.")
- val lintables = (lintWarnings map (_.name drop 2)).sorted
+ def lintables = (lintWarnings map (_.name stripPrefix "-Y")).sorted
+ def isAnon(b: BooleanSetting) = !(b.name startsWith "-")
+ def setPolitely(b: BooleanSetting, v: Boolean) = if (!b.isSetByUser) b.value = v
+ def set(w: String, v: Boolean) = lintWarnings find (_.name.stripPrefix("-Y") == w) foreach (b => setPolitely(b, v))
+ val Neg = "-"
def propagate(ss: List[String]): Unit = ss match {
- case w :: rest => lintWarnings find (_.name == s"-Y$w") foreach (_.value = true) ; propagate(rest)
- case Nil => ()
+ case w :: rest => if (w startsWith Neg) set(w stripPrefix Neg, false) else set(w, true) ; propagate(rest)
+ case Nil => ()
}
- def enableAll(): Unit = { // enable lint and the group
+ // enable lint and the group, honoring previous -Y settings
+ def enableAll(): Unit = {
xlint.value = true
- for (s <- lintWarnings if !s.isSetByUser) s.value = true
+ for (s <- lintWarnings) setPolitely(s, true)
}
// The command option
- MultiChoiceSetting("-Xlint", "warning", "Enable recommended additional warnings", lintables, enableAll) withPostSetHook { x =>
+ MultiChoiceSetting("-Xlint", "warning", "Enable recommended additional warnings", choices = lintables, default = enableAll) withPostSetHook { x =>
propagate(x.value) // enabling the selections (on each append to value)
xlint.value = true // only enables lint, not the group
+ for (b <- lintWarnings if isAnon(b) && !b.isSetByUser) b.value = true // init anonymous settings (but not if disabled)
}
xlint
}