Skip to content

Commit 7c3ed8d

Browse files
committed
Add support for extension methods
1 parent 0e8914c commit 7c3ed8d

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

scaladoc/src/dotty/tools/scaladoc/tasty/ClassLikeSupport.scala

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,16 @@ trait ClassLikeSupport:
116116

117117
val methods = classDef.symbol.declaredMethods.collect {
118118
case methodSymbol: Symbol =>
119-
val defdef = methodSymbol.tree.asInstanceOf[DefDef]
120-
val methodVars = defdef.paramss.flatMap(_.params).collect {
119+
val defdef = methodSymbol.tree.asInstanceOf[DefDef]
120+
val methodVars = defdef.paramss.flatMap(_.params).collect {
121121
case TypeDef(name, _) => name
122122
}
123123
val vars = variableNames ++ methodVars
124+
val receiver: Option[Inkuire.Type] = Some(classType).filter(_ => !isModule).orElse(methodSymbol.extendedSymbol.map(_.asInkuire(vars, false)))
124125
Inkuire.ExternalSignature(
125126
signature = Inkuire.Signature(
126-
receiver = Some(classType).filter(_ => !isModule),
127-
arguments = defdef.paramss.flatMap(_.params).collect {
127+
receiver = receiver,
128+
arguments = methodSymbol.nonExtensionParamLists.flatMap(_.params).collect {
128129
case ValDef(_, tpe, _) => tpe.asInkuire(vars, false)
129130
},
130131
result = defdef.returnTpt.asInkuire(vars, false),
@@ -391,13 +392,7 @@ trait ClassLikeSupport:
391392
specificKind: (Kind.Def => Kind) = identity
392393
): Member =
393394
val method = methodSymbol.tree.asInstanceOf[DefDef]
394-
val paramLists: List[TermParamClause] =
395-
if emptyParamsList then Nil
396-
else if methodSymbol.isExtensionMethod then
397-
val params = method.termParamss
398-
if methodSymbol.isLeftAssoc || params.size == 1 then params.tail
399-
else params.head :: params.tail.drop(1)
400-
else method.termParamss
395+
val paramLists: List[TermParamClause] = methodSymbol.nonExtensionParamLists
401396
val genericTypes = if (methodSymbol.isClassConstructor) Nil else method.leadingTypeParams
402397

403398
val memberInfo = unwrapMemberInfo(c, methodSymbol)

scaladoc/src/dotty/tools/scaladoc/tasty/SymOps.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,15 @@ object SymOps:
136136
else termParamss(1).params(0)
137137
}
138138

139+
def nonExtensionParamLists: List[reflect.TermParamClause] =
140+
import reflect.*
141+
val method = sym.tree.asInstanceOf[DefDef]
142+
if sym.isExtensionMethod then
143+
val params = method.termParamss
144+
if sym.isLeftAssoc || params.size == 1 then params.tail
145+
else params.head :: params.tail.drop(1)
146+
else method.termParamss
147+
139148
end extension
140149

141150
end SymOps

0 commit comments

Comments
 (0)