Skip to content

Commit 34778d3

Browse files
committed
Allow to set scala compiler options on snipets. Use the extra scalacOptions in snippet compiler
1 parent 68396ca commit 34778d3

File tree

6 files changed

+31
-8
lines changed

6 files changed

+31
-8
lines changed

scaladoc/src/dotty/tools/scaladoc/site/templates.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ case class TemplateFile(
8181
val path = Some(Paths.get(file.getAbsolutePath))
8282
val pathBasedArg = ssctx.snippetCompilerArgs.get(path)
8383
val sourceFile = dotty.tools.dotc.util.SourceFile(dotty.tools.io.AbstractFile.getFile(path.get), scala.io.Codec.UTF8)
84-
(str: String, lineOffset: SnippetChecker.LineOffset, argOverride: Option[SCFlags]) => {
85-
val arg = argOverride.fold(pathBasedArg)(pathBasedArg.overrideFlag(_))
84+
(str: String, lineOffset: SnippetChecker.LineOffset, argOverride: Option[SnippetCompilerArg]) => {
85+
val arg = argOverride.fold(pathBasedArg)(pathBasedArg.merge(_))
8686
val compilerData = SnippetCompilerData(
8787
"staticsitesnippet",
8888
SnippetCompilerData.Position(configOffset - 1, 0)

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ object FlexmarkSnippetProcessor:
2121
val lineOffset = node.getStartLineNumber + preparsed.fold(0)(_.strippedLinesBeforeNo)
2222
val info = node.getInfo.toString.split(" ")
2323
if info.contains("scala") then {
24-
val argOverride = info
24+
val flagOverride = info
2525
.find(_.startsWith("sc:"))
2626
.map(_.stripPrefix("sc:"))
2727
.map(SCFlagsParser.parse)
@@ -34,6 +34,19 @@ object FlexmarkSnippetProcessor:
3434
)
3535
None
3636
})
37+
38+
val scalacOptions = info
39+
.filter(_.startsWith("sc-opts:"))
40+
.map(_.stripPrefix("sc-opts:"))
41+
.toSeq
42+
43+
val argOverride: Option[SnippetCompilerArg] =
44+
(flagOverride, scalacOptions) match {
45+
case (None, Seq()) => None
46+
case (Some(flag), opts) => Some(SnippetCompilerArg(flag, opts))
47+
case (None, opts) => Some(SnippetCompilerArg(SCFlags.Compile, opts))
48+
}
49+
3750
val id = info
3851
.find(_.startsWith("sc-name:"))
3952
.map(_.stripPrefix("sc-name:"))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,4 @@ class SnippetChecker(val args: Scaladoc.Args)(using cctx: CompilerContext):
5959

6060
object SnippetChecker:
6161
type LineOffset = Int
62-
type SnippetCheckingFunc = (String, LineOffset, Option[SCFlags]) => Option[SnippetCompilationResult]
62+
type SnippetCheckingFunc = (String, LineOffset, Option[SnippetCompilerArg]) => Option[SnippetCompilationResult]

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,19 @@ class SnippetCompiler(
100100
arg: SnippetCompilerArg,
101101
sourceFile: SourceFile
102102
): SnippetCompilationResult = {
103-
val context = SnippetDriver.currentCtx.fresh
103+
val baseContext = SnippetDriver.currentCtx.fresh
104104
.setSetting(
105105
SnippetDriver.currentCtx.settings.outputDir,
106106
target
107107
)
108108
.setReporter(new StoreReporter)
109+
val context =
110+
if arg.scalacOptions.isEmpty then baseContext
111+
else
112+
val args = arg.scalacOptions.toArray
113+
SnippetDriver.setup(args, baseContext) match
114+
case Some((_, ctx)) => ctx
115+
case None => baseContext
109116
val run = newRun(using context)
110117
run.compileFromStrings(List(wrappedSnippet.snippet))
111118

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ package snippets
33

44
import java.nio.file.Path
55

6-
case class SnippetCompilerArg(flag: SCFlags):
6+
case class SnippetCompilerArg(flag: SCFlags, scalacOptions: Seq[String] = Seq.empty):
77
def overrideFlag(f: SCFlags): SnippetCompilerArg = copy(flag = f)
8+
def withScalacOptions(opts: Seq[String]): SnippetCompilerArg = copy(scalacOptions = scalacOptions ++ opts)
9+
def merge(other: SnippetCompilerArg): SnippetCompilerArg =
10+
SnippetCompilerArg(other.flag, scalacOptions ++ other.scalacOptions)
811

912
enum SCFlags(val flagName: String):
1013
case Compile extends SCFlags("compile")

scaladoc/src/dotty/tools/scaladoc/tasty/comments/Comments.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ abstract class MarkupConversion[T](val repr: Repr)(using dctx: DocContext) {
137137
val scDataCollector = SnippetCompilerDataCollector[qctx.type](qctx)
138138
val data = scDataCollector.getSnippetCompilerData(s, s)
139139
val sourceFile = scDataCollector.getSourceFile(s)
140-
(str: String, lineOffset: SnippetChecker.LineOffset, argOverride: Option[SCFlags]) => {
141-
val arg = argOverride.fold(pathBasedArg)(pathBasedArg.overrideFlag(_))
140+
(str: String, lineOffset: SnippetChecker.LineOffset, argOverride: Option[SnippetCompilerArg]) => {
141+
val arg = argOverride.fold(pathBasedArg)(pathBasedArg.merge(_))
142142
val res = snippetChecker.checkSnippet(str, Some(data), arg, lineOffset, sourceFile)
143143
res.filter(r => !r.isSuccessful).foreach(_.reportMessages()(using compilerContext))
144144
res

0 commit comments

Comments
 (0)