Skip to content

Commit f1da1e1

Browse files
committed
Fix #4752: Support multiple @usecase sections
In the documentation, it is possible to have several `@usecase` sections, which means that each of these section should be displayed as a separate member in the documentation. So far, Dottydoc was only considering the first `@usecase` section and was disregarding the others. This commit fixes that, and generates a new member for each of the usecases. Fixes #4752
1 parent c528d6a commit f1da1e1

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ class UsecasePhase extends DocMiniPhase {
2727
}
2828

2929
override def transformDef(implicit ctx: Context) = { case df: DefImpl =>
30-
ctx.docbase
31-
.docstring(df.symbol)
32-
.flatMap(_.usecases.headOption.map(_.tpdCode))
33-
.map(defdefToDef(_, df.symbol))
34-
.getOrElse(df) :: Nil
30+
val defdefs =
31+
ctx.docbase.docstring(df.symbol)
32+
.map(_.usecases.map(_.tpdCode))
33+
.getOrElse(Nil)
34+
35+
if (defdefs.isEmpty) df :: Nil
36+
else defdefs.map(defdefToDef(_, df.symbol))
3537
}
3638
}

doc-tool/test/UsecaseTest.scala

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,34 @@ abstract class UsecaseBase extends DottyDocTest {
235235
}
236236
}
237237

238+
@Test def multipleUseCases: Unit = {
239+
val source = new SourceFile(
240+
name = "MultipleUseCases.scala",
241+
"""
242+
|package scala
243+
|
244+
|trait Test {
245+
| /** A first method
246+
| * @usecase def foo(x: Int): Int
247+
| * @usecase def foo(x: Double): Double
248+
| */
249+
| def foo(x: String): Unit
250+
|}
251+
""".stripMargin
252+
)
253+
254+
val className = "scala.Test"
255+
256+
check(className :: Nil, source :: Nil) { (ctx, packages) =>
257+
packages("scala") match {
258+
case PackageImpl(_, _, _, List(trt: Trait), _, _, _, _) =>
259+
val List(foo0: Def, foo1: Def) = trt.members
260+
assertEquals(TypeReference("Int", NoLink("Int", "scala.Int"), Nil), foo0.returnValue)
261+
assertEquals(TypeReference("Double", NoLink("Double", "scala.Double"), Nil), foo1.returnValue)
262+
}
263+
}
264+
}
265+
238266
@Test def checkIterator =
239267
checkFiles("../scala2-library/src/library/scala/collection/Iterator.scala" :: Nil) { case _ =>
240268
// success if typer throws no errors! :)

0 commit comments

Comments
 (0)