diff --git a/doc-tool/resources/_layouts/api-page.html b/doc-tool/resources/_layouts/api-page.html index f45a8bab48a4..26a4290da960 100644 --- a/doc-tool/resources/_layouts/api-page.html +++ b/doc-tool/resources/_layouts/api-page.html @@ -10,6 +10,9 @@
+ + {% for annot in entity.annotations %}@{{ annot | split: '.' | last }} {% endfor %} + {{ entity.modifiers | join: " " }} @@ -19,6 +22,33 @@ {{ entity.name }} + {% if entity.typeParams.size > 0 %} + + [ + {% for param in entity.typeParams %} + + {% if forloop.last %} + {{ param }} + {% else %} + {{ param }}, + {% endif %} + + {% endfor %} + ] + + {% endif %} + {% if entity.superTypes.size > 0 %} +
+ {% for super in entity.superTypes %} + {% if forloop.first %} + extends + {% else %} + with + {% endif %} + {% renderLink super %} + {% endfor %} +
+ {% endif %}
{% if entity.comment.body %} @@ -27,12 +57,45 @@
{% endif %} -

Members

+

+ Constructors +

+ +
+ {% for constructor in entity.constructors %} + {% for plist in constructor %} +
+
+ {{ entity.name }} + ( + {% if plist.isImplicit %} + implicit + {% endif %} + {% for namedRef in plist.list %} + + {{ namedRef.title }}:{% if namedRef.isByName %} =>{% endif %} + + {% renderRef namedRef.ref %} + {% if forloop.last != true %} + , + {% endif %} + {% endfor %} + ) +
+
+ {% endfor %} + {% endfor %} +
+ +

+ Members +

{% for member in entity.members %}
+ [+] {% for annot in member.annotations %}@{{ annot | split: '.' | last }} {% endfor %} @@ -79,13 +142,29 @@

M {% endif %} {% if member.returnValue %} - : {{ member.returnValue.title }} + : {% renderRef member.returnValue %} {% endif %}

