Skip to content

Commit

Permalink
fix #110
Browse files Browse the repository at this point in the history
  • Loading branch information
tribbloid committed Nov 21, 2023
1 parent 874bc62 commit e8153e8
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 31 deletions.
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,7 @@ idea {
".gradle",
"gradle",
"spike",
".history"
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -395,9 +395,17 @@ trait SplainFormattingExtension extends typechecker.splain.SplainFormatting with

if (isAux(tpe)) tpe
else {

val result = tpe.dealias
result
val result = tpe.dealias.normalize
result match {
case p: PolyType =>
val target = dealias(p.resultType)
val _p = p.copy(
resultType = target
)
_p
case _ =>
result
}
}
}

Expand Down Expand Up @@ -608,11 +616,11 @@ trait SplainFormattingExtension extends typechecker.splain.SplainFormatting with

protected def formatDiffImplNoDisambiguation(found: Type, req: Type, top: Boolean): Formatted = {

val (left, right) = dealias(found) -> dealias(req)
val reduced = Seq(found, req).map(dealias)
val Seq(left, right) = reduced

val normalized = Seq(left, right).map(_.normalize).distinct
if (normalized.size == 1) {
val only = normalized.head
if (reduced.distinct.size == 1) {
val only = reduced.head
val result = formatType(only, top)

val basedOn = Seq(found, req).distinct
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@ trait TyperCompatViews {

case class TypeView(self: Type) {

lazy val extractArgs: List[global.Type] = self match {
// PolyType handling is removed for being unsound
case t: AliasTypeRef if !isAux(self) =>
t.betaReduce.typeArgs.map(a => if (a.typeSymbolDirect.isTypeParameter) WildcardType else a)
case _ => self.typeArgs
lazy val extractArgs: List[global.Type] = {

self.typeArgs
}

lazy val noArgType: Type = if (extractArgs.nonEmpty) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,14 +143,7 @@ f invalid because
implicitly[String]
^
newSource1.scala:11: error: implicit error;
!I e:
DeepHole.C1[
DeepHole.T3[
DeepHole.T1[List[String], ?],
DeepHole.T2[DeepHole.Id, DeepHole.C4, ?],
?
]
]
!I e: DeepHole.C1[[Z]DeepHole.C2[DeepHole.T1,DeepHole.T2,Z]]
implicitly[C1[T3]]
^
newSource1.scala:9: error: implicit error;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ val x: vecInt.Head = ??? : Option[String]
^
newSource1.scala:8: error: implicit error;
!I e:
Option[Int] (reduced from) { FoundReqVsImplicit.vecInt.Head[Int] } =:=
Option[Int] (reduced from) { FoundReqVsImplicit.vecInt.Head } =:=
Option[String]
Cannot prove that FoundReqVsImplicit.vecInt.Head =:= Option[String].

Expand All @@ -19,6 +19,6 @@ implicitly[vecInt.Head =:= Option[String]]
newSource1.scala:10: error: type mismatch;
Option[String|Int]
――(right side reduced from)
FoundReqVsImplicit.vecInt.Head[Int]
FoundReqVsImplicit.vecInt.Head
val x: vecInt.Head = ??? : Option[String]
^
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,21 @@ newSource1.scala:16: error: implicit error;
――(defined at newSource1.scala:8:13)
wrongf(new A)
^
newSource1.scala:5: error: implicit error;
!I e: String :: Int :: Boolean
implicitly[K]
^
newSource1.scala:7: error: type mismatch;
String("abc")|String :: Int :: Boolean
def v: K = "abc"
^
newSource1.scala:5: error: implicit error;
!I e: String :: Int :: Boolean (reduced from) { Test.K }
implicitly[K]
^
newSource1.scala:7: error: type mismatch;
String("abc")|String :: Int :: Boolean
――(right side reduced from)
Test.K
def v: K = "abc"
^
19 changes: 19 additions & 0 deletions core/src/test/scala/splain/plugin/VTypeDetailSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,18 @@ class VTypeDetailSpec extends SpecBase.Direct {
}
"""

final val reduceToInfix =
"""
object Test {
trait ::[A, B]
type K = String :: Int :: Boolean
implicitly[K]
def v: K = "abc"
}
"""

describe("#113") {

check(wrongContexts, profile = "-P:splain:Vtype-detail:1", numberOfErrors = 2)
Expand All @@ -40,4 +52,11 @@ class VTypeDetailSpec extends SpecBase.Direct {
check(wrongContexts, profile = "-P:splain:Vtype-detail:6", numberOfErrors = 2)
}

describe("#119") {

check(reduceToInfix, profile = "-P:splain:Vtype-detail:3", numberOfErrors = 2)

check(reduceToInfix, profile = "-P:splain:Vtype-detail:4", numberOfErrors = 2)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -172,15 +172,7 @@ f invalid because
newSource1.scala:11: error: implicit error;
!I e:
splain.acceptance.builtin.StaticBasicSpec.DeepHole.C1[
splain.acceptance.builtin.StaticBasicSpec.DeepHole.T3[
splain.acceptance.builtin.StaticBasicSpec.DeepHole.T1[List[String], ?],
splain.acceptance.builtin.StaticBasicSpec.DeepHole.T2[
splain.acceptance.builtin.StaticBasicSpec.DeepHole.Id,
splain.acceptance.builtin.StaticBasicSpec.DeepHole.C4,
?
],
?
]
[Z]splain.acceptance.builtin.StaticBasicSpec.DeepHole.C2[splain.acceptance.builtin.StaticBasicSpec.DeepHole.T1,splain.acceptance.builtin.StaticBasicSpec.DeepHole.T2,Z]
]
implicitly[C1[T3]]
^
Expand Down

0 comments on commit e8153e8

Please sign in to comment.