aboutsummaryrefslogtreecommitdiff
path: root/dottydoc/js/src
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-08-06 20:53:15 +0200
committerFelix Mulder <felix.mulder@gmail.com>2016-08-19 15:37:33 +0200
commit922788ac39f7538b79b58c326bd22c641a8e2490 (patch)
treec24de6db3dc8536a7aadc72d569a3212fcafe9f2 /dottydoc/js/src
parent94dd0bccbb68618bc668c6005316d6930ae26069 (diff)
downloaddotty-922788ac39f7538b79b58c326bd22c641a8e2490.tar.gz
dotty-922788ac39f7538b79b58c326bd22c641a8e2490.tar.bz2
dotty-922788ac39f7538b79b58c326bd22c641a8e2490.zip
Add info on where implicitly added members originate from
Diffstat (limited to 'dottydoc/js/src')
-rw-r--r--dottydoc/js/src/html/Member.scala12
-rw-r--r--dottydoc/js/src/model/entities.scala22
2 files changed, 30 insertions, 4 deletions
diff --git a/dottydoc/js/src/html/Member.scala b/dottydoc/js/src/html/Member.scala
index a62a1ab34..dbd1883fa 100644
--- a/dottydoc/js/src/html/Member.scala
+++ b/dottydoc/js/src/html/Member.scala
@@ -9,6 +9,7 @@ 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 =
@@ -31,10 +32,10 @@ trait MemberLayout {
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
}
@@ -53,7 +54,7 @@ trait MemberLayout {
entity.modifiers.mkString(" ") + " " + m.kind
),
span(
- cls := "member-name",
+ cls := { if (m.addedImplicitly) "member-name implicitly-added" else "member-name" },
m.name
),
spanWith("member-type-params no-left-margin", typeParams(m)),
@@ -68,6 +69,13 @@ trait MemberLayout {
}
}
+ 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))
diff --git a/dottydoc/js/src/model/entities.scala b/dottydoc/js/src/model/entities.scala
index 4ae76c58c..49d0ec005 100644
--- a/dottydoc/js/src/model/entities.scala
+++ b/dottydoc/js/src/model/entities.scala
@@ -82,13 +82,23 @@ trait ParamList extends sjs.Object {
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
+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 Var extends Entity with Modifiers
+trait ImplicitlyAddedEntity extends Entity {
+ val implicitlyAddedFrom: sjs.UndefOr[Reference]
+}
object ops {
val EntitiesWithModifiers =
@@ -140,5 +150,13 @@ object ops {
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
}
}