diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-09-14 23:55:16 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2017-03-11 23:38:08 -0800 |
commit | f672aff3f3b92506741b62d8f7eae6d1e0dc36a7 (patch) | |
tree | 7bfacf173c601643e83a91bb5eb53fce9e0caf5e /test | |
parent | 9d9abffc94b28785e54bc2179b495d81f29b1e7f (diff) | |
download | scala-f672aff3f3b92506741b62d8f7eae6d1e0dc36a7.tar.gz scala-f672aff3f3b92506741b62d8f7eae6d1e0dc36a7.tar.bz2 scala-f672aff3f3b92506741b62d8f7eae6d1e0dc36a7.zip |
SI-8040 Warn unused pattern vars
Warn for unused `case X(x) =>` but, as an escape hatch,
not for `case X(x @ _) =>`. The latter form is deemed
documentary. (Named args could serve a similar purpose,
`case X(x = _) =>`.)
An attachment is used to mark the bound var, and the
symbol position is used to correlate the identifier
with the variable that is introduced. This mechanism
doesn't work yet when only a single var is defined.
Diffstat (limited to 'test')
-rw-r--r-- | test/files/neg/warn-unused-privates.check | 20 | ||||
-rw-r--r-- | test/files/neg/warn-unused-privates.scala | 32 |
2 files changed, 51 insertions, 1 deletions
diff --git a/test/files/neg/warn-unused-privates.check b/test/files/neg/warn-unused-privates.check index 6e1511d0e5..d273aa40f4 100644 --- a/test/files/neg/warn-unused-privates.check +++ b/test/files/neg/warn-unused-privates.check @@ -61,6 +61,24 @@ warn-unused-privates.scala:137: warning: private method x in class OtherNames is warn-unused-privates.scala:138: warning: private method y_= in class OtherNames is never used private def y_=(i: Int): Unit = ??? ^ +warn-unused-privates.scala:153: warning: local val x in method f is never used + val C(x, y, Some(z)) = c // warn + ^ +warn-unused-privates.scala:153: warning: local val y in method f is never used + val C(x, y, Some(z)) = c // warn + ^ +warn-unused-privates.scala:153: warning: local val z in method f is never used + val C(x, y, Some(z)) = c // warn + ^ +warn-unused-privates.scala:161: warning: local val z in method h is never used + val C(x @ _, y @ _, z @ Some(_)) = c // warn? + ^ +warn-unused-privates.scala:166: warning: local val x in method v is never used + val D(x) = d // warn + ^ +warn-unused-privates.scala:170: warning: local val x in method w is never used + val D(x @ _) = d // fixme + ^ warn-unused-privates.scala:97: warning: local var x in method f2 is never set - it could be a val var x = 100 // warn about it being a var ^ @@ -80,5 +98,5 @@ warn-unused-privates.scala:121: warning: local type OtherThing is never used type OtherThing = String // warn ^ error: No warnings can be incurred under -Xfatal-warnings. -27 warnings found +33 warnings found one error found diff --git a/test/files/neg/warn-unused-privates.scala b/test/files/neg/warn-unused-privates.scala index 2f67882632..1b702c7555 100644 --- a/test/files/neg/warn-unused-privates.scala +++ b/test/files/neg/warn-unused-privates.scala @@ -140,3 +140,35 @@ class OtherNames { def f = y } + +case class C(a: Int, b: String, c: Option[String]) +case class D(a: Int) + +trait Boundings { + + def c = C(42, "hello", Some("world")) + def d = D(42) + + def f() = { + val C(x, y, Some(z)) = c // warn + 17 + } + def g() = { + val C(x @ _, y @ _, Some(z @ _)) = c // no warn + 17 + } + def h() = { + val C(x @ _, y @ _, z @ Some(_)) = c // warn? + 17 + } + + def v() = { + val D(x) = d // warn + 17 + } + def w() = { + val D(x @ _) = d // fixme + 17 + } + +} |