@@ -14,7 +14,6 @@ import java.nio.file.Path
14
14
import java .nio .file .Files
15
15
import java .io .File
16
16
import dotty .dokka .translators .FilterAttributes
17
- import com .fasterxml .jackson .databind .ObjectMapper
18
17
19
18
enum Resource (val path : String ):
20
19
case Text (override val path : String , content : String ) extends Resource (path)
@@ -24,10 +23,9 @@ enum Resource(val path: String):
24
23
25
24
trait Resources (using ctx : DocContext ) extends Locations , Writer :
26
25
private def dynamicJsData =
27
- // If data at any point will become more complex we should use a proper mapping
28
- val data : Map [String , Map [String , String ]] =
29
- Map (" filterDefaults" -> FilterAttributes .defaultValues)
30
- val str = new ObjectMapper ().writeValueAsString(data.transform((_, v) => v.asJava).asJava)
26
+ val str = jsonObject(" filterDefaults" -> jsonObject(
27
+ FilterAttributes .defaultValues.toSeq.map { case (n, v) => n -> jsonString(v) }:_*
28
+ ))
31
29
Resource .Text (" scripts/data.js" , s " var scala3DocData = $str" )
32
30
33
31
private def scala3docVersionFile = Resource .Text (" scala3doc.version" , BuildInfo .version)
@@ -87,17 +85,6 @@ trait Resources(using ctx: DocContext) extends Locations, Writer:
87
85
val searchDataPath = " scripts/searchData.js"
88
86
val memberResourcesPaths = Seq (searchDataPath) ++ memberResources.map(_.path)
89
87
90
- case class PageEntry (
91
- dri : DRI ,
92
- name : String ,
93
- text : String ,
94
- descr : String ,
95
- ):
96
- // for jackson
97
- def getL : String = absolutePath(dri)
98
- def getN : String = name
99
- def getT : String = text
100
- def getD : String = descr
101
88
102
89
def searchData (pages : Seq [Page ]) =
103
90
def flattenToText (signature : Signature ): String =
@@ -106,28 +93,34 @@ trait Resources(using ctx: DocContext) extends Locations, Writer:
106
93
case s : String => s
107
94
}.mkString
108
95
109
- def processPage (page : Page ): Seq [PageEntry ] =
96
+ def mkEntry (dri : DRI , name : String , text : String , descr : String ) = jsonObject(
97
+ " l" -> jsonString(absolutePath(dri)),
98
+ " n" -> jsonString(name),
99
+ " t" -> jsonString(text),
100
+ " d" -> jsonString(descr)
101
+ )
102
+
103
+ def processPage (page : Page ): Seq [JSON ] =
110
104
val res = page.content match
111
105
case m : Member =>
112
106
val descr = m.dri.asFileLocation
113
- def processMember (member : Member ): Seq [PageEntry ] =
107
+ def processMember (member : Member ): Seq [JSON ] =
114
108
val signatureBuilder = ScalaSignatureProvider .rawSignature(member, InlineSignatureBuilder ()).asInstanceOf [InlineSignatureBuilder ]
115
109
val sig = Signature (member.kind.name, " " ) ++ Seq (Link (member.name, member.dri)) ++ signatureBuilder.names.reverse
116
- val entry = PageEntry (member.dri, member.name, flattenToText(sig), descr)
110
+ val entry = mkEntry (member.dri, member.name, flattenToText(sig), descr)
117
111
val children = member
118
112
.membersBy(m => m.kind != dotty.dokka.model.api.Kind .Package && ! m.kind.isInstanceOf [Classlike ])
119
113
.filter(m => m.origin == Origin .RegularlyDefined && m.inheritedFrom.isEmpty)
120
114
Seq (entry) ++ children.flatMap(processMember)
121
115
122
116
processMember(m)
123
117
case _ =>
124
- Seq (PageEntry (page.link.dri, page.link.name, page.link.name, " " ))
118
+ Seq (mkEntry (page.link.dri, page.link.name, page.link.name, " " ))
125
119
126
120
res ++ page.children.flatMap(processPage)
127
121
128
- val entries = pages.flatMap(processPage).toArray
129
- val entriesText = new ObjectMapper ().writeValueAsString(entries)
130
- Resource .Text (searchDataPath, s " pages = $entriesText; " )
122
+ val entries = pages.flatMap(processPage)
123
+ Resource .Text (searchDataPath, s " pages = ${jsonList(entries)}; " )
131
124
132
125
133
126
def allResources (pages : Seq [Page ]): Seq [Resource ] = memberResources ++ Seq (
0 commit comments