diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-09-19 00:46:17 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2017-03-11 23:38:08 -0800 |
commit | 22f98d5189b61200aaf11cec7a0a96d5cfa86a5e (patch) | |
tree | aa90424f6dd21609090ae8fbffb5410ca80f4edf /test/files | |
parent | 94b938bb290a231694e5721368023bd6693bb2ed (diff) | |
download | scala-22f98d5189b61200aaf11cec7a0a96d5cfa86a5e.tar.gz scala-22f98d5189b61200aaf11cec7a0a96d5cfa86a5e.tar.bz2 scala-22f98d5189b61200aaf11cec7a0a96d5cfa86a5e.zip |
SI-8040 Warn unused parameters
One can `-Ywarn-unused:params` or more narrowly warn only for
unused implicit parameters with `-Ywarn-unused:implicits`.
Params includes constructor parameters.
The settings for privates and locals are not yet distinguished.
```
$ skalac -Ywarn-unused:help
Enable or disable specific `unused' warnings
imports Warn if an import selector is not referenced.
patvars Warn if a variable bound in a pattern is unused.
privates Warn if a private member is unused.
locals Warn if a local definition is unused.
params Warn if a value parameter is unused.
implicits Warn if an implicit parameter is unused.
```
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/neg/warn-unused-implicits.check | 9 | ||||
-rw-r--r-- | test/files/neg/warn-unused-implicits.flags | 1 | ||||
-rw-r--r-- | test/files/neg/warn-unused-implicits.scala | 32 | ||||
-rw-r--r-- | test/files/neg/warn-unused-params.check | 18 | ||||
-rw-r--r-- | test/files/neg/warn-unused-params.flags | 1 | ||||
-rw-r--r-- | test/files/neg/warn-unused-params.scala | 61 | ||||
-rw-r--r-- | test/files/neg/warn-unused-patvars.check | 6 | ||||
-rw-r--r-- | test/files/neg/warn-unused-patvars.scala | 2 | ||||
-rw-r--r-- | test/files/neg/warn-unused-privates.flags | 2 | ||||
-rw-r--r-- | test/files/neg/warn-unused-privates.scala | 4 |
10 files changed, 132 insertions, 4 deletions
diff --git a/test/files/neg/warn-unused-implicits.check b/test/files/neg/warn-unused-implicits.check new file mode 100644 index 0000000000..4cc5836800 --- /dev/null +++ b/test/files/neg/warn-unused-implicits.check @@ -0,0 +1,9 @@ +warn-unused-implicits.scala:11: warning: parameter value s in method f is never used + )(implicit s: String): Int = { // warn + ^ +warn-unused-implicits.scala:31: warning: parameter value s in method i is never used + def i(implicit s: String, t: Int) = t // yes, warn + ^ +error: No warnings can be incurred under -Xfatal-warnings. +two warnings found +one error found diff --git a/test/files/neg/warn-unused-implicits.flags b/test/files/neg/warn-unused-implicits.flags new file mode 100644 index 0000000000..18169f3218 --- /dev/null +++ b/test/files/neg/warn-unused-implicits.flags @@ -0,0 +1 @@ +-Ywarn-unused:implicits -Xfatal-warnings diff --git a/test/files/neg/warn-unused-implicits.scala b/test/files/neg/warn-unused-implicits.scala new file mode 100644 index 0000000000..54f924eac0 --- /dev/null +++ b/test/files/neg/warn-unused-implicits.scala @@ -0,0 +1,32 @@ + +trait InterFace { + /** Call something. */ + def call(a: Int, b: String, c: Double)(implicit s: String): Int +} + +trait BadAPI extends InterFace { + def f(a: Int, + b: String, + c: Double + )(implicit s: String): Int = { // warn + println(b + c) + a + } + @deprecated ("no warn in deprecated API", since="yesterday") + def g(a: Int, + b: String, + c: Double + )(implicit s: String): Int = { // no warn + println(b + c) + a + } + override def call(a: Int, + b: String, + c: Double + )(implicit s: String): Int = { // no warn, required by superclass + println(b + c) + a + } + + def i(implicit s: String, t: Int) = t // yes, warn +} diff --git a/test/files/neg/warn-unused-params.check b/test/files/neg/warn-unused-params.check new file mode 100644 index 0000000000..ca6320ccd9 --- /dev/null +++ b/test/files/neg/warn-unused-params.check @@ -0,0 +1,18 @@ +warn-unused-params.scala:9: warning: parameter value b in method f is never used + b: String, // warn + ^ +warn-unused-params.scala:32: warning: parameter value s in method i is never used + def i(implicit s: String) = 42 // yes, warn + ^ +warn-unused-params.scala:49: warning: parameter value u in class Unusing is never used +class Unusing(u: Int) { // warn + ^ +warn-unused-params.scala:57: warning: parameter value s in class CaseyAtTheBat is never used +case class CaseyAtTheBat(k: Int)(s: String) // warn + ^ +warn-unused-params.scala:60: warning: parameter value readResolve in method f is never used + def f(readResolve: Int) = 42 // warn + ^ +error: No warnings can be incurred under -Xfatal-warnings. +5 warnings found +one error found diff --git a/test/files/neg/warn-unused-params.flags b/test/files/neg/warn-unused-params.flags new file mode 100644 index 0000000000..795fb74272 --- /dev/null +++ b/test/files/neg/warn-unused-params.flags @@ -0,0 +1 @@ +-Ywarn-unused:params -Xfatal-warnings diff --git a/test/files/neg/warn-unused-params.scala b/test/files/neg/warn-unused-params.scala new file mode 100644 index 0000000000..c7578e53a4 --- /dev/null +++ b/test/files/neg/warn-unused-params.scala @@ -0,0 +1,61 @@ + +trait InterFace { + /** Call something. */ + def call(a: Int, b: String, c: Double): Int +} + +trait BadAPI extends InterFace { + def f(a: Int, + b: String, // warn + c: Double): Int = { + println(c) + a + } + @deprecated ("no warn in deprecated API", since="yesterday") + def g(a: Int, + b: String, // no warn + c: Double): Int = { + println(c) + a + } + override def call(a: Int, + b: String, // no warn, required by superclass + c: Double): Int = { + println(c) + a + } + + def meth(x: Int) = x + + override def equals(other: Any): Boolean = true // no warn + + def i(implicit s: String) = 42 // yes, warn + + /* + def future(x: Int): Int = { + val y = 42 + val x = y // maybe option to warn only if shadowed + x + } + */ +} + +// mustn't alter warnings in super +trait PoorClient extends BadAPI { + override def meth(x: Int) = ??? // no warn + override def f(a: Int, b: String, c: Double): Int = a + b.toInt + c.toInt +} + +class Unusing(u: Int) { // warn + def f = ??? +} + +class Valuing(val u: Int) // no warn + +case class CaseyKasem(k: Int) // no warn + +case class CaseyAtTheBat(k: Int)(s: String) // warn + +trait Ignorance { + def f(readResolve: Int) = 42 // warn +} diff --git a/test/files/neg/warn-unused-patvars.check b/test/files/neg/warn-unused-patvars.check index 002f7a07ca..2665126a36 100644 --- a/test/files/neg/warn-unused-patvars.check +++ b/test/files/neg/warn-unused-patvars.check @@ -1,10 +1,10 @@ -warn-unused-patvars.scala:7: warning: private val x in trait Boundings is never used +warn-unused-patvars.scala:9: warning: private val x in trait Boundings is never used private val x = 42 // warn, sanity check ^ -warn-unused-patvars.scala:26: warning: local val x in method v is never used +warn-unused-patvars.scala:28: warning: local val x in method v is never used val D(x) = d // warn, fixme ^ -warn-unused-patvars.scala:30: warning: local val x in method w is never used +warn-unused-patvars.scala:32: warning: local val x in method w is never used val D(x @ _) = d // warn, fixme (valdef pos is different) ^ error: No warnings can be incurred under -Xfatal-warnings. diff --git a/test/files/neg/warn-unused-patvars.scala b/test/files/neg/warn-unused-patvars.scala index 6f4620c0c7..3d35dfedd6 100644 --- a/test/files/neg/warn-unused-patvars.scala +++ b/test/files/neg/warn-unused-patvars.scala @@ -1,4 +1,6 @@ +// verify no warning when -Ywarn-unused:-patvars + case class C(a: Int, b: String, c: Option[String]) case class D(a: Int) diff --git a/test/files/neg/warn-unused-privates.flags b/test/files/neg/warn-unused-privates.flags index 25474aefb3..5ab4f36371 100644 --- a/test/files/neg/warn-unused-privates.flags +++ b/test/files/neg/warn-unused-privates.flags @@ -1 +1 @@ --Ywarn-unused -Xfatal-warnings +-Ywarn-unused:privates,locals,patvars -Xfatal-warnings diff --git a/test/files/neg/warn-unused-privates.scala b/test/files/neg/warn-unused-privates.scala index bc2799067e..f0580f02d5 100644 --- a/test/files/neg/warn-unused-privates.scala +++ b/test/files/neg/warn-unused-privates.scala @@ -189,3 +189,7 @@ trait Forever { } yield 42 // val emitted only if needed, hence nothing unused } } + +trait Ignorance { + private val readResolve = 42 // ignore +} |