diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2016-08-09 18:42:54 +0200 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2016-08-19 15:37:33 +0200 |
commit | 5cd1d51c3cb44b2c9b2c1abd433da50a00e5219e (patch) | |
tree | 2f87a0e18b2c44cce28a2b424f2b3b1e97ac1732 /dottydoc/js/src | |
parent | 079e3db0f157ee6eae9e8a34b3bbf7a75cdaa929 (diff) | |
download | dotty-5cd1d51c3cb44b2c9b2c1abd433da50a00e5219e.tar.gz dotty-5cd1d51c3cb44b2c9b2c1abd433da50a00e5219e.tar.bz2 dotty-5cd1d51c3cb44b2c9b2c1abd433da50a00e5219e.zip |
Remove client from dottydoc - no more Scala.JS deps!
Diffstat (limited to 'dottydoc/js/src')
-rw-r--r-- | dottydoc/js/src/DottyDoc.scala | 28 | ||||
-rw-r--r-- | dottydoc/js/src/EntityIndex.scala | 25 | ||||
-rw-r--r-- | dottydoc/js/src/Search.scala | 121 | ||||
-rw-r--r-- | dottydoc/js/src/html/CustomTags.scala | 13 | ||||
-rw-r--r-- | dottydoc/js/src/html/EntityLayout.scala | 212 | ||||
-rw-r--r-- | dottydoc/js/src/html/Member.scala | 313 | ||||
-rw-r--r-- | dottydoc/js/src/model/entities.scala | 180 | ||||
-rw-r--r-- | dottydoc/js/src/model/references.scala | 84 |
8 files changed, 0 insertions, 976 deletions
diff --git a/dottydoc/js/src/DottyDoc.scala b/dottydoc/js/src/DottyDoc.scala deleted file mode 100644 index d33648e49..000000000 --- a/dottydoc/js/src/DottyDoc.scala +++ /dev/null @@ -1,28 +0,0 @@ -package dotty.tools.dottydoc -package js - -import scala.scalajs.{ js => sjs } -import sjs.Dynamic.global -import sjs.JSApp -import sjs.annotation.{ JSExport, JSName } -import org.scalajs.dom -import dom.document -import dom.webworkers.Worker -import model._ -import html.EntityLayout - -@JSExport object DottyDocJS { - @JSExport def main(target: dom.html.Div) = { - document.title = "Dotty " + EntityIndex.currentEntity.path.mkString(".") - target.appendChild(EntityLayout(EntityIndex.currentEntity).html.render) - hljs.initHighlightingOnLoad() - - val searchInput = document.getElementById("search").asInstanceOf[dom.html.Input] - searchInput.onkeyup = new Search(searchInput).search() - } -} - -/** Library wrapper for highlighting */ -@sjs.native object hljs extends sjs.Object { - def initHighlightingOnLoad(): sjs.Any = sjs.native -} diff --git a/dottydoc/js/src/EntityIndex.scala b/dottydoc/js/src/EntityIndex.scala deleted file mode 100644 index 358298ca0..000000000 --- a/dottydoc/js/src/EntityIndex.scala +++ /dev/null @@ -1,25 +0,0 @@ -package dotty.tools -package dottydoc -package js - -import scala.scalajs.{ js => sjs } -import sjs.JSConverters._ -import sjs.Dynamic.global -import sjs.JSApp -import sjs.annotation.JSName - -/** The unpickled AST available as scala classes */ -object EntityIndex { - import js.model._ - - lazy val packages: Map[String, Package] = - Unparsed.packages.toMap[String, Package] - - val currentEntity: Entity = Unparsed.currentEntity - - /** Unparsed index stores the pickled AST generated by the dottydoc tool */ - @sjs.native @JSName("UnparsedIndex") private object Unparsed extends sjs.Object { - def packages: sjs.Dictionary[Package] = sjs.native - def currentEntity: Entity = sjs.native - } -} diff --git a/dottydoc/js/src/Search.scala b/dottydoc/js/src/Search.scala deleted file mode 100644 index 6625e3c78..000000000 --- a/dottydoc/js/src/Search.scala +++ /dev/null @@ -1,121 +0,0 @@ -package dotty.tools.dottydoc -package js - -import scala.scalajs.{ js => sjs } -import sjs.timers.setTimeout -import scalatags.JsDom.all._ -import org.scalajs.dom.html.{ Input, Div } -import org.scalajs.dom.{ document, Event } -import scala.concurrent.ExecutionContext.Implicits.global -import scala.concurrent.Future - -import js.model._ -import js.model.ops._ - -class Search(val input: Input) { - private var isSearching = false - - private val mainDiv = document - .getElementById("entity-container") - .asInstanceOf[Div] - private val resultsDiv = document - .getElementById("search-results") - .asInstanceOf[Div] - - /** Search result ADTs */ - private case class PackageResults(matching: Stream[Package], nonMatching: Stream[Package]) - private object PackageResults { - def empty = PackageResults(Stream.empty, Stream.empty) - } - - /** Entry point into search, will consider whether to start searching or not, - * then call `performSearch` - */ - def search(): Event => Unit = { e => - val query = input.value.trim - if (query.length > 2) setTimeout(200) { - if (!isSearching) { - isSearching = true - performSearch(query.toLowerCase).map { _ => isSearching = false } - } - } - else if (query.length == 0) - hideSearchDiv() - } - - private def performSearch(query: String): Future[Unit] = - for (PackageResults(matching, nonMatching) <- searchPackages(query)) yield { - // Clear old results, add new result categories add close button - resultsDiv.innerHTML = "" - val toplevelRes = div(id := "toplevel-results").render - val methodRes = div(id := "method-results").render - val closeButton = button( - id := "close-button", - onclick := { _: Event => - resetInput() - hideSearchDiv() - }, - cls := "mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored", - i(cls := "material-icons", "clear") - ).render - - resultsDiv.appendChild(toplevelRes) - resultsDiv.appendChild(methodRes) - resultsDiv.appendChild(closeButton) - - // Add all matching toplevel entities - matching - .toStream - .sortBy(_.name) - .map(createPackageCard) - .foreach(toplevelRes.appendChild) - - // Hide entity and show results instead - showSearchDiv() - } - - private def searchPackages(query: String): Future[PackageResults] = Future { - EntityIndex.packages.values.foldLeft(PackageResults.empty) { (acc, p) => - val matchingMembers = p.members.collect { - case x if (x.name.toLowerCase.contains(query) && x.kind != "package") => x - } - - println("We found all matching members maybe") - sjs.Dynamic.global.console.log(p) - - if (p.name.toLowerCase.contains(query) || matchingMembers.nonEmpty) - acc.copy(matching = p.withMembers(matchingMembers) #:: acc.matching) - else acc - } - } - - private def createPackageCard(pack: Package): Div = div( - cls := "mdl-card mdl-shadow--2dp package-result", - div(cls := "mdl-card__title", h2(cls := "mdl-card__title-text", pack.name)), - ul(pack.members.map(createEntityLi).toList) - ).render - - private def createEntityLi(e: Entity) = li( - a( - href := toRoot + e.path.mkString("", "/", ".html"), - e.kind + " " + e.name - ) - ) - - private def toRoot = "../" * (EntityIndex.currentEntity.path.length - 1) - - private def resetInput() = { - input.value = "" - input.parentElement.className = input.parentElement.className.replaceAll("is-dirty", "") - } - - private def showSearchDiv() = { - mainDiv.style.display = "none" - resultsDiv.style.display = "block" - } - - private def hideSearchDiv() = { - resultsDiv.style.display = "none" - mainDiv.style.display = "block" - } -} diff --git a/dottydoc/js/src/html/CustomTags.scala b/dottydoc/js/src/html/CustomTags.scala deleted file mode 100644 index af3667f11..000000000 --- a/dottydoc/js/src/html/CustomTags.scala +++ /dev/null @@ -1,13 +0,0 @@ -package dotty.tools.dottydoc -package js -package html - -import scalatags.JsDom.all._ -import scalatags.generic -import scalatags.generic.Util -import org.scalajs.dom - -object CustomTags { - lazy val nav = "nav".tag - lazy val main = "main".tag -} diff --git a/dottydoc/js/src/html/EntityLayout.scala b/dottydoc/js/src/html/EntityLayout.scala deleted file mode 100644 index f81f42e02..000000000 --- a/dottydoc/js/src/html/EntityLayout.scala +++ /dev/null @@ -1,212 +0,0 @@ -package dotty.tools.dottydoc -package js -package html - -import scalatags.JsDom.all._ -import org.scalajs.dom -import org.scalajs.dom.html.{Anchor, Div} -import js.model._ -import js.model.ops._ - -case class EntityLayout(entity: Entity) extends MemberLayout { - import CustomTags._ - import EntityIndex.packages - - private def relativePath(to: Entity) = { - val offset = entity.kind match { - case "val" | "def" => 2 - case _ => 1 - } - - val prefix = entity.kind match { - case "package" => "../" - case _ => "" - } - - prefix + { - "../" * (entity.path.length - offset) + to.path.mkString("","/",".html") - } - } - - def html = - div( - cls := "mdl-layout mdl-js-layout mdl-layout--fixed-drawer", - div( - cls := "mdl-layout__drawer", - span( - cls := "mdl-layout-title subtitle", - entity.path.dropRight(1).mkString(".") - ), - span( - cls := "mdl-layout-title", - if (entity.kind == "package") entity.name.split("\\.").last - else entity.name - ), - nav( - cls := "related mdl-navigation", - companionAnchor, - a(cls := "mdl-navigation__link", href := "#", "Source") - ), - span( - cls := "mdl-layout-title", - id := "docs-title", - "Docs" - ), - searchView, - packageView - ), - main( - id := "entity-container", - cls := "mdl-layout__content", - div( - cls := "page-content", - div(cls := "entity-title", entityTitle), - div(raw(entity.comment.fold("")(_.body))), - entity.comment.filter(_.authors.nonEmpty).map { comment => - dl( - dt(cls := "entity-authors", "Authors"), - comment.authors.map(x => dd(cls := "entity-author", raw(x))).toList - ) - }.toOption, - entity match { - case x if x.hasMembers => - val e = x.asInstanceOf[Entity with Members] - if (e.members.nonEmpty) - Seq( - h5("Members"), - div( - cls := "mdl-grid", - e.members - .collect { - case x if x.hasModifiers && !x.isPrivate => x - } - .flatMap(member(_, entity)).toList - ) - ) - case _ => () - } - ) - ), - main( - id := "search-results", - cls := "mdl-layout__content" - ) - ) - - def packageView = ul( - cls := "mdl-list packages", - { - val keys: Seq[String] = packages.keys.toSeq.sorted - val productReg = """^Product[0-9]+$""".r - keys.flatMap { k => - val pack = packages(k) - val children = - pack.children - .sortBy(_.name) - .filterNot { ent => - // Filter out ProductX where X > 3 - productReg.findFirstIn(ent.name).map(_.slice(7, 99).toInt > 3).getOrElse(false) || - // Filter out packages - ent.kind == "package" || - // Filter out objects that have companions - (ent.kind == "object" && companion(ent).isDefined) || - ent.name == "AnyValCompanion" - } - .map { entity => - val comp = companion(entity) - val entityUrl = relativePath(entity) - val compUrl = comp.map(relativePath).getOrElse("#") - li( - cls := s"""mdl-list__item entity ${ if (comp.isDefined) "two" else "one" }""", - comp.map { _ => a(cls := "entity-button object", href := compUrl, "O") }.getOrElse(()), - a( - cls := s"""entity-button shadowed ${entity.kind.replaceAll(" ", "")}""", - href := entityUrl, - entity.kind(0).toUpper.toString - ), - a( - cls := "entity-name", - href := entityUrl, - entity.name - ) - ) - } - - if (children.length > 0) - li(cls := "mdl-list__item package", href := relativePath(pack), k) :: children.toList - else Nil - } - } - ) - - - def entityTitle = { - val modifiers = entity.kind match { - case "Modifiers" => - val m = entity.asInstanceOf[Modifiers] - if (m.modifiers.nonEmpty) - Some(span(cls := "entity-modifiers", m.modifiers.mkString(" "))) - else - None - case _ => None - } - - val typeParams = entity match { - case x if x.hasTypeParams => - val t = entity.asInstanceOf[TypeParams] - if (t.typeParams.nonEmpty) - Some(span(cls := "entity-type-params no-left-margin", t.typeParams.mkString("[", ", ", "]"))) - else None - case _ => None - } - - val superTypes = entity match { - case x if x.hasSuperTypes => - val st = entity.asInstanceOf[SuperTypes] - if (st.superTypes.nonEmpty) - Some(span( - cls := "entity-super-types", - st.superTypes.collect { - case x => x.title - }.mkString("extends ", " with ", "") - )) - else None - case _ => None - } - - modifiers :: - Some(span(cls := "entity-kind", entity.kind)) :: - Some(span(cls := "entity-name", entity.name)) :: - typeParams :: - superTypes :: - Nil - - }.flatten - - def companion(entity: Entity) = { - val pack = entity.path.dropRight(1).mkString(".") - for { - p <- packages.get(pack) - child <- p.children.find(e => e.name == entity.name && e.path.last != entity.path.last) - } yield child - } - - def companionAnchor = - companion(entity).map { c => - a( - cls := "mdl-navigation__link", - href := c.path.last + ".html", - "Companion " + c.kind - ) - }.getOrElse(span()) - - def searchView = - div( - cls := "search-container", - div( - cls := "mdl-textfield mdl-js-textfield mdl-textfield--floating-label", - input(cls := "mdl-textfield__input", `type` := "text", id := "search"), - label(cls := "mdl-textfield__label", `for` := "search", "Search") - ) - ) -} diff --git a/dottydoc/js/src/html/Member.scala b/dottydoc/js/src/html/Member.scala deleted file mode 100644 index ec17b5021..000000000 --- a/dottydoc/js/src/html/Member.scala +++ /dev/null @@ -1,313 +0,0 @@ -package dotty.tools.dottydoc -package js -package html - -import scalatags.JsDom.all._ -import scalatags.JsDom.TypedTag -import org.scalajs.dom -import org.scalajs.dom.html.{Anchor, Div, Span} - -trait MemberLayout { - import js.model._ - import js.model.ops._ - - def member(m: Entity, parent: Entity) = { - def toggleBetween(short: Div, and: Div): Unit = - if (and.style.display == "none") { - and.style.display = "block" - short.style.display = "none" - } else { - and.style.display = "none" - short.style.display = "block" - } - - m.kind match { - case "class" | "case class" | "object" | "trait" | "def" | "val" => - val entity = m.asInstanceOf[Entity with Modifiers] - val shortComment = div( - cls := "mdl-cell mdl-cell--12-col summary-comment", - raw(m.comment.fold("")(_.short)) - ).render - - val fullComment = div( - cls := "mdl-cell mdl-cell--12-col full-comment", - style := "display: none;", - fromImplicitSpan(m), - raw(m.comment.fold("")(_.body)) - ).render - - val hasLongerFullComment = m.comment.fold(false) { c => - c.short.length + 5 < c.body.length - } - - val divs = div( - cls := - s""" - mdl-cell mdl-cell--12-col member - ${if (hasLongerFullComment) "member-fullcomment" else ""} - """, - onclick := { () => toggleBetween(shortComment, and = fullComment) }, - div( - cls := "mdl-cell mdl-cell--12-col member-definition", - span( - cls := "member-modifiers-kind", - entity.modifiers.mkString(" ") + " " + m.kind - ), - span( - cls := { if (m.addedImplicitly) "member-name implicitly-added" else "member-name" }, - m.name - ), - spanWith("member-type-params no-left-margin", typeParams(m)), - span(cls := "member-param-list no-left-margin", paramList(m)), - returnValue(entity, parent) - ), - shortComment, - fullComment - ) - Seq(divs) - case _ => Seq(h1("ERROR: " + m.name)) - } - } - - def fromImplicitSpan(m: Entity) = m.foldImplicitlyAdded { ref => - span( - "Implicitly added from: ", - referenceToLinks(ref) - ) - }.getOrElse(span()) - - def spanWith(clazz: String, contents: String) = contents match { - case "" => None - case _ => Some(span(cls := clazz, contents)) - } - - def paramList(m: Entity): Span = m.kind match { - case "def" => - val d = m.asInstanceOf[Def] - if (d.paramLists.nonEmpty) - span( - cls := "member-param-lists", - d.paramLists.map { xs => - span( - cls := "param-list", - "(", - span(cls := "is-implicit no-left-margin", if (xs.isImplicit) "implicit " else ""), - xs.list.flatMap { tr => - Seq( - span(cls := "param-name", tr.title).render, - span(cls := "type-separator no-left-margin", if (tr.isByName) ": =>" else ":").render, - span(if (tr.ref.kind == "FunctionReference" && tr.isRepeated) "(" else "").render, - span(referenceToLinks(tr.ref)).render, - span(if (tr.ref.kind == "FunctionReference" && tr.isRepeated) ")*" else if (tr.isRepeated) "*" else "").render, - span(cls := "type-separator no-left-margin", ",").render - ) - }.toList.dropRight(1), - ")" - ).render - }.toList - ).render - else span().render - case _ => span().render - } - - def referenceToLinks(ref: Reference): Span = { - def linkToAnchor(link: MaterializableLink) = link.kind match { - case "MaterializedLink" => - val (t, url) = (link.asInstanceOf[MaterializedLink].title, link.asInstanceOf[MaterializedLink].target) - a(href := url, t).render - case "NoLink" => span(link.title).render - - case "UnsetLink" => - println("UnsetLink found:") - scala.scalajs.js.Dynamic.global.console.log(link) - span(link.title).render - } - - ref.kind match { - case "TypeReference" => - val tref = ref.asInstanceOf[TypeReference] - val infixTypes = "<:<" :: "=:=" :: Nil - if (tref.paramLinks.length == 2 && infixTypes.contains(tref.title)) span( - referenceToLinks(tref.paramLinks(0)), - span(cls := "type-separator no-left-margin"), - linkToAnchor(tref.tpeLink), - span(cls := "type-separator no-left-margin"), - referenceToLinks(tref.paramLinks(1)) - ).render - else if (tref.paramLinks.nonEmpty) span( - linkToAnchor(tref.tpeLink), - "[", - tref - .paramLinks - .map(referenceToLinks) - .flatMap(link => Seq(link, span(cls := "type-separator no-left-margin", ",").render)) - .toList.dropRight(1), - "]" - ).render - else span(linkToAnchor(tref.tpeLink)).render - - case "OrTypeReference" => - val (left, right) = (ref.asInstanceOf[OrTypeReference].left, ref.asInstanceOf[OrTypeReference].right) - span( - referenceToLinks(left), - span(cls := "type-separator", "|"), - referenceToLinks(right) - ).render - - case "AndTypeReference" => - val (left, right) = (ref.asInstanceOf[AndTypeReference].left, ref.asInstanceOf[AndTypeReference].right) - span( - referenceToLinks(left), - span(cls := "type-separator", "&"), - referenceToLinks(right) - ).render - - case "BoundsReference" => - val (low, high) = (ref.asInstanceOf[BoundsReference].low, ref.asInstanceOf[BoundsReference].high) - span( - referenceToLinks(low), - span(cls := "type-separator", "<:"), - referenceToLinks(high) - ).render - - case "FunctionReference" => { - val func = ref.asInstanceOf[FunctionReference] - span( - cls := "no-left-margin", - if (func.args.length > 1) "(" else "", - if (func.args.isEmpty) - span("()") - else func - .args - .map(referenceToLinks) - .flatMap(link => Seq(link, span(cls := "type-separator no-left-margin", ",").render)).init.toList, - if (func.args.length > 1) ") => " else " => ", - referenceToLinks(func.returnValue) - ).render - } - - case "TupleReference" => { - val func = ref.asInstanceOf[TupleReference] - span( - cls := "no-left-margin", - "(", - func - .args - .map(referenceToLinks) - .flatMap(link => Seq(link, span(cls := "type-separator no-left-margin", ",").render)).init.toList, - ")" - ).render - } - } - } - - def typeParams(m: Entity): String = m.kind match { - case "def" => - val d = m.asInstanceOf[Def] - if (d.typeParams.nonEmpty) - d.typeParams.mkString("[", ", ", "]") - else "" - case _ => "" - } - - def returnValue(m: Entity with Modifiers, parent: Entity) = { - // shortens: "Option.this.A" => "A" - def shorten(s: String): String = s.split('.').toList match { - case x :: Nil => x - case x :: xs if x == parent.name => xs.last - case xs => s - } - - def link(rv: Reference): Span = { - def decodeTpeLink(link: MaterializableLink): Span = link.kind match { - case "MaterializedLink" => - val ml = link.asInstanceOf[MaterializedLink] - span(cls := "member-return-value", a(href := ml.target, ml.title)).render - case "UnsetLink" => - val un = link.asInstanceOf[UnsetLink] - span(cls := "member-return-value", shorten(un.query)).render - case "NoLink" => - val no = link.asInstanceOf[NoLink] - span(cls := "member-return-value", shorten(no.title)).render - } - - rv.kind match { - case "TypeReference" => - val trv = rv.asInstanceOf[TypeReference] - val returnValue = decodeTpeLink(trv.tpeLink) - - if (trv.paramLinks.nonEmpty) span( - returnValue, - "[", - trv.paramLinks - .map(link) - .flatMap { sp => - Seq(sp, span(cls := "type-separator no-left-margin", ",").render) - } - .toList.dropRight(1), - "]" - ).render - else returnValue - - case "OrTypeReference" => - val (left, right) = (rv.asInstanceOf[OrTypeReference].left, rv.asInstanceOf[OrTypeReference].right) - span( - cls := "member-return-value or-type", - link(left), - span(cls := "type-separator", "|"), - link(right) - ).render - case "AndTypeReference" => - val (left, right) = (rv.asInstanceOf[AndTypeReference].left, rv.asInstanceOf[AndTypeReference].right) - span( - cls := "member-return-value and-type", - link(left), - span(cls := "type-separator", "&"), - link(right) - ).render - - case "BoundsReference" => - val (low, high) = (rv.asInstanceOf[BoundsReference].low, rv.asInstanceOf[BoundsReference].high) - span( - link(low), - span(cls := "type-separator", "<:"), - link(high) - ).render - case "FunctionReference" => - val func = rv.asInstanceOf[FunctionReference] - span( - cls := "no-left-margin", - if (func.args.length > 1) "(" else "", - if (func.args.isEmpty) - span("()") - else func - .args - .map(link) - .flatMap(link => Seq(link, span(cls := "type-separator no-left-margin", ",").render)).init.toList, - if (func.args.length > 1) ") => " else " => ", - link(func.returnValue) - ).render - - case "TupleReference" => { - val func = rv.asInstanceOf[TupleReference] - span( - cls := "no-left-margin", - "(", - func - .args - .map(link) - .flatMap(link => Seq(link, span(cls := "type-separator no-left-margin", ",").render)).init.toList, - ")" - ).render - } - } - } - - m.kind match { - case "def" => - val rv = m.asInstanceOf[ReturnValue] - Some(span(cls := "no-left-margin", ": ", link(rv.returnValue))) - case _ => None - } - } -} diff --git a/dottydoc/js/src/model/entities.scala b/dottydoc/js/src/model/entities.scala deleted file mode 100644 index ca1b5ec69..000000000 --- a/dottydoc/js/src/model/entities.scala +++ /dev/null @@ -1,180 +0,0 @@ -package dotty.tools -package dottydoc -package js -package model - -import scala.scalajs.{ js => sjs } -import sjs.annotation.ScalaJSDefined - -/** This file defines the interface for which to interact with the searchable - * index. To use the normal operations available on the traits on the JVM: - * - * {{{ - * import dotty.tools.dottydoc.js.model.ops._ - * val x: Package = ... - * }}} - * - * Please note that some of the actual fields have not been added to this - * interface, this is simply due to the fact that they're not necessary for - * search - YET. They could be added, for instance `comment` is missing. - */ -@ScalaJSDefined -trait Entity extends sjs.Object { - val kind: String - val name: String - val path: sjs.Array[String] - val comment: sjs.UndefOr[Comment] -} - -@ScalaJSDefined -trait Comment extends sjs.Object { - val body: String - val short: String - val authors: sjs.Array[String] - val see: sjs.Array[String] - val result: sjs.UndefOr[String] - val throws: Map[String, String] - val valueParams: Map[String, String] - val typeParams: Map[String, String] - val version: sjs.UndefOr[String] - val since: sjs.UndefOr[String] - val todo: List[String] - val deprecated: sjs.UndefOr[String] - val note: List[String] - val example: List[String] - val constructor: sjs.UndefOr[String] - val group: sjs.UndefOr[String] - val groupDesc: Map[String, String] - val groupNames: Map[String, String] - val groupPrio: Map[String, String] - val hideImplicitConversions: List[String] -} - -@ScalaJSDefined -trait Members extends sjs.Object { - val members: sjs.Array[Entity] -} - -@ScalaJSDefined -trait Modifiers extends sjs.Object { - val modifiers: sjs.Array[String] -} - -@ScalaJSDefined -trait ReturnValue extends sjs.Object { - val returnValue: Reference -} - -@ScalaJSDefined -trait TypeParams extends sjs.Object { - val typeParams: sjs.Array[String] -} - -@ScalaJSDefined -trait SuperTypes extends sjs.Object { - val superTypes: sjs.Array[MaterializableLink] -} - -@ScalaJSDefined -trait Package extends Entity with Members - -@ScalaJSDefined -trait Class extends Entity with Members with Modifiers with TypeParams - -@ScalaJSDefined -trait CaseClass extends Class - -@ScalaJSDefined -trait Object extends Entity with Members with Modifiers - -@ScalaJSDefined -trait Trait extends Class - -@ScalaJSDefined -trait ParamList extends sjs.Object { - val list: sjs.Array[NamedReference] - val isImplicit: Boolean -} - -@ScalaJSDefined -trait Def extends Entity with Modifiers with ReturnValue { - val typeParams: sjs.Array[String] - val paramLists: sjs.Array[ParamList] - val implicitlyAddedFrom: sjs.UndefOr[Reference] -} - -@ScalaJSDefined -trait Val extends Entity with Modifiers { - val implicitlyAddedFrom: sjs.UndefOr[Reference] -} - -@ScalaJSDefined -trait Var extends Entity with Modifiers { - val implicitlyAddedFrom: sjs.UndefOr[Reference] -} - -@ScalaJSDefined -trait ImplicitlyAddedEntity extends Entity { - val implicitlyAddedFrom: sjs.UndefOr[Reference] -} - -object ops { - val EntitiesWithModifiers = - "case class" :: "class" :: "object" :: "trait" :: "def" :: "val" :: Nil - - val EntitiesWithMembers = - "package" :: "case class" :: "class" :: "object" :: "trait" :: Nil - - val EntitiesWithTypeParams = - "case class" :: "class" :: "trait" :: "def" :: Nil - - val EntitiesWithSuperTypes = - "case class" :: "class" :: "trait" :: "object" :: Nil - - implicit class PackageOps(val p: Package) { - def children: sjs.Array[Entity with Members] = - p.members.collect { - case x if EntitiesWithMembers contains x.kind => - x.asInstanceOf[Entity with Members] - } - - def withMembers(mbrs: sjs.Array[Entity]): Package = new Package { - val kind = p.kind - val name = p.name - val path = p.path - val members = mbrs - val comment = p.comment - } - } - - implicit class EntityOps(val ent: Entity) { - def typeParams: sjs.Array[String] = - if (ent.kind == "def") - ent.asInstanceOf[Def].typeParams - else sjs.Array() - - def hasMembers: Boolean = - EntitiesWithMembers contains ent.kind - - def hasModifiers: Boolean = - EntitiesWithModifiers contains ent.kind - - def hasTypeParams: Boolean = - EntitiesWithTypeParams contains ent.kind - - def hasSuperTypes: Boolean = - EntitiesWithSuperTypes contains ent.kind - - def isPrivate: Boolean = - hasModifiers && - ent.asInstanceOf[Modifiers].modifiers.contains("private") - - def addedImplicitly: Boolean = (ent.kind == "def" || ent.kind == "val") && { - ent.asInstanceOf[ImplicitlyAddedEntity].implicitlyAddedFrom.isDefined - } - - def foldImplicitlyAdded[B](f: Reference => B): sjs.UndefOr[B] = - if (ent.kind == "def" || ent.kind == "val") ent.asInstanceOf[ImplicitlyAddedEntity].implicitlyAddedFrom.map(f) - else sjs.undefined - } -} diff --git a/dottydoc/js/src/model/references.scala b/dottydoc/js/src/model/references.scala deleted file mode 100644 index 051251b68..000000000 --- a/dottydoc/js/src/model/references.scala +++ /dev/null @@ -1,84 +0,0 @@ -package dotty.tools -package dottydoc -package js -package model - -import scala.scalajs.{ js => sjs } -import sjs.annotation.ScalaJSDefined - -/** Type References */ -@ScalaJSDefined -sealed trait Reference extends sjs.Object { - val kind: String -} - -@ScalaJSDefined -trait TypeReference extends Reference { - val title: String - val tpeLink: MaterializableLink - val paramLinks: sjs.Array[Reference] -} - -@ScalaJSDefined -trait OrTypeReference extends Reference { - val left: Reference - val right: Reference -} - -@ScalaJSDefined -trait AndTypeReference extends Reference { - val left: Reference - val right: Reference -} - -@ScalaJSDefined -trait BoundsReference extends Reference { - val low: Reference - val high: Reference -} - -@ScalaJSDefined -trait NamedReference extends Reference { - val title: String - val ref: Reference - val isByName: Boolean - val isRepeated: Boolean -} - -@ScalaJSDefined -trait ConstantReference extends Reference { - val title: String -} - -@ScalaJSDefined -trait FunctionReference extends Reference { - val args: sjs.Array[Reference] - val returnValue: Reference -} - -@ScalaJSDefined -trait TupleReference extends Reference { - val args: sjs.Array[Reference] -} - -/** Materializable links */ -@ScalaJSDefined -sealed trait MaterializableLink extends sjs.Object { - val kind: String - val title: String -} - -@ScalaJSDefined -trait UnsetLink extends MaterializableLink { - val query: String -} - -@ScalaJSDefined -trait MaterializedLink extends MaterializableLink { - val target: String -} - -@ScalaJSDefined -trait NoLink extends MaterializableLink { - val target: String -} |