aboutsummaryrefslogtreecommitdiff
path: root/doc-tool
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2017-01-18 17:45:42 +0100
committerFelix Mulder <felix.mulder@gmail.com>2017-01-31 14:32:39 +0100
commite4ecaa0d977661954a7c686e3fe8eca2d71dba82 (patch)
tree970fcd7d112b8fb21ce39656225d2c0aa8d27b7f /doc-tool
parent6c07096250f18add02fbd8573211e4004872b9c9 (diff)
downloaddotty-e4ecaa0d977661954a7c686e3fe8eca2d71dba82.tar.gz
dotty-e4ecaa0d977661954a7c686e3fe8eca2d71dba82.tar.bz2
dotty-e4ecaa0d977661954a7c686e3fe8eca2d71dba82.zip
Harmonize package objects and packages in Doc AST
Diffstat (limited to 'doc-tool')
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala1
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/core/PackageObjectsPhase.scala35
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/entities.scala2
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/internal.scala1
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/java.scala3
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/json.scala1
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/references.scala1
-rw-r--r--doc-tool/test/ConstructorTest.scala14
-rw-r--r--doc-tool/test/PackageStructure.scala8
-rw-r--r--doc-tool/test/UsecaseTest.scala10
10 files changed, 59 insertions, 17 deletions
diff --git a/doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala b/doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala
index af4aaae4f..55b079adf 100644
--- a/doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala
@@ -25,6 +25,7 @@ class DocCompiler extends Compiler {
List(new DocASTPhase),
List(DocMiniTransformations(new UsecasePhase,
new DocstringPhase,
+ new PackageObjectsPhase,
new LinkReturnTypes,
new LinkParamListTypes,
new LinkImplicitlyAddedTypes,
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/PackageObjectsPhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/PackageObjectsPhase.scala
new file mode 100644
index 000000000..adcadb0ba
--- /dev/null
+++ b/doc-tool/src/dotty/tools/dottydoc/core/PackageObjectsPhase.scala
@@ -0,0 +1,35 @@
+package dotty.tools
+package dottydoc
+package core
+
+import dotty.tools.dotc.core.Symbols.Symbol
+import dotc.core.Contexts.Context
+import dotc.ast.tpd
+
+import model._
+import model.internal._
+import util.syntax._
+import transform.DocMiniPhase
+
+class PackageObjectsPhase extends DocMiniPhase {
+
+ override def transformPackage(implicit ctx: Context) = { case pkg: PackageImpl =>
+ pkg
+ .members
+ .collect { case o: Object if o.symbol.isPackageObject => o }
+ .headOption
+ .map { obj =>
+ pkg.copy(
+ members = obj.members ++ pkg.members,
+ superTypes = obj.superTypes,
+ comment = obj.comment
+ )
+ }
+ .getOrElse(pkg)
+ }
+
+ override def transformObject(implicit ctx: Context) = { case obj: Object =>
+ if (obj.symbol.isPackageObject) NonEntity
+ else obj
+ }
+}
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
index a40666e0d..613788964 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
@@ -84,7 +84,7 @@ trait ImplicitlyAddedEntity extends Entity {
def implicitlyAddedFrom: Option[Reference]
}
-trait Package extends Entity with Members {
+trait Package extends Entity with Members with SuperTypes {
val kind = "package"
}
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala
index 5bc410706..ac789f29f 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala
@@ -17,6 +17,7 @@ object internal {
name: String,
var members: List[Entity],
path: List[String],
+ superTypes: List[MaterializableLink] = Nil,
var comment: Option[Comment] = None
) extends Package with Impl
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/java.scala b/doc-tool/src/dotty/tools/dottydoc/model/java.scala
index 8e493f889..189012e18 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/java.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/java.scala
@@ -52,6 +52,7 @@ object java {
"path" -> ent.path.asJava,
"members" -> ent.members.map(_.asJava()).asJava,
"comment" -> ent.comment.map(_.asJava).asJava,
+ "superTypes" -> ent.superTypes,
"hasVisibleMembers" -> ent.hasVisibleMembers
) ++ extras).asJava
}
@@ -234,6 +235,8 @@ object java {
"title" -> title,
"scala" -> ref
).asJava
+
+ case EmptyReference => ???
}
}
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/json.scala b/doc-tool/src/dotty/tools/dottydoc/model/json.scala
index 145728f8a..766f0c147 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/json.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/json.scala
@@ -63,6 +63,7 @@ object json {
s"""{"args":${ref.args.map(refToJson).mkString("[",",","]")},"returnValue":${refToJson(ref.returnValue)},"kind": "FunctionReference"}"""
case ref: TupleReference =>
s"""{"args":${ref.args.map(refToJson).mkString("[",",","]")},"kind": "TupleReference"}"""
+ case EmptyReference => ???
}
implicit class ReferenceJson(val ref: Reference) extends AnyVal { def json: String = refToJson(ref) }
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/references.scala b/doc-tool/src/dotty/tools/dottydoc/model/references.scala
index 766b2a340..02304b302 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/references.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/references.scala
@@ -11,6 +11,7 @@ object references {
final case class BoundsReference(low: Reference, high: Reference) extends Reference
final case class NamedReference(title: String, ref: Reference, isByName: Boolean = false, isRepeated: Boolean = false) extends Reference
final case class ConstantReference(title: String) extends Reference
+ final case object EmptyReference extends Reference
/** Use MaterializableLink for entities that need be picklable */
sealed trait MaterializableLink { def title: String }
diff --git a/doc-tool/test/ConstructorTest.scala b/doc-tool/test/ConstructorTest.scala
index 76abce100..4808ceab3 100644
--- a/doc-tool/test/ConstructorTest.scala
+++ b/doc-tool/test/ConstructorTest.scala
@@ -22,7 +22,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: Class), _, _) =>
+ case PackageImpl(_, _, _, List(cls: Class), _, _, _) =>
cls.constructors.headOption match {
case Some(ParamListImpl(NamedReference("str", _, false, false) :: Nil, false) :: Nil) =>
// success!
@@ -44,7 +44,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: Class), _, _) =>
+ case PackageImpl(_, _, _, List(cls: Class), _, _, _) =>
cls.constructors match {
case (
ParamListImpl(NamedReference("str1", _, false, false) :: Nil, false) ::
@@ -69,7 +69,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: Class), _, _) =>
+ case PackageImpl(_, _, _, List(cls: Class), _, _, _) =>
cls.constructors match {
case (
ParamListImpl(NamedReference("str1", _, false, false) :: Nil, false) ::
@@ -101,7 +101,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: Class), _, _) =>
+ case PackageImpl(_, _, _, List(cls: Class), _, _, _) =>
cls.constructors match {
case (
ParamListImpl(NamedReference("main", _, false, false) :: Nil, false) :: Nil
@@ -139,7 +139,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cls: CaseClass, obj: Object), _, _) =>
+ case PackageImpl(_, _, _, List(cls: CaseClass, obj: Object), _, _, _) =>
cls.constructors match {
case (
ParamListImpl(NamedReference("main", _, false, false) :: Nil, false) :: Nil
@@ -172,7 +172,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
trt.traitParams match {
case ParamListImpl(NamedReference("main", _, false, false) :: Nil, false) :: Nil =>
case _ =>
@@ -199,7 +199,7 @@ class Constructors extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(cc: CaseClass, _, cls: Class, trt: Trait), _, _) =>
+ case PackageImpl(_, _, _, List(cc: CaseClass, _, cls: Class, trt: Trait), _, _, _) =>
import model.json._
lazy val incorrectJson = s"The json generated for:\n$actualSource\n\nIs not correct"
assert(cc.json.contains(s""""constructors":[[{"list":[{"title":"main""""), incorrectJson)
diff --git a/doc-tool/test/PackageStructure.scala b/doc-tool/test/PackageStructure.scala
index be80c57fc..b242d2f39 100644
--- a/doc-tool/test/PackageStructure.scala
+++ b/doc-tool/test/PackageStructure.scala
@@ -29,7 +29,7 @@ class PackageStructure extends DottyDocTest {
checkSources(source1 :: source2 :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(tA, tB), _, _) =>
+ case PackageImpl(_, _, _, List(tA, tB), _, _, _) =>
assert(
tA.name == "A" && tB.name == "B",
s"trait A had name '${tA.name}' and trait B had name '${tB.name}'"
@@ -65,8 +65,8 @@ class PackageStructure extends DottyDocTest {
_,
_,
"scala",
- List(PackageImpl(_, _, "scala.collection", List(tA, tB), _, _)),
- _, _
+ List(PackageImpl(_, _, "scala.collection", List(tA, tB), _, _, _)),
+ _, _, _
) =>
assert(
tA.name == "A" && tB.name == "B",
@@ -78,7 +78,7 @@ class PackageStructure extends DottyDocTest {
}
packages("scala.collection") match {
- case PackageImpl(_, _, "scala.collection", List(tA, tB), _, _) =>
+ case PackageImpl(_, _, "scala.collection", List(tA, tB), _, _, _) =>
assert(
tA.name == "A" && tB.name == "B",
s"trait A had name '${tA.name}' and trait B had name '${tB.name}'"
diff --git a/doc-tool/test/UsecaseTest.scala b/doc-tool/test/UsecaseTest.scala
index 2731517e7..bc896ed8d 100644
--- a/doc-tool/test/UsecaseTest.scala
+++ b/doc-tool/test/UsecaseTest.scala
@@ -29,7 +29,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
val List(foo: Def) = trt.members
assert(foo.comment.isDefined, "Lost comment in transformations")
@@ -73,7 +73,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
val List(foo: Def) = trt.members
val returnValue = foo.returnValue match {
@@ -118,7 +118,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
val List(foo: Def) = trt.members
val returnValue = foo.returnValue match {
@@ -166,7 +166,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
val List(map: Def) = trt.members
val returnValue = map.returnValue match {
@@ -209,7 +209,7 @@ class UsecaseTest extends DottyDocTest {
checkSources(source :: Nil) { packages =>
packages("scala") match {
- case PackageImpl(_, _, _, List(trt: Trait), _, _) =>
+ case PackageImpl(_, _, _, List(trt: Trait), _, _, _) =>
val List(map: Def) = trt.members
assert(map.comment.isDefined, "Lost comment in transformations")