summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoringoem <ingoem@gmail.com>2012-08-14 14:42:44 +0200
committeringoem <ingoem@gmail.com>2012-08-14 15:50:09 +0200
commit3a2e878fab1c5af3e6306f1bedb52bbcfe71fbf6 (patch)
treed962c583655e07845c0652b30631ab9a78e62cbb
parent1c5526ed81a27550cc4f376d6debe89216470c51 (diff)
downloadscala-3a2e878fab1c5af3e6306f1bedb52bbcfe71fbf6.tar.gz
scala-3a2e878fab1c5af3e6306f1bedb52bbcfe71fbf6.tar.bz2
scala-3a2e878fab1c5af3e6306f1bedb52bbcfe71fbf6.zip
Add Scaladoc flag to specify hidden implicit conversions
-rw-r--r--src/compiler/scala/tools/nsc/doc/Settings.scala18
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/page/Template.scala9
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js15
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/Entity.scala4
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala2
-rw-r--r--src/compiler/scala/tools/nsc/doc/model/ModelFactoryImplicitSupport.scala6
-rw-r--r--test/scaladoc/run/implicits-known-type-classes.scala2
7 files changed, 37 insertions, 19 deletions
diff --git a/src/compiler/scala/tools/nsc/doc/Settings.scala b/src/compiler/scala/tools/nsc/doc/Settings.scala
index 720b1347ef..dbc34bd7b3 100644
--- a/src/compiler/scala/tools/nsc/doc/Settings.scala
+++ b/src/compiler/scala/tools/nsc/doc/Settings.scala
@@ -111,6 +111,12 @@ class Settings(error: String => Unit, val printMsg: String => Unit = println(_))
"only use it if you haven't defined usecase for implicitly inherited members."
)
+ val docImplicitsHide = MultiStringSetting (
+ "-implicits-hide",
+ "implicit(s)",
+ "Hide the members inherited by the given comma separated, fully qualified implicit conversions. Add dot (.) to include default conversions."
+ )
+
val docDiagrams = BooleanSetting (
"-diagrams",
"Create inheritance diagrams for classes, traits and packages."
@@ -203,7 +209,7 @@ class Settings(error: String => Unit, val printMsg: String => Unit = println(_))
docformat, doctitle, docfooter, docversion, docUncompilable, docsourceurl, docgenerator, docRootContent, useStupidTypes,
docDiagrams, docDiagramsDebug, docDiagramsDotPath,
docDiagramsDotTimeout, docDiagramsDotRestart,
- docImplicits, docImplicitsDebug, docImplicitsShowAll,
+ docImplicits, docImplicitsDebug, docImplicitsShowAll, docImplicitsHide,
docDiagramsMaxNormalClasses, docDiagramsMaxImplicitClasses,
docNoPrefixes, docNoLinkWarnings, docRawOutput, docSkipPackages,
docExpandAllTypes, docGroups
@@ -224,6 +230,14 @@ class Settings(error: String => Unit, val printMsg: String => Unit = println(_))
def skipPackage(qname: String) =
skipPackageNames(qname.toLowerCase)
+ lazy val hiddenImplicits: Set[String] = {
+ if (docImplicitsHide.value.isEmpty) hardcoded.commonConversionTargets
+ else docImplicitsHide.value.toSet flatMap { name: String =>
+ if(name == ".") hardcoded.commonConversionTargets
+ else Set(name)
+ }
+ }
+
/**
* This is the hardcoded area of Scaladoc. This is where "undesirable" stuff gets eliminated. I know it's not pretty,
* but ultimately scaladoc has to be useful. :)
@@ -264,7 +278,7 @@ class Settings(error: String => Unit, val printMsg: String => Unit = println(_))
}
/** Common conversion targets that affect any class in Scala */
- val commonConversionTargets = List(
+ val commonConversionTargets = Set(
"scala.Predef.any2stringfmt",
"scala.Predef.any2stringadd",
"scala.Predef.any2ArrowAssoc",
diff --git a/src/compiler/scala/tools/nsc/doc/html/page/Template.scala b/src/compiler/scala/tools/nsc/doc/html/page/Template.scala
index 5977acc0c2..1f68781777 100644
--- a/src/compiler/scala/tools/nsc/doc/html/page/Template.scala
+++ b/src/compiler/scala/tools/nsc/doc/html/page/Template.scala
@@ -148,8 +148,13 @@ class Template(universe: doc.Universe, generator: DiagramGenerator, tpl: DocTemp
<div id="ancestors">
<span class="filtertype">Implicitly<br/>
</span>
- <ol id="implicits">
- { tpl.conversions.map(conv => <li class="in" name={ conv.conversionQualifiedName }><span>{ "by " + conv.conversionShortName }</span></li>) }
+ <ol id="implicits"> {
+ tpl.conversions.map { conv =>
+ val name = conv.conversionQualifiedName
+ val hide = universe.settings.hiddenImplicits(name)
+ <li class="in" name={ name } data-hidden={ hide.toString }><span>{ "by " + conv.conversionShortName }</span></li>
+ }
+ }
</ol>
</div>
else NodeSeq.Empty
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js
index afd0293fe1..5920fdfdb2 100644
--- a/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js
@@ -4,12 +4,11 @@
$(document).ready(function(){
var isHiddenClass = function (name) {
return name == 'scala.Any' ||
- name == 'scala.AnyRef' ||
- name == 'scala.Predef.any2stringfmt' ||
- name == 'scala.Predef.any2stringadd' ||
- name == 'scala.Predef.any2ArrowAssoc' ||
- name == 'scala.Predef.any2Ensuring' ||
- name == 'scala.collection.TraversableOnce.alternateImplicit'
+ name == 'scala.AnyRef';
+ };
+
+ var isHidden = function (elem) {
+ return $(elem).attr("data-hidden") == 'true';
};
$("#linearization li:gt(0)").filter(function(){
@@ -17,7 +16,7 @@ $(document).ready(function(){
}).removeClass("in").addClass("out");
$("#implicits li").filter(function(){
- return isHiddenClass($(this).attr("name"));
+ return isHidden(this);
}).removeClass("in").addClass("out");
// Pre-filter members
@@ -113,7 +112,7 @@ $(document).ready(function(){
var filteredImplicits =
$("#implicits li.out").filter(function() {
- return ! isHiddenClass($(this).attr("name"));
+ return ! isHidden(this);
});
filteredImplicits.removeClass("out").addClass("in");
diff --git a/src/compiler/scala/tools/nsc/doc/model/Entity.scala b/src/compiler/scala/tools/nsc/doc/model/Entity.scala
index 46b2a11d4a..6d193c30f7 100644
--- a/src/compiler/scala/tools/nsc/doc/model/Entity.scala
+++ b/src/compiler/scala/tools/nsc/doc/model/Entity.scala
@@ -530,8 +530,8 @@ trait ImplicitConversion {
/** The members inherited by this implicit conversion */
def members: List[MemberEntity]
- /** Is this a common implicit conversion (aka conversion that affects all classes, in Predef?) */
- def isCommonConversion: Boolean
+ /** Is this a hidden implicit conversion (as specified in the settings) */
+ def isHiddenConversion: Boolean
}
/** Shadowing captures the information that the member is shadowed by some other members
diff --git a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala
index a962ec4007..ed8541f692 100644
--- a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala
+++ b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala
@@ -1075,7 +1075,7 @@ class ModelFactory(val global: Global, val settings: doc.Settings) {
def classExcluded(clazz: TemplateEntity): Boolean = settings.hardcoded.isExcluded(clazz.qualifiedName)
// the implicit conversions that are excluded from the pages should not appear in the diagram
- def implicitExcluded(convertorMethod: String): Boolean = settings.hardcoded.commonConversionTargets.contains(convertorMethod)
+ def implicitExcluded(convertorMethod: String): Boolean = settings.hiddenImplicits(convertorMethod)
// whether or not to create a page for an {abstract,alias} type
def typeShouldDocument(bSym: Symbol, inTpl: DocTemplateImpl) =
diff --git a/src/compiler/scala/tools/nsc/doc/model/ModelFactoryImplicitSupport.scala b/src/compiler/scala/tools/nsc/doc/model/ModelFactoryImplicitSupport.scala
index 5a0cc602e5..327436ed20 100644
--- a/src/compiler/scala/tools/nsc/doc/model/ModelFactoryImplicitSupport.scala
+++ b/src/compiler/scala/tools/nsc/doc/model/ModelFactoryImplicitSupport.scala
@@ -113,9 +113,9 @@ trait ModelFactoryImplicitSupport {
conversions = conversions.filter((ic: ImplicitConversionImpl) =>
hardcoded.valueClassFilter(sym.nameString, ic.conversionQualifiedName))
- // Put the class-specific conversions in front
+ // Put the visible conversions in front
val (ownConversions, commonConversions) =
- conversions.partition(!_.isCommonConversion)
+ conversions.partition(!_.isHiddenConversion)
ownConversions ::: commonConversions
}
@@ -416,7 +416,7 @@ trait ModelFactoryImplicitSupport {
lazy val members: List[MemberEntity] = memberImpls
- def isCommonConversion = hardcoded.commonConversionTargets.contains(conversionQualifiedName)
+ def isHiddenConversion = settings.hiddenImplicits(conversionQualifiedName)
override def toString = "Implcit conversion from " + sym.tpe + " to " + toType + " done by " + convSym
}
diff --git a/test/scaladoc/run/implicits-known-type-classes.scala b/test/scaladoc/run/implicits-known-type-classes.scala
index 9f4ca372b0..471a1a219d 100644
--- a/test/scaladoc/run/implicits-known-type-classes.scala
+++ b/test/scaladoc/run/implicits-known-type-classes.scala
@@ -24,7 +24,7 @@ object Test extends ScaladocModelTest {
val A = base._class("A")
- for (conversion <- A.conversions if !conversion.isCommonConversion) {
+ for (conversion <- A.conversions if !conversion.isHiddenConversion) {
assert(conversion.constraints.length == 1, conversion.constraints.length + " == 1 (in " + conversion + ")")
assert(conversion.constraints.head.isInstanceOf[KnownTypeClassConstraint],
conversion.constraints.head + " is not a known type class constraint!")