From 3a2e878fab1c5af3e6306f1bedb52bbcfe71fbf6 Mon Sep 17 00:00:00 2001 From: ingoem Date: Tue, 14 Aug 2012 14:42:44 +0200 Subject: Add Scaladoc flag to specify hidden implicit conversions --- src/compiler/scala/tools/nsc/doc/Settings.scala | 18 ++++++++++++++++-- .../scala/tools/nsc/doc/html/page/Template.scala | 9 +++++++-- .../scala/tools/nsc/doc/html/resource/lib/template.js | 15 +++++++-------- src/compiler/scala/tools/nsc/doc/model/Entity.scala | 4 ++-- .../scala/tools/nsc/doc/model/ModelFactory.scala | 2 +- .../nsc/doc/model/ModelFactoryImplicitSupport.scala | 6 +++--- 6 files changed, 36 insertions(+), 18 deletions(-) (limited to 'src/compiler/scala/tools/nsc/doc') 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
Implicitly
-
    - { tpl.conversions.map(conv =>
  1. { "by " + conv.conversionShortName }
  2. ) } +
      { + tpl.conversions.map { conv => + val name = conv.conversionQualifiedName + val hide = universe.settings.hiddenImplicits(name) +
    1. { "by " + conv.conversionShortName }
    2. + } + }
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 } -- cgit v1.2.3