Skip to content

Commit 6c1086c

Browse files
committed
Review CRs 2
1 parent ac9beef commit 6c1086c

File tree

4 files changed

+43
-34
lines changed

4 files changed

+43
-34
lines changed

scaladoc/src/dotty/tools/scaladoc/DocContext.scala

+1-7
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,7 @@ case class DocContext(args: Scaladoc.Args, compilerContext: CompilerContext):
7676

7777
lazy val snippetCompilerArgs = snippets.SnippetCompilerArgs.load(args.snippetCompiler, args.snippetCompilerDebug)(using compilerContext)
7878

79-
lazy val snippetChecker = snippets.SnippetChecker(
80-
args.classpath,
81-
args.bootclasspath,
82-
args.tastyFiles,
83-
compilerContext.settings.scalajs.value(using compilerContext),
84-
compilerContext.settings.usejavacp.value(using compilerContext)
85-
)
79+
lazy val snippetChecker = snippets.SnippetChecker(args)(using compilerContext)
8680

8781
lazy val staticSiteContext = args.docsRoot.map(path => StaticSiteContext(
8882
File(path).getAbsoluteFile(),

scaladoc/src/dotty/tools/scaladoc/snippets/SnippetChecker.scala

+11-10
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,28 @@ import java.io.File
77

88
import dotty.tools.io.AbstractFile
99
import dotty.tools.dotc.fromtasty.TastyFileUtil
10+
import dotty.tools.dotc.config.Settings._
11+
import dotty.tools.dotc.config.ScalaSettings
1012

11-
class SnippetChecker(val classpath: String, val bootclasspath: String, val tastyFiles: Seq[File], isScalajs: Boolean, useJavaCp: Boolean):
13+
class SnippetChecker(val args: Scaladoc.Args)(using cctx: CompilerContext):
14+
15+
// (val classpath: String, val bootclasspath: String, val tastyFiles: Seq[File], isScalajs: Boolean, useJavaCp: Boolean):
1216
private val sep = System.getProperty("path.separator")
1317

1418
private val fullClasspath = List(
15-
tastyFiles
19+
args.tastyFiles
1620
.map(_.getAbsolutePath())
1721
.map(AbstractFile.getFile(_))
1822
.flatMap(t => try { TastyFileUtil.getClassPath(t) } catch { case e: AssertionError => Seq() })
1923
.distinct.mkString(sep),
20-
classpath
24+
args.classpath
2125
).mkString(sep)
2226

23-
private val scalacOptions = Seq(
24-
Option.when(!fullClasspath.isEmpty)("-cp " + fullClasspath),
25-
Option.when(!bootclasspath.isEmpty)("-bootclasspath " + bootclasspath),
26-
Option.when(isScalajs)("-scalajs"),
27-
Option.when(useJavaCp)("-usejavacp")
28-
).flatten.mkString(" ")
27+
private val snippetCompilerSettings: Seq[SnippetCompilerSetting[_]] = cctx.settings.userSetSettings(cctx.settingsState).map( s =>
28+
SnippetCompilerSetting(s, s.valueIn(cctx.settingsState))
29+
) :+ SnippetCompilerSetting(cctx.settings.classpath, fullClasspath)
2930

30-
private val compiler: SnippetCompiler = SnippetCompiler(scalacOptions = scalacOptions)
31+
private val compiler: SnippetCompiler = SnippetCompiler(snippetCompilerSettings = snippetCompilerSettings)
3132

3233
// These constants were found empirically to make snippet compiler
3334
// report errors in the same position as main compiler.

scaladoc/src/dotty/tools/scaladoc/snippets/SnippetCompiler.scala

+23-17
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ package dotty.tools.scaladoc
22
package snippets
33

44
import dotty.tools.io.{AbstractFile, VirtualDirectory}
5-
import dotty.tools.dotc.interactive.InteractiveDriver
6-
import dotty.tools.dotc.interactive.Interactive
7-
import dotty.tools.dotc.interactive.InteractiveCompiler
5+
import dotty.tools.dotc.Driver
86
import dotty.tools.dotc.core.Contexts.Context
7+
import dotty.tools.dotc.core.Mode
98
import dotty.tools.dotc.config.Settings.Setting._
109
import dotty.tools.dotc.interfaces.SourcePosition
1110
import dotty.tools.dotc.ast.Trees.Tree
@@ -21,21 +20,28 @@ import dotty.tools.dotc.interfaces.Diagnostic._
2120
import scala.util.{ Try, Success, Failure }
2221

2322
class SnippetCompiler(
24-
val scalacOptions: String,
23+
val snippetCompilerSettings: Seq[SnippetCompilerSetting[_]],
24+
val scalacOptions: String = "",
2525
target: AbstractFile = new VirtualDirectory("(memory)")
2626
):
2727

28-
private def newDriver: InteractiveDriver = {
29-
val defaultFlags =
30-
List("-color:never", "-unchecked", "-deprecation", "-Ximport-suggestion-timeout", "0")
31-
val options = scalacOptions.split("\\s+").toList
32-
val settings =
33-
options ::: defaultFlags ::: Nil
34-
35-
new InteractiveDriver(settings)
36-
}
37-
38-
private val driver = newDriver
28+
object SnippetDriver extends Driver:
29+
val currentCtx =
30+
val rootCtx = initCtx.fresh.addMode(Mode.ReadPositions).addMode(Mode.Interactive)
31+
rootCtx.setSetting(rootCtx.settings.YretainTrees, true)
32+
rootCtx.setSetting(rootCtx.settings.YcookComments, true)
33+
rootCtx.setSetting(rootCtx.settings.YreadComments, true)
34+
val defaultFlags =
35+
List("-color:never", "-unchecked", "-deprecation", "-Ximport-suggestion-timeout", "0")
36+
val options = scalacOptions.split("\\s+").toList
37+
val settings = options ::: defaultFlags ::: Nil
38+
val ctx = setup(settings.toArray, rootCtx) match
39+
case Some((_, ctx)) => ctx
40+
case None => rootCtx
41+
ctx.initialize()(using ctx)
42+
snippetCompilerSettings.foldLeft(ctx.fresh) { (ctx, setting) =>
43+
ctx.setSetting(setting.setting, setting.value)
44+
}
3945

4046
private val scala3Compiler = new Compiler
4147

@@ -85,9 +91,9 @@ class SnippetCompiler(
8591
wrappedSnippet: WrappedSnippet,
8692
arg: SnippetCompilerArg
8793
): SnippetCompilationResult = {
88-
val context = driver.currentCtx.fresh
94+
val context = SnippetDriver.currentCtx.fresh
8995
.setSetting(
90-
driver.currentCtx.settings.outputDir,
96+
SnippetDriver.currentCtx.settings.outputDir,
9197
target
9298
)
9399
.setReporter(new StoreReporter)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package dotty.tools.scaladoc
2+
package snippets
3+
4+
import dotty.tools.scaladoc.DocContext
5+
import dotty.tools.dotc.config.Settings._
6+
import dotty.tools.dotc.config.ScalaSettings
7+
8+
case class SnippetCompilerSetting[T](setting: Setting[T], value: T)

0 commit comments

Comments
 (0)