Skip to content

Commit 424c093

Browse files
committed
Extension method groupping fix. CRs from PR #10306
1 parent 752cb1b commit 424c093

File tree

5 files changed

+25
-13
lines changed

5 files changed

+25
-13
lines changed

scala3doc/src/dotty/dokka/model/api/api.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ enum Modifier(val name: String, val prefix: Boolean):
4949
case Opaque extends Modifier("opaque", true)
5050
case Open extends Modifier("open", true)
5151

52-
case class ExtensionTarget(name: String, signature: Signature, dri: DRI)
52+
case class ExtensionTarget(name: String, signature: Signature, dri: DRI, position: Long)
5353
case class ImplicitConversion(from: DRI, to: DRI)
5454
trait ImplicitConversionProvider { def conversion: Option[ImplicitConversion] }
5555
trait Classlike

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,12 @@ trait ClassLikeSupport:
109109
private def parseMember(s: Tree): Option[Member] = processTreeOpt(s)(s match
110110
case dd: DefDef if !dd.symbol.isHiddenByVisibility && !dd.symbol.isSyntheticFunc && dd.symbol.isExtensionMethod =>
111111
dd.symbol.extendedSymbol.map { extSym =>
112-
val target = ExtensionTarget(extSym.symbol.normalizedName, extSym.tpt.dokkaType.asSignature, extSym.tpt.symbol.dri)
112+
val target = ExtensionTarget(
113+
extSym.symbol.normalizedName,
114+
extSym.tpt.dokkaType.asSignature,
115+
extSym.tpt.symbol.dri,
116+
extSym.symbol.pos.start
117+
)
113118
parseMethod(dd.symbol, kind = Kind.Extension(target))
114119
}
115120
// TODO check given methods?

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ case class TastyParser(qctx: QuoteContext, inspector: DokkaBaseTastyInspector, c
168168

169169
private def errorMsg[T](a: Any, m: => String, e: Throwable): Option[T] =
170170
val msg = try m catch case e: Throwable => a.toString
171-
println(s"ERROR: tree is faling: msg")
171+
println(s"ERROR: tree is faling: $msg")
172172
e.printStackTrace()
173173
throw e
174174

scala3doc/src/dotty/dokka/transformers/ImplicitMembersExtensionTransformer.scala

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,25 @@ import dotty.dokka.model.api._
1414
class ImplicitMembersExtensionTransformer(ctx: DokkaContext) extends DocumentableTransformer:
1515
override def invoke(original: DModule, context: DokkaContext): DModule =
1616
val classlikeMap = original.driMap
17+
val logger = context.getLogger
1718

18-
def expandMember(outerMembers: Seq[Member])(c: Member): Member =
19-
val companion = c match
20-
case classlike: DClass => ClasslikeExtension.getFrom(classlike).flatMap(_.companion).flatMap(classlikeMap.get)
19+
def retrieveCompanion(m: Member) = m match {
20+
case classlike: DClass =>
21+
val comp = ClasslikeExtension.getFrom(classlike).flatMap(_.companion)
22+
comp.flatMap { dri =>
23+
val res = classlikeMap.get(dri)
24+
if res.isEmpty then logger.warn(s"Companion for class ${classlike.name} exists but is missing in classlike map")
25+
res
26+
}
2127
case _ => None
28+
}
29+
30+
def expandMember(outerMembers: Seq[Member])(c: Member): Member =
31+
val companion = retrieveCompanion(c)
2232

2333
val allParents = c.parents.flatMap(p => classlikeMap.get(p.dri))
2434

25-
val parentCompanions = allParents.flatMap {
26-
case cls: DClasslike => ClasslikeExtension.getFrom(cls).flatMap(_.companion).flatMap(classlikeMap.get)
27-
case _ => None
28-
}
35+
val parentCompanions = allParents.flatMap(retrieveCompanion)
2936

3037
// TODO (#220): We can expand this on generic etc
3138
val implictSources = outerMembers ++ companion.toSeq ++ parentCompanions
@@ -34,7 +41,7 @@ class ImplicitMembersExtensionTransformer(ctx: DokkaContext) extends Documentabl
3441

3542
val MyDri = c.getDri
3643
def collectApplicableMembers(source: Member): Seq[Member] = source.allMembers.flatMap {
37-
case m @ Member(_, _, _, Kind.Extension(ExtensionTarget(_, _, MyDri)), Origin.DefinedWithin) =>
44+
case m @ Member(_, _, _, Kind.Extension(ExtensionTarget(_, _, MyDri, _)), Origin.DefinedWithin) =>
3845
Seq(m.withOrigin(Origin.ExtensionFrom(source.name, source.dri)).withKind(Kind.Def))
3946
case m @ Member(_, _, _, conversionProvider: ImplicitConversionProvider, Origin.DefinedWithin) =>
4047
conversionProvider.conversion match

scala3doc/src/dotty/dokka/translators/ScalaSignatureProvider.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ class ScalaSignatureProvider(contentConverter: CommentsToContentConverter, logge
3131
def driLink(text: String, dri: DRI): SignatureBuilder = ContentNodeBuilder(builder.driLink(text, dri))
3232
}
3333

34-
def signature(d: Documentable, s: Signature) = signatureContent(d){ builder =>
34+
def signature(d: Member, s: Signature) = signatureContent(d){ builder =>
3535
val res = ContentNodeBuilder(builder).signature(s)
3636
res.asInstanceOf[ContentNodeBuilder].builder
3737
}
3838

39-
override def signature(documentable: Documentable) =
39+
override def signature(documentable: Member) =
4040
JList(signatureContent(documentable){ builder =>
4141
val withAnnotations = ContentNodeBuilder(builder).annotationsBlock(documentable)
4242
val res = ScalaSignatureProvider.rawSignature(documentable, withAnnotations)

0 commit comments

Comments
 (0)