summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-06-04 13:04:05 +1000
committerJason Zaugg <jzaugg@gmail.com>2015-06-04 13:04:05 +1000
commit0bc7fa67d130f75079df79814b33ef073254e27a (patch)
tree3c4f04bad8624e8ded8155ffd87d8028d5d5f9a7
parent70f0b1ded880ec9b3a9478d02f1898fcfeee230c (diff)
parent79436caa98ba46de644841a67ea9ff103831e574 (diff)
downloadscala-0bc7fa67d130f75079df79814b33ef073254e27a.tar.gz
scala-0bc7fa67d130f75079df79814b33ef073254e27a.tar.bz2
scala-0bc7fa67d130f75079df79814b33ef073254e27a.zip
Merge pull request #4537 from som-snytt/issue/xml-unapply
SI-9343 Xlint less strict on pattern sequences
-rw-r--r--src/compiler/scala/tools/nsc/transform/patmat/ScalacPatternExpanders.scala6
-rw-r--r--test/files/neg/t7623.check24
-rw-r--r--test/files/neg/t7623.scala8
3 files changed, 17 insertions, 21 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/patmat/ScalacPatternExpanders.scala b/src/compiler/scala/tools/nsc/transform/patmat/ScalacPatternExpanders.scala
index 2753baa51d..b1783dc81f 100644
--- a/src/compiler/scala/tools/nsc/transform/patmat/ScalacPatternExpanders.scala
+++ b/src/compiler/scala/tools/nsc/transform/patmat/ScalacPatternExpanders.scala
@@ -112,8 +112,10 @@ trait ScalacPatternExpanders {
arityError("not enough")
else if (elementArity > 0 && !isSeq)
arityError("too many")
- else if (settings.warnStarsAlign && isSeq && productArity > 0 && (elementArity > 0 || !isStar))
- warn("A repeated case parameter or extracted sequence should be matched only by a sequence wildcard (_*).")
+ else if (settings.warnStarsAlign && isSeq && productArity > 0 && elementArity > 0) warn {
+ if (isStar) "Sequence wildcard (_*) does not align with repeated case parameter or extracted sequence; the result may be unexpected."
+ else "A repeated case parameter or extracted sequence is not matched by a sequence wildcard (_*), and may fail at runtime."
+ }
aligned
}
diff --git a/test/files/neg/t7623.check b/test/files/neg/t7623.check
index db368dd369..de35023664 100644
--- a/test/files/neg/t7623.check
+++ b/test/files/neg/t7623.check
@@ -1,21 +1,15 @@
-t7623.scala:19: warning: A repeated case parameter or extracted sequence should be matched only by a sequence wildcard (_*).
- def f = "" match { case X(s) => }
+t7623.scala:21: warning: A repeated case parameter or extracted sequence is not matched by a sequence wildcard (_*), and may fail at runtime.
+ def g = "" match { case X(s, t) => } // warn
^
-t7623.scala:21: warning: A repeated case parameter or extracted sequence should be matched only by a sequence wildcard (_*).
- def g = "" match { case X(s, t) => }
+t7623.scala:23: warning: Sequence wildcard (_*) does not align with repeated case parameter or extracted sequence; the result may be unexpected.
+ def h = "" match { case X(s, t, u @ _*) => } // warn
^
-t7623.scala:23: warning: A repeated case parameter or extracted sequence should be matched only by a sequence wildcard (_*).
- def h = "" match { case X(s, t, u @ _*) => }
- ^
-t7623.scala:9: warning: A repeated case parameter or extracted sequence should be matched only by a sequence wildcard (_*).
- def f = C("") match { case C(s) => }
- ^
-t7623.scala:11: warning: A repeated case parameter or extracted sequence should be matched only by a sequence wildcard (_*).
- def g = C("") match { case C(s, t) => }
+t7623.scala:11: warning: A repeated case parameter or extracted sequence is not matched by a sequence wildcard (_*), and may fail at runtime.
+ def g = C("") match { case C(s, t) => } // warn
^
-t7623.scala:13: warning: A repeated case parameter or extracted sequence should be matched only by a sequence wildcard (_*).
- def h = C("") match { case C(s, t, u @ _*) => }
+t7623.scala:13: warning: Sequence wildcard (_*) does not align with repeated case parameter or extracted sequence; the result may be unexpected.
+ def h = C("") match { case C(s, t, u @ _*) => } // warn
^
error: No warnings can be incurred under -Xfatal-warnings.
-6 warnings found
+four warnings found
one error found
diff --git a/test/files/neg/t7623.scala b/test/files/neg/t7623.scala
index 5c40f37bc1..5334cc5f69 100644
--- a/test/files/neg/t7623.scala
+++ b/test/files/neg/t7623.scala
@@ -8,9 +8,9 @@ object X { def unapplySeq(a: Any): Option[(String, Seq[Int])] = Some("", List(1,
trait Ctest {
def f = C("") match { case C(s) => }
- def g = C("") match { case C(s, t) => }
+ def g = C("") match { case C(s, t) => } // warn
- def h = C("") match { case C(s, t, u @ _*) => }
+ def h = C("") match { case C(s, t, u @ _*) => } // warn
def ok = C("") match { case C(s, u @ _*) => }
}
@@ -18,9 +18,9 @@ trait Ctest {
trait Xtest {
def f = "" match { case X(s) => }
- def g = "" match { case X(s, t) => }
+ def g = "" match { case X(s, t) => } // warn
- def h = "" match { case X(s, t, u @ _*) => }
+ def h = "" match { case X(s, t, u @ _*) => } // warn
def ok = "" match { case X(s, u @ _*) => }
}