@@ -19,6 +19,7 @@ import java.io.ByteArrayOutputStream
19
19
import java .io .PrintStream
20
20
import scala .io .Codec
21
21
import java .net .URL
22
+ import scala .util .Try
22
23
23
24
type CompilerContext = dotty.tools.dotc.core.Contexts .Context
24
25
@@ -94,23 +95,69 @@ case class DocContext(args: Scala3doc.Args, compilerContext: CompilerContext)
94
95
sourceLinks
95
96
)(using compilerContext))
96
97
97
- val externalDocumentationLinks : List [Scala3docExternalDocumentationLink ] = List (
98
- Scala3docExternalDocumentationLink (
99
- List (raw " .*scala\/quoted.* " .r),
100
- new URL (" http://127.0.0.1:5500/scala3doc/output/scala3/" ),
101
- DocumentationKind .Scala3doc
102
- ).withPackageList(new URL (" http://127.0.0.1:5500/scala3doc/output/scala3/-scala%203/package-list" )),
103
- Scala3docExternalDocumentationLink (
104
- List (raw " .*java.* " .r),
105
- new URL (" https://docs.oracle.com/javase/8/docs/api/" ),
106
- DocumentationKind .Javadoc
107
- ).withPackageList(new URL (" https://docs.oracle.com/javase/8/docs/api/package-list" )),
108
- Scala3docExternalDocumentationLink (
109
- List (raw " .*scala.* " .r),
110
- new URL (" https://www.scala-lang.org/api/current/" ),
111
- DocumentationKind .Scaladoc
112
- )
113
- )
98
+ def parseDocTool (docTool : String ) = docTool match {
99
+ case " scaladoc" => Some (DocumentationKind .Scaladoc )
100
+ case " scala3doc" => Some (DocumentationKind .Scala3doc )
101
+ case " javadoc" => Some (DocumentationKind .Javadoc )
102
+ case other => None
103
+ }
104
+ val externalDocumentationLinks : List [Scala3docExternalDocumentationLink ] = args.externalMappings.filter(_.size >= 3 ).flatMap { mapping =>
105
+ val regexStr = mapping(0 )
106
+ val docTool = mapping(1 )
107
+ val urlStr = mapping(2 )
108
+ val packageListUrlStr = if mapping.size > 3 then Some (mapping(3 )) else None
109
+ val regex = Try (regexStr.r).toOption
110
+ val url = Try (URL (urlStr)).toOption
111
+ val packageListUrl = Try (packageListUrlStr.map(URL (_)))
112
+ .fold(
113
+ e => {
114
+ logger.warn(s " Wrong packageListUrl parameter in external mapping. Found ' $packageListUrlStr'. " +
115
+ s " Package list url will be omitted " )
116
+ None },
117
+ res => res
118
+ )
119
+
120
+ val parsedDocTool = parseDocTool(docTool)
121
+ val res = if regexStr.isEmpty then
122
+ logger.warn(s " Wrong regex parameter in external mapping. Found ' $regexStr'. Mapping will be omitted " )
123
+ None
124
+ else if url.isEmpty then
125
+ logger.warn(s " Wrong url parameter in external mapping. Found ' $urlStr'. Mapping will be omitted " )
126
+ None
127
+ else if parsedDocTool.isEmpty then
128
+ logger.warn(s " Wrong doc-tool parameter in external mapping. " +
129
+ s " Expected one of: 'scaladoc', 'scala3doc', 'javadoc'. Found:' $docTool'. Mapping will be omitted "
130
+ )
131
+ None
132
+ else
133
+ Some (
134
+ Scala3docExternalDocumentationLink (
135
+ List (regexStr.r),
136
+ URL (urlStr),
137
+ parsedDocTool.get,
138
+ packageListUrlStr.map(URL (_))
139
+ )
140
+ )
141
+ res
142
+ }
143
+
144
+ // val externalDocumentationLinks: List[Scala3docExternalDocumentationLink] = List(
145
+ // Scala3docExternalDocumentationLink(
146
+ // List(raw".*scala\/quoted.*".r),
147
+ // new URL("http://127.0.0.1:5500/scala3doc/output/scala3/"),
148
+ // DocumentationKind.Scala3doc
149
+ // ).withPackageList(new URL("http://127.0.0.1:5500/scala3doc/output/scala3/-scala%203/package-list")),
150
+ // Scala3docExternalDocumentationLink(
151
+ // List(raw".*java.*".r),
152
+ // new URL("https://docs.oracle.com/javase/8/docs/api/"),
153
+ // DocumentationKind.Javadoc
154
+ // ).withPackageList(new URL("https://docs.oracle.com/javase/8/docs/api/package-list")),
155
+ // Scala3docExternalDocumentationLink(
156
+ // List(raw".*scala.*".r),
157
+ // new URL("https://www.scala-lang.org/api/current/"),
158
+ // DocumentationKind.Scaladoc
159
+ // )
160
+ // )
114
161
115
162
override def getPluginsConfiguration : JList [DokkaConfiguration .PluginConfiguration ] =
116
163
JList ()
0 commit comments