aboutsummaryrefslogtreecommitdiff
path: root/dottydoc
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-08-24 17:25:11 +0200
committerFelix Mulder <felix.mulder@gmail.com>2016-10-06 17:08:03 +0200
commitade23066b1178575be24a403eae5cf234e18ecdf (patch)
tree1397c18a3f4b6e8a9b91b2adc3d1520c6ef1003e /dottydoc
parent567798a8f66343993f93250d3261d02dccb86bfc (diff)
downloaddotty-ade23066b1178575be24a403eae5cf234e18ecdf.tar.gz
dotty-ade23066b1178575be24a403eae5cf234e18ecdf.tar.bz2
dotty-ade23066b1178575be24a403eae5cf234e18ecdf.zip
Add `UsecasePhase` to dottydoc
Diffstat (limited to 'dottydoc')
-rw-r--r--dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala3
-rw-r--r--dottydoc/src/dotty/tools/dottydoc/core/UsecasePhase.scala26
-rw-r--r--dottydoc/test/UsecaseTest.scala52
3 files changed, 80 insertions, 1 deletions
diff --git a/dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala b/dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala
index 2d4c7abcf..dd0bb0ec4 100644
--- a/dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala
+++ b/dottydoc/src/dotty/tools/dottydoc/DottyDoc.scala
@@ -31,7 +31,8 @@ class DocCompiler extends Compiler {
List(new DocFrontEnd),
List(new DocImplicitsPhase),
List(new DocASTPhase),
- List(DocMiniTransformations(new LinkReturnTypes,
+ List(DocMiniTransformations(new UsecasePhase,
+ new LinkReturnTypes,
new LinkParamListTypes,
new LinkImplicitlyAddedTypes,
new LinkSuperTypes,
diff --git a/dottydoc/src/dotty/tools/dottydoc/core/UsecasePhase.scala b/dottydoc/src/dotty/tools/dottydoc/core/UsecasePhase.scala
new file mode 100644
index 000000000..758d65e92
--- /dev/null
+++ b/dottydoc/src/dotty/tools/dottydoc/core/UsecasePhase.scala
@@ -0,0 +1,26 @@
+package dotty.tools
+package dottydoc
+package core
+
+import dotc.core.Contexts.Context
+import dotc.ast.tpd
+
+import transform.DocMiniPhase
+import model.internal._
+import model.factories._
+import dotty.tools.dotc.core.Symbols.Symbol
+
+class UsecasePhase extends DocMiniPhase {
+ private def defdefToDef(d: tpd.DefDef, sym: Symbol)(implicit ctx: Context) = DefImpl(
+ sym,
+ d.name.decode.toString,
+ flags(d), path(d.symbol),
+ returnType(d.tpt.tpe),
+ typeParams(d.symbol),
+ paramLists(d.symbol.info)
+ )
+
+ override def transformDef(implicit ctx: Context) = { case df: DefImpl =>
+ ctx.docbase.docstring(df.symbol).flatMap(_.usecases.headOption.map(_.tpdCode)).map(defdefToDef(_, df.symbol)).getOrElse(df)
+ }
+}
diff --git a/dottydoc/test/UsecaseTest.scala b/dottydoc/test/UsecaseTest.scala
new file mode 100644
index 000000000..e2190e709
--- /dev/null
+++ b/dottydoc/test/UsecaseTest.scala
@@ -0,0 +1,52 @@
+package dotty.tools
+package dottydoc
+
+import org.junit.Test
+import org.junit.Assert._
+
+import dotc.util.SourceFile
+import model._
+import model.internal._
+import model.references._
+
+class UsecaseTest extends DottyTest {
+ @Test def simpleUsecase = {
+ val source = new SourceFile(
+ "DefWithUseCase.scala",
+ """
+ |package scala
+ |
+ |trait Test[A] {
+ | /** Definition with a "disturbing" signature
+ | *
+ | * @usecase def foo: A
+ | */
+ | def foo[B]: A => B
+ |}
+ """.stripMargin
+ )
+
+ checkSources(source :: Nil) { packages =>
+ packages("scala") match {
+ case PackageImpl(_, _, List(trt: Trait), _, _) =>
+ val List(map: Def) = trt.members
+
+ val returnValue = map.returnValue match {
+ case ref: TypeReference => ref.title
+ case _ =>
+ assert(
+ false,
+ "Incorrect return value after usecase transformation"
+ )
+ ""
+ }
+
+ assert(
+ map.typeParams.isEmpty,
+ "Type parameters were not stripped by usecase"
+ )
+ assert(returnValue == "A", "Incorrect return type after usecase")
+ }
+ }
+ }
+}