diff options
author | ingoem <ingoem@gmail.com> | 2012-08-14 14:42:44 +0200 |
---|---|---|
committer | ingoem <ingoem@gmail.com> | 2012-08-14 15:50:09 +0200 |
commit | 3a2e878fab1c5af3e6306f1bedb52bbcfe71fbf6 (patch) | |
tree | d962c583655e07845c0652b30631ab9a78e62cbb /src/compiler | |
parent | 1c5526ed81a27550cc4f376d6debe89216470c51 (diff) | |
download | scala-3a2e878fab1c5af3e6306f1bedb52bbcfe71fbf6.tar.gz scala-3a2e878fab1c5af3e6306f1bedb52bbcfe71fbf6.tar.bz2 scala-3a2e878fab1c5af3e6306f1bedb52bbcfe71fbf6.zip |
Add Scaladoc flag to specify hidden implicit conversions
Diffstat (limited to 'src/compiler')
6 files changed, 36 insertions, 18 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 } |