summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-09-08 12:55:01 +1000
committerJason Zaugg <jzaugg@gmail.com>2015-09-08 12:55:01 +1000
commit77a728eddc21d7d47828dab03d03afeafc081a81 (patch)
tree2b2456888150b5d188981fc440a791111cab493d /src/library
parent5af7f23c63ea13b5132abeb2abaff8b44f5f5f2a (diff)
parent5bd8ea0edffe7b725e5fa665a82a5795d5dafe8f (diff)
downloadscala-77a728eddc21d7d47828dab03d03afeafc081a81.tar.gz
scala-77a728eddc21d7d47828dab03d03afeafc081a81.tar.bz2
scala-77a728eddc21d7d47828dab03d03afeafc081a81.zip
Merge pull request #4673 from puffnfresh/issue/6806
SI-6806 Add an @implicitAmbiguous annotation
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/annotation/implicitAmbiguous.scala34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/library/scala/annotation/implicitAmbiguous.scala b/src/library/scala/annotation/implicitAmbiguous.scala
new file mode 100644
index 0000000000..46eab9ae8f
--- /dev/null
+++ b/src/library/scala/annotation/implicitAmbiguous.scala
@@ -0,0 +1,34 @@
+package scala.annotation
+
+import scala.annotation.meta._
+
+/**
+ * To customize the error message that's emitted when an implicit of type
+ * C[T1,..., TN] is found more than once, annotate the class C
+ * with @implicitAmbiguous. Assuming C has type parameters X1,..., XN, the
+ * error message will be the result of replacing all occurrences of ${Xi} in
+ * the string msg with the string representation of the corresponding type
+ * argument Ti. *
+ *
+ * If more than one @implicitAmbiguous annotation is collected, the compiler is
+ * free to pick any of them to display.
+ *
+ * Nice errors can direct users to fix imports or even tell them why code
+ * intentionally doesn't compile.
+ *
+ * {{{
+ * trait =!=[C, D]
+ *
+ * implicit def neq[E, F] : E =!= F = null
+ *
+ * @annotation.implicitAmbiguous("Could not prove ${J} =!= ${J}")
+ * implicit def neqAmbig1[G, H, J] : J =!= J = null
+ * implicit def neqAmbig2[I] : I =!= I = null
+ *
+ * implicitly[Int =!= Int]
+ * }}}
+ *
+ * @author Brian McKenna
+ * @since 2.12.0
+ */
+final class implicitAmbiguous(msg: String) extends scala.annotation.StaticAnnotation {}