summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2014-02-17 17:31:28 +0100
committerJason Zaugg <jzaugg@gmail.com>2014-02-17 19:16:01 +0100
commit1b1461fed759c8f937c01fe2e7d3922ab67df700 (patch)
treeb4497e2eeb3dfad222b6860c4ad737b7fd956efb
parent6152e9c3153a9c028066abf6b91f6bf105eacdfe (diff)
downloadscala-1b1461fed759c8f937c01fe2e7d3922ab67df700.tar.gz
scala-1b1461fed759c8f937c01fe2e7d3922ab67df700.tar.bz2
scala-1b1461fed759c8f937c01fe2e7d3922ab67df700.zip
SI-7707 SI-7712 Exclude unused warnings from -Xlint
Experience building open source projects like Specs that use `-Xlint` suggests that this warning is too noisy to lump in with the others. We are lacking in more fine-grained control of these things, so simply turning of `-Xlint` in favour of its underlying `-Y` options ends up *losing* some other important warnings that are predicated directly on `-Xlint`. Furthermore, bug reports against M8, SI-7707 SI-7712, show that unused private/local warnings, while far less noisy, are still in need of polish. This commit moves these warnings to a pair of new -Y options, neither of which is part of `-Xlint`.. Let's ask people to opt in for 2.11, and as it stabilizes, we can consider adding it to Xlint (or the desirable evolution of that) in the next release.
-rw-r--r--src/compiler/scala/tools/nsc/settings/Warnings.scala4
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Analyzer.scala4
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Contexts.scala4
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/TypeDiagnostics.scala2
-rw-r--r--test/files/neg/warn-unused-imports.check13
-rw-r--r--test/files/neg/warn-unused-imports.flags2
-rw-r--r--test/files/neg/warn-unused-privates.flags2
7 files changed, 12 insertions, 19 deletions
diff --git a/src/compiler/scala/tools/nsc/settings/Warnings.scala b/src/compiler/scala/tools/nsc/settings/Warnings.scala
index 791d44153c..5214f6485f 100644
--- a/src/compiler/scala/tools/nsc/settings/Warnings.scala
+++ b/src/compiler/scala/tools/nsc/settings/Warnings.scala
@@ -30,6 +30,8 @@ trait Warnings {
warnNullaryUnit,
warnAdaptedArgs,
warnInferAny
+ // warnUnused SI-7712, SI-7707 warnUnused not quite ready for prime-time
+ // warnUnusedImport currently considered too noisy for general use
)
// Warning groups.
@@ -56,6 +58,8 @@ trait Warnings {
val warnInaccessible = BooleanSetting ("-Ywarn-inaccessible", "Warn about inaccessible types in method signatures.")
val warnNullaryOverride = BooleanSetting ("-Ywarn-nullary-override", "Warn when non-nullary overrides nullary, e.g. `def foo()` over `def foo`.")
val warnInferAny = BooleanSetting ("-Ywarn-infer-any", "Warn when a type argument is inferred to be `Any`.")
+ 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")
// Backward compatibility.
@deprecated("Use fatalWarnings", "2.11.0") def Xwarnfatal = fatalWarnings // used by sbt
diff --git a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
index 5c02516c47..323fe1c171 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
@@ -102,7 +102,9 @@ trait Analyzer extends AnyRef
unit.body = typer.typed(unit.body)
if (global.settings.Yrangepos && !global.reporter.hasErrors) global.validatePositions(unit.body)
for (workItem <- unit.toCheck) workItem()
- if (settings.lint)
+ if (settings.warnUnusedImport)
+ warnUnusedImports(unit)
+ if (settings.warnUnused)
typer checkUnused unit
}
finally {
diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
index c065fb54b7..974c0842d3 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
@@ -1210,7 +1210,7 @@ trait Contexts { self: Analyzer =>
trait ImportContext extends Context {
private val impInfo: ImportInfo = {
val info = new ImportInfo(tree.asInstanceOf[Import], outerDepth)
- if (settings.lint && !isRootImport) // excludes java.lang/scala/Predef imports
+ if (settings.warnUnusedImport && !isRootImport) // excludes java.lang/scala/Predef imports
allImportInfos(unit) ::= info
info
}
@@ -1319,7 +1319,7 @@ trait Contexts { self: Analyzer =>
if (result == NoSymbol)
selectors = selectors.tail
}
- if (settings.lint && selectors.nonEmpty && result != NoSymbol && pos != NoPosition)
+ if (settings.warnUnusedImport && selectors.nonEmpty && result != NoSymbol && pos != NoPosition)
recordUsage(current, result)
// Harden against the fallout from bugs like SI-6745
diff --git a/src/compiler/scala/tools/nsc/typechecker/TypeDiagnostics.scala b/src/compiler/scala/tools/nsc/typechecker/TypeDiagnostics.scala
index 71e6454931..dfa1b6db0f 100644
--- a/src/compiler/scala/tools/nsc/typechecker/TypeDiagnostics.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/TypeDiagnostics.scala
@@ -518,8 +518,6 @@ trait TypeDiagnostics {
}
def apply(unit: CompilationUnit) = {
- warnUnusedImports(unit)
-
val p = new UnusedPrivates
p traverse unit.body
val unused = p.unusedTerms
diff --git a/test/files/neg/warn-unused-imports.check b/test/files/neg/warn-unused-imports.check
index 1b938f4fd7..36c6dd03c3 100644
--- a/test/files/neg/warn-unused-imports.check
+++ b/test/files/neg/warn-unused-imports.check
@@ -1,11 +1,3 @@
-warn-unused-imports.scala:7: warning: it is not recommended to define classes/objects inside of package objects.
-If possible, define class A in package p1 instead.
- class A
- ^
-warn-unused-imports.scala:13: warning: it is not recommended to define classes/objects inside of package objects.
-If possible, define class A in package p2 instead.
- class A
- ^
warn-unused-imports.scala:57: warning: Unused import
import p1.A // warn
^
@@ -36,9 +28,6 @@ warn-unused-imports.scala:98: warning: Unused import
warn-unused-imports.scala:118: warning: Unused import
import p1.A // warn
^
-warn-unused-imports.scala:99: warning: local trait Warn is never used
- trait Warn { // warn about unused local trait for good measure
- ^
error: No warnings can be incurred under -Xfatal-warnings.
-13 warnings found
+10 warnings found
one error found
diff --git a/test/files/neg/warn-unused-imports.flags b/test/files/neg/warn-unused-imports.flags
index 954eaba352..24db705df1 100644
--- a/test/files/neg/warn-unused-imports.flags
+++ b/test/files/neg/warn-unused-imports.flags
@@ -1 +1 @@
--Xfatal-warnings -Xlint
+-Xfatal-warnings -Ywarn-unused-import
diff --git a/test/files/neg/warn-unused-privates.flags b/test/files/neg/warn-unused-privates.flags
index 7949c2afa2..25474aefb3 100644
--- a/test/files/neg/warn-unused-privates.flags
+++ b/test/files/neg/warn-unused-privates.flags
@@ -1 +1 @@
--Xlint -Xfatal-warnings
+-Ywarn-unused -Xfatal-warnings