aboutsummaryrefslogtreecommitdiff
path: root/doc-tool
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2017-01-13 11:39:48 +0100
committerFelix Mulder <felix.mulder@gmail.com>2017-01-31 14:31:08 +0100
commit2c08c956d39d9a06b3c5aa7eddc3b8c903f807df (patch)
treee0440216f9c70a023491f0e1ef00a0154b5806ee /doc-tool
parent64a13956d5611117c7ec4913a79363694f1e70c3 (diff)
downloaddotty-2c08c956d39d9a06b3c5aa7eddc3b8c903f807df.tar.gz
dotty-2c08c956d39d9a06b3c5aa7eddc3b8c903f807df.tar.bz2
dotty-2c08c956d39d9a06b3c5aa7eddc3b8c903f807df.zip
Add annotations to doc AST
Diffstat (limited to 'doc-tool')
-rw-r--r--doc-tool/resources/_layouts/api-page.html3
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala14
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala7
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala1
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/entities.scala13
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/factories.scala2
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/internal.scala7
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/java.scala7
-rw-r--r--doc-tool/test/ConstructorTest.scala14
-rw-r--r--doc-tool/test/PackageStructure.scala7
-rw-r--r--doc-tool/test/UsecaseTest.scala10
11 files changed, 59 insertions, 26 deletions
diff --git a/doc-tool/resources/_layouts/api-page.html b/doc-tool/resources/_layouts/api-page.html
index 41daf6c47..1f5a441de 100644
--- a/doc-tool/resources/_layouts/api-page.html
+++ b/doc-tool/resources/_layouts/api-page.html
@@ -29,6 +29,9 @@ extraCSS:
{% for member in entity.members %}
<div class="member">
<div class="member-title">
+ <span class="member-annotations">
+ {% for annot in member.annotations %}@{{ annot | split: '.' | last }} {% endfor %}
+ </span>
<span class="member-modifiers">
{{ member.modifiers | join: " " }}
</span>
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala
index bb1ed5182..0ad199ca2 100644
--- a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala
@@ -51,6 +51,7 @@ class DocASTPhase extends Phase {
.map { meth =>
DefImpl(
meth.symbol,
+ annotations(meth.symbol),
meth.symbol.name.show,
Nil,
path(meth.symbol),
@@ -64,6 +65,7 @@ class DocASTPhase extends Phase {
val vals = sym.info.fields.filterNot(_.symbol.is(Flags.Private | Flags.Synthetic)).map { value =>
ValImpl(
value.symbol,
+ annotations(value.symbol),
value.symbol.name.show,
Nil, path(value.symbol),
returnType(value.info),
@@ -81,34 +83,34 @@ class DocASTPhase extends Phase {
/** package */
case pd @ PackageDef(pid, st) =>
val pkgPath = path(pd.symbol)
- addEntity(PackageImpl(pd.symbol, pd.symbol.showFullName, collectEntityMembers(st, pkgPath), pkgPath))
+ addEntity(PackageImpl(pd.symbol, annotations(pd.symbol), pd.symbol.showFullName, collectEntityMembers(st, pkgPath), pkgPath))
/** trait */
case t @ TypeDef(n, rhs) if t.symbol.is(Flags.Trait) =>
//TODO: should not `collectMember` from `rhs` - instead: get from symbol, will get inherited members as well
- TraitImpl(t.symbol, n.show, collectMembers(rhs), flags(t), path(t.symbol), typeParams(t.symbol), traitParameters(t.symbol), superTypes(t))
+ TraitImpl(t.symbol, annotations(t.symbol), n.show, collectMembers(rhs), flags(t), path(t.symbol), typeParams(t.symbol), traitParameters(t.symbol), superTypes(t))
/** objects, on the format "Object$" so drop the last letter */
case o @ TypeDef(n, rhs) if o.symbol.is(Flags.Module) =>
val name = o.name.show
//TODO: should not `collectMember` from `rhs` - instead: get from symbol, will get inherited members as well
- ObjectImpl(o.symbol, name.dropRight(1), collectMembers(rhs, prev :+ name), flags(o), path(o.symbol).init :+ name, superTypes(o))
+ ObjectImpl(o.symbol, annotations(o.symbol), name.dropRight(1), collectMembers(rhs, prev :+ name), flags(o), path(o.symbol).init :+ name, superTypes(o))
/** class / case class */
case c @ TypeDef(n, rhs) if c.symbol.isClass =>
//TODO: should not `collectMember` from `rhs` - instead: get from symbol, will get inherited members as well
- (c.symbol, n.show, collectMembers(rhs), flags(c), path(c.symbol), typeParams(c.symbol), constructors(c.symbol), superTypes(c), None) match {
+ (c.symbol, annotations(c.symbol), n.show, collectMembers(rhs), flags(c), path(c.symbol), typeParams(c.symbol), constructors(c.symbol), superTypes(c), None) match {
case x if c.symbol.is(Flags.CaseClass) => CaseClassImpl.tupled(x)
case x => ClassImpl.tupled(x)
}
/** def */
case d: DefDef =>
- DefImpl(d.symbol, d.name.decode.toString, flags(d), path(d.symbol), returnType(d.tpt.tpe), typeParams(d.symbol), paramLists(d.symbol.info))
+ DefImpl(d.symbol, annotations(d.symbol), d.name.decode.toString, flags(d), path(d.symbol), returnType(d.tpt.tpe), typeParams(d.symbol), paramLists(d.symbol.info))
/** val */
case v: ValDef if !v.symbol.is(Flags.ModuleVal) =>
- ValImpl(v.symbol, v.name.decode.toString, flags(v), path(v.symbol), returnType(v.tpt.tpe))
+ ValImpl(v.symbol, annotations(v.symbol), v.name.decode.toString, flags(v), path(v.symbol), returnType(v.tpt.tpe))
case x => {
//dottydoc.println(s"Found unwanted entity: $x (${x.pos},\n${x.show}")
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala b/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala
index 150a4e08f..100e0af6b 100644
--- a/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala
@@ -80,6 +80,7 @@ object transform {
case p: Package => transformEntity(p, _.packageTransformation) { p =>
val newPackage = PackageImpl(
p.symbol,
+ p.annotations,
p.name,
p.members.map(traverse),
p.path,
@@ -94,6 +95,7 @@ object transform {
case c: Class => transformEntity(c, _.classTransformation) { cls =>
ClassImpl(
cls.symbol,
+ cls.annotations,
cls.name,
cls.members.map(traverse),
cls.modifiers,
@@ -107,6 +109,7 @@ object transform {
case cc: CaseClass => transformEntity(cc, _.caseClassTransformation) { cc =>
CaseClassImpl(
cc.symbol,
+ cc.annotations,
cc.name,
cc.members.map(traverse),
cc.modifiers,
@@ -120,6 +123,7 @@ object transform {
case trt: Trait => transformEntity(trt, _.traitTransformation) { trt =>
TraitImpl(
trt.symbol,
+ trt.annotations,
trt.name,
trt.members.map(traverse),
trt.modifiers,
@@ -133,6 +137,7 @@ object transform {
case obj: Object => transformEntity(obj, _.objectTransformation) { obj =>
ObjectImpl(
obj.symbol,
+ obj.annotations,
obj.name,
obj.members.map(traverse),
obj.modifiers,
@@ -144,6 +149,7 @@ object transform {
case df: Def => transformEntity(df, _.defTransformation) { df =>
DefImpl(
df.symbol,
+ df.annotations,
df.name,
df.modifiers,
df.path,
@@ -157,6 +163,7 @@ object transform {
case vl: Val => transformEntity(vl, _.valTransformation) { vl =>
ValImpl(
vl.symbol,
+ vl.annotations,
vl.name,
vl.modifiers,
vl.path,
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala
index 47376eb26..5940df0bc 100644
--- a/doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala
@@ -16,6 +16,7 @@ class UsecasePhase extends DocMiniPhase {
val name = d.name.show.split("\\$").head // UseCase defs get $pos appended to their names
DefImpl(
sym,
+ annotations(sym),
name,
flags(d),
path(d.symbol).init :+ name,
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
index 52379f9ad..aea09f745 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
@@ -19,6 +19,8 @@ trait Entity {
def parent: Entity
+ def annotations: List[String]
+
/** All parents from package level i.e. Package to Object to Member etc */
def parents: List[Entity] = parent match {
case NonEntity => Nil
@@ -105,12 +107,13 @@ trait Var extends Entity with Modifiers with ReturnValue {
}
trait NonEntity extends Entity {
- val name = ""
- val symbol = NoSymbol
+ val annotations = Nil
+ val name = ""
+ val symbol = NoSymbol
val comment = None
- val path = Nil
- val kind = ""
- val parent = NonEntity
+ val path = Nil
+ val kind = ""
+ val parent = NonEntity
}
final case object NonEntity extends NonEntity
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/factories.scala b/doc-tool/src/dotty/tools/dottydoc/model/factories.scala
index 2976c2f48..e47c683f3 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/factories.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/factories.scala
@@ -32,6 +32,8 @@ object factories {
case sym => path(sym.owner) :+ sym.name.show
}
+ def annotations(sym: Symbol)(implicit ctx: Context): List[String] =
+ sym.annotations.map(_.symbol.showFullName)
private val product = """Product[1-9][0-9]*""".r
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala
index 09f642d0b..9787da7ce 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala
@@ -13,6 +13,7 @@ object internal {
final case class PackageImpl(
symbol: Symbol,
+ annotations: List[String],
name: String,
var members: List[Entity],
path: List[String],
@@ -24,6 +25,7 @@ object internal {
final case class ClassImpl(
symbol: Symbol,
+ annotations: List[String],
name: String,
members: List[Entity],
modifiers: List[String],
@@ -36,6 +38,7 @@ object internal {
final case class CaseClassImpl(
symbol: Symbol,
+ annotations: List[String],
name: String,
members: List[Entity],
modifiers: List[String],
@@ -48,6 +51,7 @@ object internal {
final case class TraitImpl(
symbol: Symbol,
+ annotations: List[String],
name: String,
members: List[Entity],
modifiers: List[String],
@@ -60,6 +64,7 @@ object internal {
final case class ObjectImpl(
symbol: Symbol,
+ annotations: List[String],
name: String,
members: List[Entity],
modifiers: List[String],
@@ -70,6 +75,7 @@ object internal {
final case class DefImpl(
symbol: Symbol,
+ annotations: List[String],
name: String,
modifiers: List[String],
path: List[String],
@@ -82,6 +88,7 @@ object internal {
final case class ValImpl(
symbol: Symbol,
+ annotations: List[String],
name: String,
modifiers: List[String],
path: List[String],
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/java.scala b/doc-tool/src/dotty/tools/dottydoc/model/java.scala
index 01dac2685..6ec35875f 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/java.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/java.scala
@@ -47,6 +47,7 @@ object java {
implicit class JavaPackage(val ent: Package) extends AnyVal {
def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
"kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
"name" -> ent.name,
"path" -> ent.path.asJava,
"members" -> ent.members.map(_.asJava()).asJava,
@@ -57,6 +58,7 @@ object java {
implicit class JavaCaseClass(val ent: CaseClass) extends AnyVal {
def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
"kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
"name" -> ent.name,
"members" -> ent.members.map(_.asJava()).asJava,
"modifiers" -> ent.modifiers.asJava,
@@ -70,6 +72,7 @@ object java {
implicit class JavaClass(val ent: Class) extends AnyVal {
def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
"kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
"name" -> ent.name,
"members" -> ent.members.map(_.asJava()).asJava,
"modifiers" -> ent.modifiers.asJava,
@@ -83,6 +86,7 @@ object java {
implicit class JavaTrait(val ent: Trait) extends AnyVal {
def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
"kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
"name" -> ent.name,
"members" -> ent.members.map(_.asJava()).asJava,
"modifiers" -> ent.modifiers.asJava,
@@ -96,6 +100,7 @@ object java {
implicit class JavaObject(val ent: Object) extends AnyVal {
def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
"kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
"name" -> ent.name,
"members" -> ent.members.map(_.asJava()).asJava,
"modifiers" -> ent.modifiers.asJava,
@@ -108,6 +113,7 @@ object java {
implicit class JavaDef(val ent: Def) extends AnyVal {
def asJava: JMap[String, _] = Map(
"kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
"name" -> ent.name,
"modifiers" -> ent.modifiers.asJava,
"path" -> ent.path.asJava,
@@ -122,6 +128,7 @@ object java {
implicit class JavaVal(val ent: Val) extends AnyVal {
def asJava: JMap[String, _] = Map(
"kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
"name" -> ent.name,
"modifiers" -> ent.modifiers.asJava,
"path" -> ent.path.asJava,
diff --git a/doc-tool/test/ConstructorTest.scala b/doc-tool/test/ConstructorTest.scala
index 99192985a..76abce100 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 54ff1b9e7..be80c57fc 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}'"
@@ -63,8 +63,9 @@ class PackageStructure extends DottyDocTest {
packages("scala") match {
case PackageImpl(
_,
+ _,
"scala",
- List(PackageImpl(_, "scala.collection", List(tA, tB), _, _)),
+ List(PackageImpl(_, _, "scala.collection", List(tA, tB), _, _)),
_, _
) =>
assert(
@@ -77,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 2a5ae4602..2731517e7 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")