Skip to content

Commit 3d54267

Browse files
authored
Merge pull request scala#10807 from som-snytt/scaladoc/phases
Restore plugins to Scaladoc
2 parents a55a64d + d9ac9da commit 3d54267

File tree

4 files changed

+46
-9
lines changed

4 files changed

+46
-9
lines changed

src/compiler/scala/tools/nsc/Global.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ class Global(var currentSettings: Settings, reporter0: Reporter)
735735

736736
protected def computePlatformPhases() = platform.platformPhases.foreach(p => addToPhasesSet(p, otherPhaseDescriptions(p.phaseName)))
737737

738-
// sequences the phase assembly
738+
// compute the order in which phases will run; subclasses may override the template methods used here.
739739
protected def computePhaseDescriptors: List[SubComponent] = {
740740
/* Allow phases to opt out of the phase assembly. */
741741
def cullPhases(phases: List[SubComponent]) = {

src/scaladoc/scala/tools/nsc/ScalaDoc.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ class ScalaDoc {
4141
else if (docSettings.showPlugins.value)
4242
reporter.warning(null, "Plugins are not available when using Scaladoc")
4343
else if (docSettings.showPhases.value)
44-
reporter.warning(null, "Phases are restricted when using Scaladoc")
44+
reporter.warning(null, s"Phases are restricted when using Scaladoc.\n${new DocFactory(reporter, docSettings).compiler.phaseDescriptions}")
4545
else if (docSettings.help.value || !hasFiles)
4646
reporter.echo(command.usageMsg)
4747
else
48-
try { new DocFactory(reporter, docSettings) document command.files }
48+
try new DocFactory(reporter, docSettings).document(command.files)
4949
catch {
5050
case ex @ FatalError(msg) =>
5151
if (docSettings.isDebug) ex.printStackTrace()

src/scaladoc/scala/tools/nsc/doc/DocParser.scala

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ package nsc
1515
package doc
1616

1717
import scala.reflect.internal.util._
18+
import scala.tools.nsc.backend.JavaPlatform
1819
import scala.tools.nsc.doc.DocParser.Parsed
1920
import scala.tools.nsc.reporters.{ConsoleReporter, Reporter}
2021

@@ -23,18 +24,24 @@ import scala.tools.nsc.reporters.{ConsoleReporter, Reporter}
2324
* otherwise cause the compiler to go haywire.
2425
*/
2526
class DocParser(settings: nsc.Settings, reporter: Reporter) extends Global(settings, reporter) with ScaladocGlobalTrait {
27+
self =>
2628
def this(settings: Settings) = this(settings, new ConsoleReporter(settings))
2729
def this() = this(new Settings(Console println _))
2830

2931
// the usual global initialization
3032
locally { new Run() }
3133

32-
override protected def computePhaseDescriptors: List[SubComponent] = {
33-
assert(phasesSet.isEmpty, "Scaladoc limits available phases")
34+
override protected def computeInternalPhases(): Unit = {
3435
phasesSet += syntaxAnalyzer
3536
phasesSet += terminal
36-
computePhaseAssembly()
3737
}
38+
override protected def computePluginPhases(): Unit = ()
39+
40+
override lazy val platform: ThisPlatform =
41+
new JavaPlatform {
42+
lazy val global: self.type = self
43+
override def platformPhases = Nil // used by computePlatformPhases
44+
}
3845

3946
/** Returns a list of `DocParser.Parseds`, which hold the DocDefs found
4047
* in the given code along with the surrounding trees.

src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package scala.tools.nsc
1414
package doc
1515

16+
import scala.tools.nsc.backend.JavaPlatform
1617
import scala.tools.nsc.reporters.Reporter
1718
import scala.tools.nsc.typechecker.MacroAnnotationNamers
1819

@@ -47,15 +48,44 @@ trait ScaladocGlobalTrait extends Global {
4748

4849
// takes a `Reporter`, not `FilteringReporter` for sbt compatibility
4950
class ScaladocGlobal(settings: doc.Settings, reporter: Reporter) extends Global(settings, reporter) with ScaladocGlobalTrait {
50-
override protected def computePhaseDescriptors: List[SubComponent] = {
51-
assert(phasesSet.isEmpty, "Scaladoc limits available phases")
51+
self =>
52+
override protected def computeInternalPhases(): Unit = {
5253
phasesSet += syntaxAnalyzer
5354
phasesSet += analyzer.namerFactory
5455
phasesSet += analyzer.packageObjects
5556
phasesSet += analyzer.typerFactory
57+
phasesSet += patmatSentinel
58+
phasesSet += erasureSentinel
5659
phasesSet += terminal
57-
computePhaseAssembly()
5860
}
61+
62+
override lazy val platform: ThisPlatform =
63+
new JavaPlatform {
64+
lazy val global: self.type = self
65+
override def platformPhases = Nil // used by computePlatformPhases
66+
}
67+
68+
// Placeholders for plugins who wish to declare runsBefore patmat or erasure.
69+
// A bit deceptive for plugins that run after them, as scaladoc ought to -Ystop-before:patmat
70+
lazy val patmatSentinel: SubComponent = new { val global = self } with SubComponent {
71+
val phaseName = "patmat"
72+
val runsAfter = "typer" :: Nil
73+
val runsRightAfter = None
74+
def newPhase(prev: Phase): Phase = new Phase(prev) {
75+
val name = phaseName
76+
def run() = ()
77+
}
78+
}
79+
lazy val erasureSentinel: SubComponent = new { val global = self } with SubComponent {
80+
val phaseName = "erasure"
81+
val runsAfter = "patmat" :: Nil
82+
val runsRightAfter = None
83+
def newPhase(prev: Phase): Phase = new Phase(prev) {
84+
val name = phaseName
85+
def run() = ()
86+
}
87+
}
88+
5989
override def createJavadoc = if (settings.docNoJavaComments.value) false else true
6090

6191
override lazy val analyzer =

0 commit comments

Comments
 (0)