I just come with the following observation when playing with it for different edge cases:
-Vimplicits-verbose-candidate
In the following example:
trait F[I, O]
trait G1[A, B]
trait G2[A, B]
implicit def f[I, M, O](
implicit
g1: G1[I, M],
g2: G2[M, O]
): F[I, O] = ???
implicit def g1: G1[Int, String] = ???
implicitly[F[Int, Char]]
this trigger the error report:
newSource1.scala:26: error: implicit error;
!I e: F[Int, Char]
f invalid because:
!I g2: G2[M, Char]
implicitly[F[Int, Char]]
^
Turns out that the default implementation of:
def unapplyCandidate(e: ImplicitError): Tree =
e.candidate match {
case TypeApply(fun, _) => fun
case a => a
}
shrug off type signatures of f (it should be f[Int, String, Char]). debugging of this error becomes much harder, considering that the following line:
Shows only the unreified type signature, the reified version:
Cannot be found anywhere.
-Vimplicits-verbose-position
Since the parameter keepmodules is discarded in scala 2.13.6. Package or owner information won't be shown in the message. This means if we have multiple functions like f or g1 with similar signature, it will be difficult to determine which one is the real candidate.
This new option should display the line number for each candidate. Making it much harder to cause confusion, e.g. for the above example, the output may become:
newSource1.scala:26: error: implicit error;
!I e: F[Int, Char]
Annotation.f[Int, String, Char] invalid because ...... source-<toolbox>,line-18,offset=218
!I g2: G2[M, Char]
implicitly[F[Int, Char]]
^
The source-<toolbox>,line-18,offset=218 is generated by candidate.symbol.pos.showDebug, obviously this format can be improved.
I just come with the following observation when playing with it for different edge cases:
-Vimplicits-verbose-candidate
In the following example:
this trigger the error report:
Turns out that the default implementation of:
shrug off type signatures of f (it should be
f[Int, String, Char]). debugging of this error becomes much harder, considering that the following line:Shows only the unreified type signature, the reified version:
Cannot be found anywhere.
-Vimplicits-verbose-position
Since the parameter
keepmodulesis discarded in scala 2.13.6. Package or owner information won't be shown in the message. This means if we have multiple functions likeforg1with similar signature, it will be difficult to determine which one is the real candidate.This new option should display the line number for each candidate. Making it much harder to cause confusion, e.g. for the above example, the output may become:
The
source-<toolbox>,line-18,offset=218is generated bycandidate.symbol.pos.showDebug, obviously this format can be improved.