Skip to content

Commit df61568

Browse files
committed
Fix missing applied types in inherited functions
1 parent 2cdfcbb commit df61568

File tree

5 files changed

+86
-10
lines changed

5 files changed

+86
-10
lines changed

scala3doc-js/src/ux/ux.scala

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package dotty.dokka.ux
2+
3+
import org.scalajs.dom._
4+
import org.querki.jquery._
5+
import dotty.dokka.Globals
6+
import scala.scalajs.js
7+
import scala.scalajs.js.annotation.JSGlobal
8+
9+
def ux =
10+
window.addEventListener("DOMContentLoaded", _ => {
11+
Option(document.getElementById("leftToggler")).map {
12+
_.addEventListener("click", _ => document.getElementById("leftColumn").classList.toggle("open"))
13+
}
14+
val documentableElements = document.getElementsByClassName("documentableElement")
15+
for (i <- 0 until documentableElements.length) {
16+
documentableElements(i).addEventListener("click", _ => documentableElements(i).classList.toggle("expand"))
17+
}
18+
19+
$("#sideMenu2 span").on("click", { (el: raw.Element) =>
20+
$(el).parent.toggleClass("expanded")
21+
}: js.ThisFunction0[raw.Element, Unit])
22+
23+
$(".names .tab").on("click", { (el: raw.Element) => {
24+
val parent = $(el).parents(".tabs").first()
25+
val shown = $(el).hasClass("selected")
26+
val single = parent.hasClass("single")
27+
28+
if (single) parent.find(".tab.selected").removeClass("selected")
29+
30+
val id = $(el).attr("data-togglable")
31+
val myTab = parent.find("[data-togglable='" + id + "'].tab")
32+
33+
if (!shown) { myTab.addClass("selected") }
34+
if (shown && !single) myTab.removeClass("selected")
35+
36+
if (!shown && $(el).find(".showGraph") != null) {
37+
Globals.showGraph()
38+
$(el).find(".showGraph").removeClass("showGraph")
39+
}
40+
}}: js.ThisFunction0[raw.Element, Unit])
41+
42+
Option(document.location.hash).flatMap { (x: String) =>
43+
Option(document.getElementById(x.substring(1)))
44+
}.map(_.classList.toggle("expand"))
45+
46+
Option(document.getElementById("logo")).map(
47+
_.addEventListener("click", _ => window.location = Globals.pathToRoot) // global variable pathToRoot is created by the html renderer
48+
)
49+
Globals.hljs.registerLanguage("scala", Globals.highlightDotty)
50+
Globals.hljs.registerAliases(js.Array("dotty", "scala3"), "scala")
51+
Globals.hljs.initHighlighting()https://www.youtube.com/watch?v=NvpbW7JRu0Q&feature=youtu.be
52+
})
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package tests
2+
package hkts
3+
4+
class A[F[_]]
5+
6+
// class B[[A, B] =>> (A, B)]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package tests
2+
package typeAppliance
3+
4+
trait AClass[A, B]:
5+
def fun[C]: AClass[A, C]
6+
7+
trait BClass[A, B] extends AClass[A, B]:
8+
override def fun[C]: BClass[A, C]
9+
10+
abstract class CClass[B] extends BClass[Int, B]

scala3doc/src/dotty/dokka/tasty/ClassLikeSupport.scala

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ trait ClassLikeSupport:
122122
private def isDocumentableExtension(s: Symbol) =
123123
!s.isHiddenByVisibility && !s.isSyntheticFunc && s.isExtensionMethod
124124