- {{ member.comment.short }} +
+ {{ member.comment.short }} +
+
+ {{ member.comment.body }} +
+
{% endfor %}
diff --git a/doc-tool/resources/css/api-page.css b/doc-tool/resources/css/api-page.css index ab9f4fd5e36b..380efb834c22 100644 --- a/doc-tool/resources/css/api-page.css +++ b/doc-tool/resources/css/api-page.css @@ -14,11 +14,39 @@ div#entity-title { font-size: 2.5rem; } +div#entity-title > span#entity-annotations, div#entity-title > span#entity-modifiers, div#entity-title > span#entity-kind { font-weight: 100; } +div#entity-title > div#super-types > span.keyword { + font-weight: 100; +} + +div#entity-title > div#super-types > span.keyword, +div#entity-title > div#super-types > span.entity-super-type { + font-size: 25px; +} + +div#entity-title > div#super-types> span.entity-super-type > a, +div#entity-title > div#super-types> span.entity-super-type > a:focus { + text-decoration: none; + color: #34495e; +} + +div#entity-title > div#super-types> span.entity-super-type > a:hover { + text-decoration: underline; +} + +div#entity-title span.no-left { + margin-left: -9px; +} + +div#entity-title span.no-right { + margin-right: -9px; +} + div#entity-body table > tbody > tr > td { padding: 10px; } @@ -42,44 +70,70 @@ h1.section { display: none; } -div#entity-members > div.member.protected { +div.entity-section > div.member.protected { display: none; } -div#entity-members > div.member.private { +div.entity-section > div.member.private { display: none; } -div#entity-members > div.member { +div.entity-section > div.member { margin-bottom: 30px; } -div#entity-members > div.member:last-child { +div.entity-section > div.member:last-child { margin-bottom: 0px; } -div#entity-members > div.member > div.member-title { +div.entity-section > div.member > div.member-title { font-family: "Source Code Pro", sans-serif; } -div#entity-members > div.member > div.member-title > span.member-name { +div.entity-section > div.member > div.member-title > span.member-name { color: #458; font-weight: 600; } -div#entity-members > div.member > div.member-title > span.member-name.implicitly-added { +div.entity-section > div.member > div.member-title > span.member-name.implicitly-added { color: #019875; } -div#entity-members > div.member > div.member-title span.keyword { +div.entity-section > div.member > div.member-title span.keyword { font-weight: 600; margin-right: 11px; } -div#entity-members > div.member > div.member-title span.no-left { +div.entity-section > div.member > div.member-title span.no-left { margin-left: -11px; } -div#entity-members > div.member > div.member-title span.no-right { +div.entity-section > div.member > div.member-title span.no-right { margin-right: -11px; } + +div.entity-section > div.member > div.member-title > span.expand-button { + color: rgba(167, 161, 161, 0.5); +} + +div.entity-section > div.member > div.member-title > span.expand-button:hover { + color: rgb(167, 161, 161); + cursor: pointer; + user-select: none; +} + +div.entity-section > div.member > div.member-body { + margin: 5px 0 0 39px; +} + +div.entity-section > div.member > div.member-body > div.member-body-short.toggled { + display: none; +} + +div.entity-section > div.member > div.member-body > div.member-body-long { + display: none; +} + +div.entity-section > div.member > div.member-body > div.member-body-long.toggled { + display: block; +} diff --git a/doc-tool/src/dotty/tools/dottydoc/core/DocstringPhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/DocstringPhase.scala index 55f2a05babcd..3de8f68f78cd 100644 --- a/doc-tool/src/dotty/tools/dottydoc/core/DocstringPhase.scala +++ b/doc-tool/src/dotty/tools/dottydoc/core/DocstringPhase.scala @@ -63,4 +63,8 @@ class DocstringPhase extends DocMiniPhase with CommentParser with CommentCleaner override def transformVal(implicit ctx: Context) = { case ent: ValImpl => ent.copy(comment = parsedComment(ent)) } + + override def transformTypeAlias(implicit ctx: Context) = { case ent: TypeAliasImpl => + ent.copy(comment = parsedComment(ent)) + } } diff --git a/doc-tool/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala b/doc-tool/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala index 825cdf9ad4e1..5e0099f4bf74 100644 --- a/doc-tool/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala +++ b/doc-tool/src/dotty/tools/dottydoc/core/TypeLinkingPhases.scala @@ -26,6 +26,14 @@ class LinkReturnTypes extends DocMiniPhase with TypeLinker { val returnValue = linkReference(vl, vl.returnValue, ctx.docbase.packages) vl.copy(returnValue = returnValue) } + + override def transformTypeAlias(implicit ctx: Context) = { case ta: TypeAliasImpl => + ta.alias.map { alias => + val linkedAlias = linkReference(ta, alias, ctx.docbase.packages) + ta.copy(alias = Some(linkedAlias)) + } + .getOrElse(ta) + } } class LinkParamListTypes extends DocMiniPhase with TypeLinker { diff --git a/doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala b/doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala index 9c423c3eadf0..e7cf54a03fde 100644 --- a/doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala +++ b/doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala @@ -70,6 +70,7 @@ object JavaConverters { "typeParams" -> ent.typeParams.asJava, "superTypes" -> ent.superTypes.map(_.asJava).asJava, "comment" -> ent.comment.map(_.asJava).asJava, + "constructors" -> ent.constructors.map(_.map(_.asJava).asJava).asJava, "isPrivate" -> ent.isPrivate, "isProtected" -> ent.isProtected, "hasVisibleMembers" -> ent.hasVisibleMembers, @@ -90,6 +91,7 @@ object JavaConverters { "typeParams" -> ent.typeParams.asJava, "superTypes" -> ent.superTypes.map(_.asJava).asJava, "comment" -> ent.comment.map(_.asJava).asJava, + "constructors" -> ent.constructors.map(_.map(_.asJava).asJava).asJava, "isPrivate" -> ent.isPrivate, "isProtected" -> ent.isProtected, "hasVisibleMembers" -> ent.hasVisibleMembers, diff --git a/doc-tool/src/dotty/tools/dottydoc/staticsite/MarkdownLinkVisitor.scala b/doc-tool/src/dotty/tools/dottydoc/staticsite/MarkdownLinkVisitor.scala index e33488e02454..5216ee950675 100644 --- a/doc-tool/src/dotty/tools/dottydoc/staticsite/MarkdownLinkVisitor.scala +++ b/doc-tool/src/dotty/tools/dottydoc/staticsite/MarkdownLinkVisitor.scala @@ -14,7 +14,10 @@ object MarkdownLinkVisitor { new VisitHandler(classOf[Link], new Visitor[Link] with MemberLookup { override def visit(node: Link): Unit = { val url = node.getUrl - if (EntityLink.unapplySeq(url.toString).isDefined) { + if (url.endsWith(".md")) node.setUrl { + url.subSequence(0, url.lastIndexOf('.')).append(".html") + } + else if (EntityLink.unapplySeq(url.toString).isDefined) { lookup(NonEntity, docs, url.toString).foreach { ent => val (path, suffix) = ent match { case ent: Val => (ent.path.dropRight(1), ".html#" + ent.signature) @@ -32,9 +35,6 @@ object MarkdownLinkVisitor { } } } - else if (url.endsWith(".md")) node.setUrl { - url.subSequence(0, url.lastIndexOf('.')).append(".html") - } } }) )) diff --git a/doc-tool/src/dotty/tools/dottydoc/staticsite/Template.scala b/doc-tool/src/dotty/tools/dottydoc/staticsite/Template.scala index 9720084f32d2..498b21f57c0c 100644 --- a/doc-tool/src/dotty/tools/dottydoc/staticsite/Template.scala +++ b/doc-tool/src/dotty/tools/dottydoc/staticsite/Template.scala @@ -87,6 +87,7 @@ case class LiquidTemplate(path: String, content: SourceFile) extends Template wi Template.parse(show, JEKYLL) .`with`(ResourceInclude(params, includes)) .`with`(RenderReference(params)) + .`with`(RenderLink(params)) .`with`(RenderTitle(params)) .`with`(Docstring(params)) .render(toJavaMap(params))