summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2016-09-14 23:55:16 -0700
committerSom Snytt <som.snytt@gmail.com>2017-03-11 23:38:08 -0800
commitf672aff3f3b92506741b62d8f7eae6d1e0dc36a7 (patch)
tree7bfacf173c601643e83a91bb5eb53fce9e0caf5e /test
parent9d9abffc94b28785e54bc2179b495d81f29b1e7f (diff)
downloadscala-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.check20
-rw-r--r--test/files/neg/warn-unused-privates.scala32
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
+ }
+
+}