summaryrefslogtreecommitdiff
path: root/src/scaladoc
diff options
context:
space:
mode:
authorVlad Ureche <vlad.ureche@epfl.ch>2016-03-30 14:24:35 +0200
committerVlad Ureche <vlad.ureche@epfl.ch>2016-03-30 14:24:35 +0200
commit144979443dc7a5fbf3fede77a63e89725742cead (patch)
tree25a35a17bd83295bb20588eb77d872ce123e5271 /src/scaladoc
parentecc89449eebda0f6464e1dcc1e61bbdc46bdab3f (diff)
parentab383024ec3c580d5e356565ad7613073cb326e6 (diff)
downloadscala-144979443dc7a5fbf3fede77a63e89725742cead.tar.gz
scala-144979443dc7a5fbf3fede77a63e89725742cead.tar.bz2
scala-144979443dc7a5fbf3fede77a63e89725742cead.zip
Merge pull request #5069 from felixmulder/topic/scaladoc-search-types-and-classes
Add type and class/trait member search, fixes SI-9721 and SI-9722
Diffstat (limited to 'src/scaladoc')
-rw-r--r--src/scaladoc/scala/tools/nsc/doc/html/page/IndexScript.scala36
-rw-r--r--src/scaladoc/scala/tools/nsc/doc/html/resource/lib/index.js7
2 files changed, 29 insertions, 14 deletions
diff --git a/src/scaladoc/scala/tools/nsc/doc/html/page/IndexScript.scala b/src/scaladoc/scala/tools/nsc/doc/html/page/IndexScript.scala
index dd242e6b3b..6b24c0f568 100644
--- a/src/scaladoc/scala/tools/nsc/doc/html/page/IndexScript.scala
+++ b/src/scaladoc/scala/tools/nsc/doc/html/page/IndexScript.scala
@@ -30,17 +30,26 @@ class IndexScript(universe: doc.Universe) extends Page {
case (pack, templates) => {
val merged = mergeByQualifiedName(templates)
- val ary = merged.keys.toList.sortBy(_.toLowerCase).map(key => {
+ val ary = merged.keys.toList.sortBy(_.toLowerCase).map { key =>
+ /** One pair is generated for the class/trait and one for the
+ * companion object, both will have the same {"name": key}
+ *
+ * As such, we need to distinguish between the members that are
+ * generated by the object, and the members generated by the
+ * class/trait instance. Otherwise one of the member objects will be
+ * overwritten.
+ */
val pairs = merged(key).flatMap { t: DocTemplateEntity =>
+ val kind = kindToString(t)
Seq(
- kindToString(t) -> relativeLinkTo(t),
- "kind" -> kindToString(t),
- "members" -> membersToJSON(t.members.filter(!_.isShadowedOrAmbiguousImplicit)),
+ kind -> relativeLinkTo(t),
+ "kind" -> kind,
+ s"members_$kind" -> membersToJSON(t.members.filter(!_.isShadowedOrAmbiguousImplicit), t),
"shortDescription" -> shortDesc(t))
}
JSONObject(Map(pairs : _*) + ("name" -> key))
- })
+ }
pack.qualifiedName -> JSONArray(ary)
}
@@ -83,10 +92,10 @@ class IndexScript(universe: doc.Universe) extends Page {
}
/** Returns the json representation of the supplied members */
- def membersToJSON(entities: List[MemberEntity]): JSONType =
- JSONArray(entities map memberToJSON)
+ def membersToJSON(entities: List[MemberEntity], parent: DocTemplateEntity): JSONType =
+ JSONArray(entities map (memberToJSON(_, parent)))
- private def memberToJSON(mbr: MemberEntity): JSONObject = {
+ private def memberToJSON(mbr: MemberEntity, parent: DocTemplateEntity): JSONObject = {
/** This function takes a member and gets eventual parameters and the
* return type. For example, the definition:
* {{{ def get(key: A): Option[B] }}}
@@ -100,6 +109,7 @@ class IndexScript(universe: doc.Universe) extends Page {
}
.mkString("(", ")(", "): " + d.resultType.name)
case v: Val => ": " + v.resultType.name
+ case _ => ""
}
/** This function takes a member entity and return all modifiers in a
@@ -119,15 +129,15 @@ class IndexScript(universe: doc.Universe) extends Page {
*/
def jsonObject(m: MemberEntity): JSONObject =
JSONObject(Map(
- "label" -> m.definitionName.replaceAll(".*#", ""), // member name
+ "label" -> "[^\\.]*\\.([^#]+#)?".r.replaceAllIn(m.definitionName, ""), // member name
"member" -> m.definitionName.replaceFirst("#", "."), // full member name
"tail" -> memberTail(m),
- "kind" -> memberKindToString(m), // modifiers i.e. "abstract def"
- "link" -> memberToUrl(m))) // permalink to the member
+ "kind" -> memberKindToString(m), // modifiers i.e. "abstract def"
+ "link" -> memberToUrl(m))) // permalink to the member
mbr match {
- case d: Def => jsonObject(d)
- case v: Val => jsonObject(v)
+ case x @ (_: Def | _: Val | _: Object | _: AliasType) => jsonObject(x)
+ case e @ (_: Class | _: Trait) if parent.isRootPackage || !parent.isPackage => jsonObject(e)
case m: MemberEntity =>
JSONObject(Map("member" -> m.definitionName, "error" -> "unsupported entity"))
}
diff --git a/src/scaladoc/scala/tools/nsc/doc/html/resource/lib/index.js b/src/scaladoc/scala/tools/nsc/doc/html/resource/lib/index.js
index 55224eae52..56eb060ccf 100644
--- a/src/scaladoc/scala/tools/nsc/doc/html/resource/lib/index.js
+++ b/src/scaladoc/scala/tools/nsc/doc/html/resource/lib/index.js
@@ -412,7 +412,12 @@ function handleSearchedPackage(res, regExp) {
*/
function searchEntity(entity, ul, regExp) {
return new Promise(function(resolve, reject) {
- var matchingMembers = $.grep(entity.members, function(member, i) {
+ var allMembers =
+ (entity.members_trait || [])
+ .concat(entity.members_class || [])
+ .concat(entity.members_object || [])
+
+ var matchingMembers = $.grep(allMembers, function(member, i) {
return regExp.test(member.label);
});