Skip to content

Commit

Permalink
TreePrinter: HKTs, #SCL-19042
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelfatin committed Jun 23, 2021
1 parent 09f12e4 commit 570339a
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 8 deletions.
37 changes: 37 additions & 0 deletions tasty/runtime/data/parameter/HKT.scala
@@ -0,0 +1,37 @@
package parameter

trait HKT {
trait T1[A[_]]

trait T2[A[_], B[_]]

trait T3[A[_, _]]

trait T4[A[_[_]]]

trait T5[A[X]]

trait T6[A[X], B[Y]]

trait T7[A[X, Y]]

trait T8[A[X[Z]]]

type t0[_]

type t1[_[_]]

type t2[_[_], _[_]]

type t3[_[_, _]]

type t4[_[_[_]]]

type t5[A[X]]

type t6[A[X], B[Y]]

type t7[A[X, Y]]

type t8[A[X[Z]]]
}
Binary file added tasty/runtime/data/parameter/HKT.tasty
Binary file not shown.
Expand Up @@ -27,10 +27,10 @@ object TastyReaderTest {
"member/Type",
"member/Val",
"member/Var",
"package1/Members",
"package1/topLevel",
"package1/package2/Chained",
"package1/package2/Flat",
"package1/Members",
"package1/topLevel",
"parameter/Bounds",
"parameter/ByName",
"parameter/CaseClass",
Expand All @@ -41,11 +41,12 @@ object TastyReaderTest {
"parameter/EnumCaseClass",
"parameter/Extension",
"parameter/ExtensionMethod",
"parameter/HKT",
"parameter/InlineModifier",
"parameter/Modifiers",
"parameter/Repeated",
"parameter/Trait",
"parameter/Type",
"parameter/InlineModifier",
"parameter/Modifiers",
"parameter/Variance", // TODO TypeMember
"typeDefinition/Class",
"typeDefinition/Companions",
Expand Down
Expand Up @@ -49,7 +49,7 @@ object TreePrinter {
val modifiers = modifiersIn(if (isObject) node.previousSibling.getOrElse(node) else node,
if (isGivenImplicitClass) Set(GIVEN) else (if (isEnum) Set(ABSTRACT, SEALED, CASE, FINAL) else (if (isTypeMember) Set.empty else Set(OPAQUE))), isParameter = false) + (if (isImplicitClass) "implicit " else "")
modifiers + keyword + (if (isAnonymousGiven) "" else identifier) + (if (!isTypeMember) textOf(template, Some(node)) else {
val repr = node.children.headOption.filter(_.is(LAMBDAtpt)).getOrElse(node)
val repr = node.children.headOption.filter(_.is(LAMBDAtpt)).getOrElse(node) // TODO handle LAMBDAtpt in parametersIn?
val bounds = repr.children.find(_.is(TYPEBOUNDStpt))
parametersIn(repr, Some(repr)) + (if (bounds.isDefined) boundsIn(bounds.get)
else " = " + (if (node.hasFlag(OPAQUE)) "???" else simple(textOfType(repr.children.findLast(_.isTypeTree).get)))) // TODO parameter, { /* compiled code */ }
Expand Down Expand Up @@ -200,7 +200,7 @@ object TreePrinter {
var next = false

tps.foreach {
case Node(TYPEPARAM, Seq(name), Seq(bounds @ Node(TYPEBOUNDStpt, _, _: _*), _: _*)) =>
case node @ Node(TYPEPARAM, Seq(name), _: _*) =>
if (!open) {
params += "["
open = true
Expand All @@ -217,8 +217,14 @@ object TreePrinter {
params += "-"
}
}
params += name
params += boundsIn(bounds)
params += (if (name.startsWith("_$")) "_" else name) // TODO detect Unique name
node.children match {
case Seq(lambda @ Node(LAMBDAtpt, _, _: _*), _: _*) =>
params += parametersIn(lambda)
case Seq(bounds @ Node(TYPEBOUNDStpt, _, _: _*), _: _*) =>
params += boundsIn(bounds)
}

next = true
case _ =>
}
Expand Down

0 comments on commit 570339a

Please sign in to comment.