@@ -14,7 +14,6 @@ import java.nio.file.Path
1414import java .nio .file .Files
1515import java .io .File
1616import dotty .dokka .translators .FilterAttributes
17- import com .fasterxml .jackson .databind .ObjectMapper
1817
1918enum Resource (val path : String ):
2019 case Text (override val path : String , content : String ) extends Resource (path)
@@ -24,10 +23,9 @@ enum Resource(val path: String):
2423
2524trait Resources (using ctx : DocContext ) extends Locations , Writer :
2625 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+ ))
3129 Resource .Text (" scripts/data.js" , s " var scala3DocData = $str" )
3230
3331 private def scala3docVersionFile = Resource .Text (" scala3doc.version" , BuildInfo .version)
@@ -87,17 +85,6 @@ trait Resources(using ctx: DocContext) extends Locations, Writer:
8785 val searchDataPath = " scripts/searchData.js"
8886 val memberResourcesPaths = Seq (searchDataPath) ++ memberResources.map(_.path)
8987
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
10188
10289 def searchData (pages : Seq [Page ]) =
10390 def flattenToText (signature : Signature ): String =
@@ -106,28 +93,34 @@ trait Resources(using ctx: DocContext) extends Locations, Writer:
10693 case s : String => s
10794 }.mkString
10895
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 ] =
110104 val res = page.content match
111105 case m : Member =>
112106 val descr = m.dri.asFileLocation
113- def processMember (member : Member ): Seq [PageEntry ] =
107+ def processMember (member : Member ): Seq [JSON ] =
114108 val signatureBuilder = ScalaSignatureProvider .rawSignature(member, InlineSignatureBuilder ()).asInstanceOf [InlineSignatureBuilder ]
115109 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)
117111 val children = member
118112 .membersBy(m => m.kind != dotty.dokka.model.api.Kind .Package && ! m.kind.isInstanceOf [Classlike ])
119113 .filter(m => m.origin == Origin .RegularlyDefined && m.inheritedFrom.isEmpty)
120114 Seq (entry) ++ children.flatMap(processMember)
121115
122116 processMember(m)
123117 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, " " ))
125119
126120 res ++ page.children.flatMap(processPage)
127121
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)}; " )
131124
132125
133126 def allResources (pages : Seq [Page ]): Seq [Resource ] = memberResources ++ Seq (
0 commit comments