@@ -6,7 +6,6 @@ import dotty.tools.scaladoc.{Signature => DSignature}
66import dotty .tools .scaladoc .Inkuire
77
88import scala .quoted ._
9- import scala .util .chaining ._
109
1110import SymOps ._
1211import NameNormalizer ._
@@ -101,135 +100,7 @@ trait ClassLikeSupport:
101100 deprecated = classDef.symbol.isDeprecated()
102101 )
103102
104- if summon[DocContext ].args.generateInkuire then {
105-
106- val classType : Inkuire .Type = classDef.asInkuire(Set .empty).asInstanceOf [Inkuire .Type ]
107-
108- def varName (t : Inkuire .TypeLike ): Option [String ] = t match {
109- case tpe : Inkuire .Type => Some (tpe.name.name)
110- case tl : Inkuire .TypeLambda => varName(tl.result)
111- case _ => None
112- }
113-
114- val variableNames : Set [String ] = classType.params.map(_.typ)
115- .flatMap(varName(_).toList).toSet
116-
117- val parents : Seq [Inkuire .Type ] = classDef.parents.map(_.asInkuire(variableNames).asInstanceOf [Inkuire .Type ])
118-
119- val isModule = classDef.symbol.flags.is(Flags .Module )
120-
121- if ! isModule then Inkuire .db = Inkuire .db.copy(types = Inkuire .db.types.updated(classType.itid.get, (classType, parents)))
122-
123- classDef.symbol.declaredTypes
124- .filter(viableSymbol)
125- .foreach {
126- case typeSymbol : Symbol if typeSymbol.flags.is(Flags .Opaque ) =>
127- val typ = typeSymbol.tree.asInkuire(variableNames)
128- if typ.isInstanceOf [Inkuire .Type ] then {
129- val t = typ.asInstanceOf [Inkuire .Type ]
130- Inkuire .db = Inkuire .db.copy(types = Inkuire .db.types.updated(t.itid.get, (t, Seq .empty)))
131- }
132- case typeSymbol : Symbol if ! typeSymbol.isClassDef =>
133- val typeDef = typeSymbol.tree.asInstanceOf [TypeDef ]
134- val typ = typeSymbol.tree.asInkuire(variableNames)
135- if typ.isInstanceOf [Inkuire .Type ] then {
136- val t = typ.asInstanceOf [Inkuire .Type ]
137- val rhsTypeLike = typeDef.rhs.asInkuire(variableNames)
138- Inkuire .db = Inkuire .db.copy(
139- typeAliases = Inkuire .db.typeAliases.updated(t.itid.get, rhsTypeLike),
140- types = Inkuire .db.types.updated(t.itid.get, (t, Seq .empty))
141- )
142- }
143- if typeDef.rhs.symbol.flags.is(Flags .JavaDefined ) then
144- val typJava = typeDef.rhs.asInkuire(variableNames)
145- if typJava.isInstanceOf [Inkuire .Type ] then {
146- val tJava = typJava.asInstanceOf [Inkuire .Type ]
147- Inkuire .db = Inkuire .db.copy(types = Inkuire .db.types.updated(tJava.itid.get, (tJava, Seq .empty)))
148- }
149- case _ =>
150- }
151-
152- def viableSymbol (s : Symbol ): Boolean =
153- ! s.flags.is(Flags .Private ) &&
154- ! s.flags.is(Flags .Protected ) &&
155- ! s.flags.is(Flags .Override ) &&
156- ! s.flags.is(Flags .Synthetic )
157-
158- classDef.symbol.declaredMethods
159- .filter(viableSymbol)
160- .tap { _.foreach { // Loop for implicit conversions
161- case implicitConversion : Symbol if implicitConversion.flags.is(Flags .Implicit )
162- && classDef.symbol.flags.is(Flags .Module )
163- && implicitConversion.owner.fullName == (" scala.Predef$" ) =>
164- val defdef = implicitConversion.tree.asInstanceOf [DefDef ]
165- val to = defdef.returnTpt.asInkuire(variableNames)
166- val from = defdef.paramss.flatMap(_.params).collectFirst {
167- case v : ValDef => v.tpt.asInkuire(variableNames)
168- }
169- (from, to) match
170- case (Some (from : Inkuire .Type ), to : Inkuire .Type ) => Inkuire .db = Inkuire .db.copy(implicitConversions = Inkuire .db.implicitConversions :+ (from.itid.get -> to))
171- case _ =>
172- case _ =>
173- }}
174- .tap { _.foreach { // Loop for functions and vals
175- case methodSymbol : Symbol =>
176- val defdef = methodSymbol.tree.asInstanceOf [DefDef ]
177- val methodVars = defdef.paramss.flatMap(_.params).collect {
178- case TypeDef (name, _) => name
179- }
180- val vars = variableNames ++ methodVars
181- val receiver : Option [Inkuire .TypeLike ] =
182- Some (classType)
183- .filter(_ => ! isModule)
184- .orElse(methodSymbol.extendedSymbol.flatMap(s => partialAsInkuire(vars).lift(s.tpt)))
185- val sgn = Inkuire .ExternalSignature (
186- signature = Inkuire .Signature (
187- receiver = receiver,
188- arguments = methodSymbol.nonExtensionTermParamLists.collect {
189- case tpc@ TermParamClause (params) if ! tpc.isImplicit && ! tpc.isGiven => params // TODO [Inkuire] Implicit parameters
190- }.flatten.map(_.tpt.asInkuire(vars)),
191- result = defdef.returnTpt.asInkuire(vars),
192- context = Inkuire .SignatureContext (
193- vars = vars.toSet,
194- constraints = Map .empty // TODO [Inkuire] Type bounds
195- )
196- ),
197- name = methodSymbol.name,
198- packageName = methodSymbol.dri.location,
199- uri = methodSymbol.dri.externalLink.getOrElse(" " ),
200- entryType = " def"
201- )
202- val curriedSgn = sgn.copy(signature = Inkuire .curry(sgn.signature))
203- Inkuire .db = Inkuire .db.copy(functions = Inkuire .db.functions :+ curriedSgn)
204- }}
205-
206- classDef.symbol.declaredFields
207- .filter(viableSymbol)
208- .foreach {
209- case valSymbol : Symbol =>
210- val valdef = valSymbol.tree.asInstanceOf [ValDef ]
211- val receiver : Option [Inkuire .TypeLike ] =
212- Some (classType)
213- .filter(_ => ! isModule)
214- val sgn = Inkuire .ExternalSignature (
215- signature = Inkuire .Signature (
216- receiver = receiver,
217- arguments = Seq .empty,
218- result = valdef.tpt.asInkuire(variableNames),
219- context = Inkuire .SignatureContext (
220- vars = variableNames.toSet,
221- constraints = Map .empty // TODO [Inkuire] Type bounds
222- )
223- ),
224- name = valSymbol.name,
225- packageName = valSymbol.dri.location,
226- uri = valSymbol.dri.externalLink.getOrElse(" " ),
227- entryType = " val"
228- )
229- val curriedSgn = sgn.copy(signature = Inkuire .curry(sgn.signature))
230- Inkuire .db = Inkuire .db.copy(functions = Inkuire .db.functions :+ curriedSgn)
231- }
232- }
103+ if summon[DocContext ].args.generateInkuire then doInkuireStuff(classDef)
233104
234105 if signatureOnly then baseMember else baseMember.copy(
235106 members = classDef.extractPatchedMembers.sortBy(m => (m.name, m.kind.name)),
0 commit comments