125-
private def parseMember(s: Tree): Option[Member] = processTreeOpt(s)(s match
125+
private def parseMember(c: ClassDef)(s: Tree): Option[Member] = processTreeOpt(s)(s match
126126
case dd: DefDef if isDocumentableExtension(dd.symbol) =>
127127
dd.symbol.extendedSymbol.map { extSym =>
128128
val target = ExtensionTarget(
@@ -131,14 +131,14 @@ trait ClassLikeSupport:
131131
extSym.tpt.symbol.dri,
132132
extSym.symbol.pos.get.start
133133
)
134-
parseMethod(dd.symbol,specificKind = Kind.Extension(target, _))
134+
parseMethod(c, dd.symbol,specificKind = Kind.Extension(target, _))
135135
}
136136
// TODO check given methods?
137137
case dd: DefDef if !dd.symbol.isHiddenByVisibility && dd.symbol.isGiven =>
138138
Some(dd.symbol.owner.memberType(dd.name))
139139
.filterNot(_.exists)
140140
.map { _ =>
141-
parseMethod(dd.symbol, specificKind =
141+
parseMethod(c, dd.symbol, specificKind =
142142
Kind.Given(_, getGivenInstance(dd).map(_.asSignature), None)
143143
)
144144
}
@@ -157,11 +157,11 @@ trait ClassLikeSupport:
157157
case s: Select if s.symbol.isDefDef => s.symbol.dri
158158
}.orElse(exportedTarget.map(_.qualifier.tpe.typeSymbol.dri))
159159

160-
Some(parseMethod(dd.symbol, specificKind = Kind.Exported(_))
160+
Some(parseMethod(c, dd.symbol, specificKind = Kind.Exported(_))
161161
.withOrigin(Origin.ExportedFrom(s"$instanceName.$functionName", dri)))
162162

163163
case dd: DefDef if !dd.symbol.isHiddenByVisibility && !dd.symbol.isGiven && !dd.symbol.isSyntheticFunc && !dd.symbol.isExtensionMethod =>
164-
Some(parseMethod(dd.symbol))
164+
Some(parseMethod(c, dd.symbol))
165165

166166
case td: TypeDef if !td.symbol.flags.is(Flags.Synthetic) && (!td.symbol.flags.is(Flags.Case) || !td.symbol.flags.is(Flags.Enum)) =>
167167
Some(parseTypeDef(td))
@@ -207,9 +207,9 @@ trait ClassLikeSupport:
207207
)
208208
}
209209

210-
private def parseInheritedMember(s: Tree): Option[Member] = processTreeOpt(s)(s match
210+
private def parseInheritedMember(c: ClassDef)(s: Tree): Option[Member] = processTreeOpt(s)(s match
211211
case c: ClassDef if c.symbol.shouldDocumentClasslike && !c.symbol.isGiven => Some(parseClasslike(c, signatureOnly = true))
212-
case other => parseMember(other)
212+
case other => parseMember(c)(other)
213213
).map(_.withInheritedFrom(InheritedFrom(s.symbol.owner.normalizedName, s.symbol.owner.dri)))
214214

215215
extension (c: ClassDef)
@@ -225,8 +225,8 @@ trait ClassLikeSupport:
225225
case dd: DefDef if !dd.symbol.isClassConstructor && !(dd.symbol.isSuperBridgeMethod || dd.symbol.isDefaultHelperMethod) => dd
226226
case other => other
227227
}
228-
c.membersToDocument.flatMap(parseMember) ++
229-
inherited.flatMap(s => parseInheritedMember(s))
228+
c.membersToDocument.flatMap(parseMember(c)) ++
229+
inherited.flatMap(s => parseInheritedMember(c)(s))
230230
}
231231

232232
/** Extracts members while taking Dotty logic for patching the stdlib into account. */
@@ -237,7 +237,7 @@ trait ClassLikeSupport:
237237
val ownMemberDRIs = ownMembers.iterator.map(_.name).toSet + "experimental$"
238238
sym.tree.asInstanceOf[ClassDef]
239239
.membersToDocument.filterNot(m => ownMemberDRIs.contains(m.symbol.name))
240-
.flatMap(parseMember)
240+
.flatMap(parseMember(c))
241241
}
242242
c.symbol.fullName match {
243243
case "scala.Predef$" =>
@@ -318,6 +318,7 @@ trait ClassLikeSupport:
318318
classlikie.withNewMembers(cases).asInstanceOf[DClass]
319319

320320
def parseMethod(
321+
c: ClassDef,
321322
methodSymbol: Symbol,
322323
emptyParamsList: Boolean = false,
323324
paramPrefix: Symbol => String = _ => "",
@@ -357,6 +358,12 @@ trait ClassLikeSupport:
357358
val origin = if !methodSymbol.isOverriden then Origin.RegularlyDefined else
358359
val overridenSyms = methodSymbol.allOverriddenSymbols.map(_.owner)
359360
Origin.Overrides(overridenSyms.map(s => Overriden(s.name, s.dri)).toSeq)
361+
if(methodSymbol.normalizedName == "fun" && c.symbol.normalizedName == "CClass")
362+
println(method.returnTpt)
363+
println(typeForClass(c).asInstanceOf[dotty.tools.dotc.core.Types.Type]
364+
.memberInfo(methodSymbol.asInstanceOf[dotty.tools.dotc.core.Symbols.Symbol])(using qctx.asInstanceOf[scala.quoted.runtime.impl.QuotesImpl].ctx)
365+
)
366+
360367

361368
mkMember(
362369
method.symbol,

scala3doc/src/dotty/dokka/tasty/SyntheticSupport.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,4 @@ trait SyntheticsSupport:
105105
given dotc.core.Contexts.Context = qctx.asInstanceOf[scala.quoted.runtime.impl.QuotesImpl].ctx
106106
val cSym = c.symbol.asInstanceOf[dotc.core.Symbols.Symbol]
107107
cSym.typeRef.appliedTo(cSym.typeParams.map(_.typeRef)).asInstanceOf[TypeRepr]
108+

0 commit comments

Comments
 (0)