From e571c9cc3ee5a9e96b899285cdd2df3cdce06898 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Thu, 28 Nov 2013 20:16:17 +0100 Subject: Better error messages for common Function/Tuple mistakes Firstly, for `((a, b) => c): (Tuple2[A, B] => C)`, we currently just offer "missing parameter type." Is something of a rite of passage to know that you need `{ case (...)}` This commit stops short DWIM, but does offer a diagnostic to guide the user towards the supported way of destructuring a `Tuple` in the sole argument of a `Function1`. Secondly, another (less common?) way one might try to write a function to destructure a single tuple argument is: (((a, b)) => c) The parser now matches offers a specific error message for this, and points out the alternatives. In both cases, we avoid offering syntactically invalid alternatives, by detecting names that aren't valid as variable-patterns, and falling back to generic "paramN" in the error message. A handly utility function to sequence a list of options is liberated from the pattern matcher for broader use. --- test/files/neg/missing-param-type-tuple.scala | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 test/files/neg/missing-param-type-tuple.scala (limited to 'test/files/neg/missing-param-type-tuple.scala') diff --git a/test/files/neg/missing-param-type-tuple.scala b/test/files/neg/missing-param-type-tuple.scala new file mode 100644 index 0000000000..72c0c82034 --- /dev/null +++ b/test/files/neg/missing-param-type-tuple.scala @@ -0,0 +1,8 @@ +class C { + + val x: ((Int, Int)) => Int = (a, b) => 0 + + val y: ((Int, Int, Int)) => Int = (a, b, !!) => 0 + + val z: ((Int, Int, Int)) => Int = (a, NotAVariablePatternName, c) => 0 +} -- cgit v1.2.3