From 815d6d4923d5ab9679881f95088961404decebbf Mon Sep 17 00:00:00 2001 From: Quentin Bernet Date: Sat, 22 Jan 2022 18:46:57 +0100 Subject: [PATCH 1/3] Add problematic test --- scaladoc-testcases/src/tests/typesSignatures.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scaladoc-testcases/src/tests/typesSignatures.scala b/scaladoc-testcases/src/tests/typesSignatures.scala index a66c2a521ce8..f0bcd6975277 100644 --- a/scaladoc-testcases/src/tests/typesSignatures.scala +++ b/scaladoc-testcases/src/tests/typesSignatures.scala @@ -35,6 +35,8 @@ class Base type H = () => String type I = (Int, String, Int) => (String, Int) + + type J = (a: A) => a.type } class Operators From 487551ddf420069163faa19a5b1e967aac0ca3a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Wed, 2 Feb 2022 11:55:41 +0100 Subject: [PATCH 2/3] Fix dependent function types rendering --- .../tools/scaladoc/tasty/TypesSupport.scala | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/scaladoc/src/dotty/tools/scaladoc/tasty/TypesSupport.scala b/scaladoc/src/dotty/tools/scaladoc/tasty/TypesSupport.scala index c0197b152a5f..772f3a9dd02d 100644 --- a/scaladoc/src/dotty/tools/scaladoc/tasty/TypesSupport.scala +++ b/scaladoc/src/dotty/tools/scaladoc/tasty/TypesSupport.scala @@ -92,7 +92,6 @@ trait TypesSupport: def noSupported(name: String): SSignature = println(s"WARN: Unsupported type: $name: ${tp.show}") plain(s"Unsupported[$name]").l - tp match case OrType(left, right) => inner(left) ++ keyword(" | ").l ++ inner(right) case AndType(left, right) => inner(left) ++ keyword(" & ").l ++ inner(right) @@ -117,7 +116,6 @@ trait TypesSupport: ++ keyword(" =>> ").l ++ inner(resType) - case r: Refinement => { //(parent, name, info) def getRefinementInformation(t: TypeRepr): List[TypeRepr] = t match { case r: Refinement => getRefinementInformation(r.parent) :+ r @@ -163,13 +161,25 @@ trait TypesSupport: plain("[").l ++ paramBounds ++ plain("]").l ++ keyword(" => ").l ++ paramList ++ keyword(" => ").l ++ resType case other => noSupported(s"Not supported type in refinement $info") } + + def parseDependentFunctionType(info: TypeRepr): SSignature = info match { + case m: MethodType => + val paramList = getParamList(m) + paramList ++ keyword(" => ").l ++ inner(m.resType) + case other => noSupported("Dependent function type without MethodType refinement") + } + val refinementInfo = getRefinementInformation(r) val refinedType = refinementInfo.head val refinedElems = refinementInfo.tail.collect{ case r: Refinement => r }.toList val prefix = if refinedType.typeSymbol != defn.ObjectClass then inner(refinedType) ++ plain(" ").l else Nil if (refinedType.typeSymbol.fullName == "scala.PolyFunction" && refinedElems.size == 1) { parsePolyFunction(refinedElems.head.info) - } else { + } + else if (r.isDependentFunctionType) { + parseDependentFunctionType(r.info) + } + else { prefix ++ plain("{ ").l ++ refinedElems.flatMap(e => parseRefinedElem(e.name, e.info)) ++ plain(" }").l } } @@ -274,7 +284,7 @@ trait TypesSupport: case ParamRef(TypeLambda(names, _, _), i) => tpe(names.apply(i)).l - case ParamRef(m: MethodType, i) => tpe(m.paramNames(i)).l + case ParamRef(m: MethodType, i) => tpe(m.paramNames(i)).l ++ plain(".type").l case RecursiveType(tp) => inner(tp) From f2888c43be50fe50e121ddf3cf77b607582882b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Tue, 15 Feb 2022 13:04:42 +0100 Subject: [PATCH 3/3] Add dependent function type testcase --- scaladoc-testcases/src/tests/typesSignatures.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scaladoc-testcases/src/tests/typesSignatures.scala b/scaladoc-testcases/src/tests/typesSignatures.scala index f0bcd6975277..4d8d99f6ce73 100644 --- a/scaladoc-testcases/src/tests/typesSignatures.scala +++ b/scaladoc-testcases/src/tests/typesSignatures.scala @@ -37,6 +37,8 @@ class Base type I = (Int, String, Int) => (String, Int) type J = (a: A) => a.type + + type K = [A] => (a: A) => a.type } class Operators