aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2017-01-17 14:36:58 +0100
committerFelix Mulder <felix.mulder@gmail.com>2017-01-31 14:32:38 +0100
commite77fe63f98099caca481f74f3613c5814fff3020 (patch)
treeeaa0aa56a4187dd34e9caadd90d4e3c83cbd45d0
parent8f85e18db4ba2be95f39ff080e988e430222d310 (diff)
downloaddotty-e77fe63f98099caca481f74f3613c5814fff3020.tar.gz
dotty-e77fe63f98099caca481f74f3613c5814fff3020.tar.bz2
dotty-e77fe63f98099caca481f74f3613c5814fff3020.zip
Implement remainder of type members
-rw-r--r--doc-tool/resources/_layouts/api-page.html11
-rw-r--r--doc-tool/resources/css/api-page.css4
-rw-r--r--doc-tool/resources/css/dottydoc.css4
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala5
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/core/SortMembersPhase.scala25
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/entities.scala9
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/factories.scala9
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/java.scala42
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/staticsite/filters.scala4
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/util/MemberLookup.scala8
-rw-r--r--docs/css/default.css2
11 files changed, 91 insertions, 32 deletions
diff --git a/doc-tool/resources/_layouts/api-page.html b/doc-tool/resources/_layouts/api-page.html
index b1140f35e..1835a5403 100644
--- a/doc-tool/resources/_layouts/api-page.html
+++ b/doc-tool/resources/_layouts/api-page.html
@@ -27,9 +27,9 @@ extraCSS:
</div>
{% endif %}
- <h1 class="section">Members</h1>
+ <h1 class="section {% if entity.hasVisibleMembers == false %}empty{% endif %}">Members</h1>
- <div id="entity-members" class="entity-section">
+ <div id="entity-members" class="entity-section {% if entity.hasVisibleMembers == false %}empty{% endif %}">
{% for member in entity.members %}
<div class="member {% if member.isPrivate %}private{% elsif member.isProtected %}protected{% endif %}">
<div class="member-title">
@@ -65,6 +65,13 @@ extraCSS:
{% endfor %}
{% endif %}
+ {% if member.kind == "type" and member.alias != null %}
+ <span class="type-alias">
+ <span class="equals"> = </span>
+ {{ member.alias | renderRef }}
+ </span>
+ {% endif %}
+
{% if member.returnValue %}
<span class="no-left">: {{ member.returnValue.title }}</span>
{% endif %}
diff --git a/doc-tool/resources/css/api-page.css b/doc-tool/resources/css/api-page.css
index feda8f486..ab9f4fd5e 100644
--- a/doc-tool/resources/css/api-page.css
+++ b/doc-tool/resources/css/api-page.css
@@ -38,6 +38,10 @@ h1.section {
margin: 30px 0;
}
+.empty {
+ display: none;
+}
+
div#entity-members > div.member.protected {
display: none;
}
diff --git a/doc-tool/resources/css/dottydoc.css b/doc-tool/resources/css/dottydoc.css
index 5be744325..ab64882ea 100644
--- a/doc-tool/resources/css/dottydoc.css
+++ b/doc-tool/resources/css/dottydoc.css
@@ -70,11 +70,11 @@ ul.toc > li > a#home-button:hover {
}
ul.toc > li > a#home-button svg g#logo-foreground {
- fill: rgba(152, 101, 167, 1);
+ fill: rgba(202, 68, 94, 1);
}
ul.toc > li > a#home-button svg g#logo-background {
- fill: rgba(152, 101, 167, 0.45);
+ fill: rgba(202, 68, 94, 0.45);
}
ul.toc > li,
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala
index a3e71340c..f8ffdc0aa 100644
--- a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala
@@ -92,7 +92,10 @@ class DocASTPhase extends Phase {
/** type alias */
case t: TypeDef if !t.isClassDef =>
val sym = t.symbol
- TypeAliasImpl(sym, annotations(sym), flags(t), t.name.show.split("\\$\\$").last, path(sym), None)
+ if (sym.is(Flags.Synthetic | Flags.Param))
+ NonEntity
+ else
+ TypeAliasImpl(sym, annotations(sym), flags(t), t.name.show.split("\\$\\$").last, path(sym), alias(t.rhs.tpe))
/** trait */
case t @ TypeDef(n, rhs) if t.symbol.is(Flags.Trait) =>
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/SortMembersPhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/SortMembersPhase.scala
index c8de532bb..29898b140 100644
--- a/doc-tool/src/dotty/tools/dottydoc/core/SortMembersPhase.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/core/SortMembersPhase.scala
@@ -10,23 +10,38 @@ import model.internal._
/** This DocMiniPhase sorts the members of all classes, traits, objects and packages */
class SortMembers extends DocMiniPhase {
+ private def sort(xs: List[Entity]): List[Entity] = {
+ def sortOrNil(xs: Option[List[Entity]]*) =
+ xs.map(_.getOrElse(Nil)).reduceLeft(_ ++ _).sortBy(_.name)
+
+ val map = xs.groupBy(_.kind)
+
+ val pkgs = sortOrNil(map.get("package"))
+ val typs = sortOrNil(map.get("type"))
+ val vals = sortOrNil(map.get("val"), map.get("var"))
+ val nested = sortOrNil(map.get("object"), map.get("class"), map.get("case class"), map.get("trait"))
+ val defs = sortOrNil(map.get("def"))
+
+ pkgs ++ nested ++ typs ++ vals ++ defs
+ }
+
override def transformPackage(implicit ctx: Context) = { case p: PackageImpl =>
- p.copy(members = p.members.sortBy(_.name))
+ p.copy(members = sort(p.members))
}
override def transformClass(implicit ctx: Context) = { case c: ClassImpl =>
- c.copy(members = c.members.sortBy(_.name))
+ c.copy(members = sort(c.members))
}
override def transformCaseClass(implicit ctx: Context) = { case cc: CaseClassImpl =>
- cc.copy(members = cc.members.sortBy(_.name))
+ cc.copy(members = sort(cc.members))
}
override def transformTrait(implicit ctx: Context) = { case t: TraitImpl =>
- t.copy(members = t.members.sortBy(_.name))
+ t.copy(members = sort(t.members))
}
override def transformObject(implicit ctx: Context) = { case o: ObjectImpl =>
- o.copy(members = o.members.sortBy(_.name))
+ o.copy(members = sort(o.members))
}
}
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
index e9d388c3b..a04898740 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala
@@ -46,15 +46,20 @@ trait SuperTypes {
trait Members {
def members: List[Entity]
+
+ def hasVisibleMembers: Boolean = members.exists {
+ case e: Entity with Modifiers => !(e.isPrivate || e.isProtected)
+ case e => true
+ }
}
trait Modifiers {
def modifiers: List[String]
- val isPrivate: Boolean =
+ def isPrivate: Boolean =
modifiers.contains("private")
- val isProtected: Boolean =
+ def isProtected: Boolean =
modifiers.contains("protected")
}
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/factories.scala b/doc-tool/src/dotty/tools/dottydoc/model/factories.scala
index 8f1fad4a7..ad6bf7bae 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/factories.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/factories.scala
@@ -37,6 +37,15 @@ object factories {
private val product = """Product[1-9][0-9]*""".r
+ def alias(t: Type)(implicit ctx: Context): Option[Reference] = {
+ val defn = ctx.definitions
+ t match {
+ case TypeBounds(low, high) if (low eq defn.NothingType) && (high eq defn.AnyType) =>
+ None
+ case t => Some(returnType(t))
+ }
+ }
+
def returnType(t: Type)(implicit ctx: Context): Reference = {
val defn = ctx.definitions
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/java.scala b/doc-tool/src/dotty/tools/dottydoc/model/java.scala
index 331699957..8e493f889 100644
--- a/doc-tool/src/dotty/tools/dottydoc/model/java.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/model/java.scala
@@ -51,7 +51,8 @@ object java {
"name" -> ent.name,
"path" -> ent.path.asJava,
"members" -> ent.members.map(_.asJava()).asJava,
- "comment" -> ent.comment.map(_.asJava).asJava
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "hasVisibleMembers" -> ent.hasVisibleMembers
) ++ extras).asJava
}
@@ -67,7 +68,8 @@ object java {
"superTypes" -> ent.superTypes.map(_.asJava).asJava,
"comment" -> ent.comment.map(_.asJava).asJava,
"isPrivate" -> ent.isPrivate,
- "isProtected" -> ent.isProtected
+ "isProtected" -> ent.isProtected,
+ "hasVisibleMembers" -> ent.hasVisibleMembers
) ++ extras).asJava
}
@@ -83,7 +85,8 @@ object java {
"superTypes" -> ent.superTypes.map(_.asJava).asJava,
"comment" -> ent.comment.map(_.asJava).asJava,
"isPrivate" -> ent.isPrivate,
- "isProtected" -> ent.isProtected
+ "isProtected" -> ent.isProtected,
+ "hasVisibleMembers" -> ent.hasVisibleMembers
) ++ extras).asJava
}
@@ -99,7 +102,8 @@ object java {
"superTypes" -> ent.superTypes.map(_.asJava).asJava,
"comment" -> ent.comment.map(_.asJava).asJava,
"isPrivate" -> ent.isPrivate,
- "isProtected" -> ent.isProtected
+ "isProtected" -> ent.isProtected,
+ "hasVisibleMembers" -> ent.hasVisibleMembers
) ++ extras).asJava
}
@@ -114,7 +118,8 @@ object java {
"superTypes" -> ent.superTypes.map(_.asJava).asJava,
"comment" -> ent.comment.map(_.asJava).asJava,
"isPrivate" -> ent.isPrivate,
- "isProtected" -> ent.isProtected
+ "isProtected" -> ent.isProtected,
+ "hasVisibleMembers" -> ent.hasVisibleMembers
) ++ extras).asJava
}
@@ -137,19 +142,33 @@ object java {
implicit class JavaVal(val ent: Val) extends AnyVal {
def asJava: JMap[String, _] = Map(
- "kind" -> ent.kind,
+ "kind" -> ent.kind,
"annotations" -> ent.annotations.asJava,
- "name" -> ent.name,
- "modifiers" -> ent.modifiers.asJava,
- "path" -> ent.path.asJava,
- "returnValue" -> ent.returnValue.asJava,
- "comment" -> ent.comment.map(_.asJava).asJava,
+ "name" -> ent.name,
+ "modifiers" -> ent.modifiers.asJava,
+ "path" -> ent.path.asJava,
+ "returnValue" -> ent.returnValue.asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
"implicitlyAddedFrom" -> ent.implicitlyAddedFrom.map(_.asJava).asJava,
"isPrivate" -> ent.isPrivate,
"isProtected" -> ent.isProtected
).asJava
}
+ implicit class JavaTypeAlias(val ent: TypeAlias) extends AnyVal {
+ def asJava: JMap[String, _] = Map(
+ "kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
+ "modifiers" -> ent.modifiers.asJava,
+ "name" -> ent.name,
+ "path" -> ent.path.asJava,
+ "alias" -> ent.alias.map(_.asJava).asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "isPrivate" -> ent.isPrivate,
+ "isProtected" -> ent.isProtected
+ ).asJava
+ }
+
implicit class JavaParamList(val pl: ParamList) extends AnyVal {
def asJava: JMap[String, _] = Map(
"list" -> pl.list.map(_.asJava).asJava,
@@ -255,6 +274,7 @@ object java {
case ent: Object => ent.asJava(extras)
case ent: Def => ent.asJava
case ent: Val => ent.asJava
+ case ent: TypeAlias => ent.asJava
case _ => Map.empty.asJava
}
diff --git a/doc-tool/src/dotty/tools/dottydoc/staticsite/filters.scala b/doc-tool/src/dotty/tools/dottydoc/staticsite/filters.scala
index bb6f314dc..a4662e735 100644
--- a/doc-tool/src/dotty/tools/dottydoc/staticsite/filters.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/staticsite/filters.scala
@@ -88,7 +88,9 @@ object filters {
override def apply(value: Any, params: AnyRef*): AnyRef = value match {
case value: JMap[String, _] @unchecked =>
- renderReference(value.get("scala").asInstanceOf[Reference])
+ val ref = value.get("scala").asInstanceOf[Reference]
+ if (ref ne null) renderReference(ref)
+ else null
case _ =>
/*dottydoc.*/println(s"couldn't render: '$value'")
null
diff --git a/doc-tool/src/dotty/tools/dottydoc/util/MemberLookup.scala b/doc-tool/src/dotty/tools/dottydoc/util/MemberLookup.scala
index ad73ad008..caa57db52 100644
--- a/doc-tool/src/dotty/tools/dottydoc/util/MemberLookup.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/util/MemberLookup.scala
@@ -30,13 +30,7 @@ trait MemberLookup {
.collect { case x if x.name == searchStr => x }
.sortBy(_.path.last)
.headOption
- .fold(notFound) {
- case e: TypeAlias =>
- // TODO: will explode once type aliases are fixed
- if (e.alias.isDefined) ???
- else notFound
- case e => LinkToEntity(e)
- }
+ .fold(notFound)(e => LinkToEntity(e))
/** Looks for an entity down in the structure, if the search list is Nil,
* the search stops
diff --git a/docs/css/default.css b/docs/css/default.css
index 6cd58a8b7..d01e81472 100644
--- a/docs/css/default.css
+++ b/docs/css/default.css
@@ -229,7 +229,7 @@ div.centered-table+p {
}
.red {
- background: #de332e;
+ background: rgb(202, 68, 94);
color: #fff;
}