@@ -8,6 +8,7 @@ import com.vladsch.flexmark.util.{ast => mdu, sequence}
8
8
import com .vladsch .flexmark .{ast => mda }
9
9
import com .vladsch .flexmark .formatter .Formatter
10
10
import com .vladsch .flexmark .util .options .MutableDataSet
11
+ import com .vladsch .flexmark .util .sequence .BasedSequence
11
12
12
13
import scala .quoted ._
13
14
import dotty .tools .scaladoc .tasty .comments .markdown .ExtendedFencedCodeBlock
@@ -25,7 +26,7 @@ case class Comment (
25
26
authors : List [DocPart ],
26
27
see : List [DocPart ],
27
28
result : Option [DocPart ],
28
- throws : SortedMap [ String , DocPart ],
29
+ throws : List [ DocPart ],
29
30
valueParams : SortedMap [String , DocPart ],
30
31
typeParams : SortedMap [String , DocPart ],
31
32
version : Option [DocPart ],
@@ -145,6 +146,16 @@ abstract class MarkupConversion[T](val repr: Repr)(using dctx: DocContext) {
145
146
}
146
147
}
147
148
149
+ def linkedExceptions (exceptions : SortedMap [String , T ]): List [DocPart ] = {
150
+ exceptions.map { (name, body) =>
151
+ val link : DocLink = resolveLink(name)
152
+ val merged = mergeLinkWithBody(link, body)
153
+ markupToDokka(merged)
154
+ }.toList
155
+ }
156
+
157
+ def mergeLinkWithBody (link : DocLink , body : T ): T
158
+
148
159
final def parse (preparsed : PreparsedComment ): Comment =
149
160
val markup = stringToMarkup(preparsed.body)
150
161
val body = markupToDokkaCommentBody(processSnippets(markup, preparsed))
@@ -154,7 +165,7 @@ abstract class MarkupConversion[T](val repr: Repr)(using dctx: DocContext) {
154
165
authors = filterEmpty(preparsed.authors).map(markupToDokka),
155
166
see = filterEmpty(preparsed.see).map(markupToDokka),
156
167
result = single(" @result" , preparsed.result).map(markupToDokka),
157
- throws = filterEmpty(preparsed.throws).view.mapValues(markupToDokka).to( SortedMap ),
168
+ throws = linkedExceptions( filterEmpty(preparsed.throws)),
158
169
valueParams = filterEmpty(preparsed.valueParams).view.mapValues(markupToDokka).to(SortedMap ),
159
170
typeParams = filterEmpty(preparsed.typeParams).view.mapValues(markupToDokka).to(SortedMap ),
160
171
version = single(" @version" , preparsed.version).map(markupToDokka),
@@ -201,6 +212,18 @@ class MarkdownCommentParser(repr: Repr)(using dctx: DocContext)
201
212
202
213
def processSnippets (root : mdu.Node , preparsed : PreparsedComment ): mdu.Node =
203
214
FlexmarkSnippetProcessor .processSnippets(root, Some (preparsed), snippetCheckingFunc(owner))
215
+
216
+ def mergeLinkWithBody (link : DocLink , body : mdu.Node ): mdu.Node = {
217
+ import dotty .tools .scaladoc .tasty .comments .markdown ._
218
+ val str = link match
219
+ case DocLink .ToURL (url) => url
220
+ case DocLink .ToDRI (dri, name) => name
221
+ case DocLink .UnresolvedDRI (query, msg) => query
222
+ val sequence = BasedSequence .EmptyBasedSequence ().append(str)
223
+ val node = new DocLinkNode (link, " " , sequence)
224
+ body.prependChild(node)
225
+ body
226
+ }
204
227
}
205
228
206
229
class WikiCommentParser (repr : Repr )(using DocContext )
@@ -259,3 +282,13 @@ class WikiCommentParser(repr: Repr)(using DocContext)
259
282
def processSnippets (root : wiki.Body , preparsed : PreparsedComment ): wiki.Body =
260
283
// Currently not supported
261
284
root
285
+
286
+ def mergeLinkWithBody (link : DocLink , body : wiki.Body ): wiki.Body =
287
+ val linkNode = wiki.Link (link, None )
288
+ val newBody = body match {
289
+ case wiki.Body (List (wiki.Paragraph (wiki.Chain (content)))) =>
290
+ val descr = wiki.Text (" " ) +: content
291
+ wiki.Body (List (wiki.Paragraph (wiki.Chain (linkNode +: descr))))
292
+ case _ => body
293
+ }
294
+ newBody
0 commit comments