Skip to content

Commit 10ff05d

Browse files
committed
Hide inkuire generation under flags
1 parent 98a7e90 commit 10ff05d

File tree

5 files changed

+68
-154
lines changed

5 files changed

+68
-154
lines changed

scaladoc/src/dotty/tools/scaladoc/Inkuire.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import dotty.tools.scaladoc.util._
44

55
object Inkuire {
66

7-
var db = InkuireDb(Seq.empty, Map.empty)
7+
var db = InkuireDb(Seq.empty, Map.empty) //TODO forgive me :(
88

99
case class InkuireDb(
1010
functions: Seq[ExternalSignature],

scaladoc/src/dotty/tools/scaladoc/Scaladoc.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,17 @@ object Scaladoc:
7979

8080
}
8181

82-
println(s"Types: ${Inkuire.db.types.size}")
83-
println(s"Functions: ${Inkuire.db.functions.size}")
84-
dumpDB(Inkuire.db)
82+
if summon[DocContext].generateInkuire then dumpInkuireDB()
8583

8684
ctx.reporter
8785

88-
def dumpDB(db: InkuireDb) = {
89-
val file = new File("/home/kkorban/Inkuire/data/db.json")
86+
def dumpInkuireDB() = {
87+
println(s"Types: ${Inkuire.db.types.size}")
88+
println(s"Functions: ${Inkuire.db.functions.size}")
89+
val file = new File("./inkuire-db.json")
9090
file.createNewFile()
91-
val myWriter = new FileWriter("/home/kkorban/Inkuire/data/db.json", false)
92-
myWriter.write(s"${EngineModelSerializers.serialize(db)}")
91+
val myWriter = new FileWriter("./inkuire-db.json", false)
92+
myWriter.write(s"${EngineModelSerializers.serialize(Inkuire.db)}")
9393
myWriter.close()
9494
}
9595

scaladoc/src/dotty/tools/scaladoc/ScaladocSettings.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,9 @@ class ScaladocSettings extends SettingGroup with CommonScalaSettings:
9494

9595
val YdocumentSyntheticTypes: Setting[Boolean] =
9696
BooleanSetting("-Ydocument-synthetic-types", "Documents intrinsic types e. g. Any, Nothing. Setting is useful only for stdlib", false)
97+
98+
val inkuire: Setting[Boolean] =
99+
BooleanSetting("-inkuire", "Allows searching the scaladoc with Hoogle like queries", false)
100+
101+
val generateInkuire: Settings[Boolean] =
102+
BooleanSetting("-genarate-inkuire", "Generates InkuireDB", false)

scaladoc/src/dotty/tools/scaladoc/tasty/ClassLikeSupport.scala

Lines changed: 40 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -94,143 +94,54 @@ trait ClassLikeSupport:
9494
deprecated = classDef.symbol.isDeprecated()
9595
)
9696

97-
//
97+
if summon[DocContext].generateInkuire then {
9898

99-
/**
100-
* Stuff the doesn't work yet:
101-
* - Type parameters work in types but don't work in parents and in types that are arguments or results of functions
102-
* - Extension functions
103-
* - Inheritance of special types (Any, AnyVal, AnyRef, Nothing, ...)
104-
* - SYNTAX!!! <- that's in Inkuire e.g. tuples, different arrows, different parentheses with type params, different constraint syntax
105-
* - Type param constraints
106-
*/
99+
/**
100+
* Stuff the doesn't work yet:
101+
* - Type parameters work in types but don't work in parents and in types that are arguments or results of functions
102+
* - Extension functions
103+
* - Inheritance of special types (Any, AnyVal, AnyRef, Nothing, ...)
104+
* - SYNTAX!!! <- that's in Inkuire e.g. tuples, different arrows, different parentheses with type params, different constraint syntax
105+
* - Type param constraints
106+
*/
107107

108-
//
108+
val classType = classDef.asInkuire(Set.empty, true)
109+
val variableNames = classType.params.map(_.typ.name.name).toSet
109110

110-
val classType = classDef.asInkuire(Set.empty, true)
111-
val variableNames = classType.params.map(_.typ.name.name).toSet //TODO pass further
111+
val parents = classDef.parents.map(_.asInkuire(variableNames, false))
112112

113-
val parents = classDef.parents.map(_.asInkuire(variableNames, false))
113+
val isModule = classDef.symbol.flags.is(Flags.Module)
114114

115-
val isModule = classDef.symbol.flags.is(Flags.Module)
115+
if !isModule then Inkuire.db = Inkuire.db.copy(types = Inkuire.db.types.updated(classType.itid.get, (classType, parents)))
116116

117-
if !isModule then Inkuire.db = Inkuire.db.copy(types = Inkuire.db.types.updated(classType.itid.get, (classType, parents)))
117+
val methods = classDef.symbol.declaredMethods.collect {
118+
case methodSymbol: Symbol =>
119+
val defdef = methodSymbol.tree.asInstanceOf[DefDef]
120+
val methodVars = defdef.paramss.flatMap(_.params).collect {
121+
case TypeDef(name, _) => name
122+
}
123+
val vars = variableNames ++ methodVars
124+
Inkuire.ExternalSignature(
125+
signature = Inkuire.Signature(
126+
receiver = Some(classType).filter(_ => !isModule),
127+
arguments = defdef.paramss.flatMap(_.params).collect {
128+
case ValDef(_, tpe, _) => tpe.asInkuire(vars, false)
129+
},
130+
result = defdef.returnTpt.asInkuire(vars, false),
131+
context = Inkuire.SignatureContext(
132+
vars = vars.toSet,
133+
constraints = Map.empty //TODO for future
134+
)
135+
),
136+
name = methodSymbol.name,
137+
packageName = methodSymbol.dri.location,
138+
uri = methodSymbol.dri.externalLink.getOrElse("")
139+
)
140+
}
118141

119-
val methods = classDef.symbol.declaredMethods.collect {
120-
case methodSymbol: Symbol =>
121-
val defdef = methodSymbol.tree.asInstanceOf[DefDef]
122-
val methodVars = defdef.paramss.flatMap(_.params).collect {
123-
case TypeDef(name, _) => name
124-
}
125-
val vars = variableNames ++ methodVars
126-
Inkuire.ExternalSignature(
127-
signature = Inkuire.Signature(
128-
receiver = Some(classType).filter(_ => !isModule),
129-
arguments = defdef.paramss.flatMap(_.params).collect {
130-
case ValDef(_, tpe, _) => tpe.asInkuire(vars, false)
131-
},
132-
result = defdef.returnTpt.asInkuire(vars, false),
133-
context = Inkuire.SignatureContext(
134-
vars = vars.toSet,
135-
constraints = Map.empty //TODO for the future
136-
)
137-
),
138-
name = methodSymbol.name,
139-
packageName = methodSymbol.dri.location,
140-
uri = methodSymbol.dri.externalLink.getOrElse("")
141-
)
142-
}
142+
Inkuire.db = Inkuire.db.copy(functions = Inkuire.db.functions ++ methods)
143143

144-
Inkuire.db = Inkuire.db.copy(functions = Inkuire.db.functions ++ methods)
145-
146-
//
147-
148-
// def typeParamsToInkuire(typeParams: Seq[TypeParameter], vars: Seq[String], isVariable: Boolean): Seq[Inkuire.Variance] = {
149-
// typeParams.map { p =>
150-
// val t = Inkuire.Type(
151-
// name = Inkuire.TypeName(p.name),
152-
// itid = Some(Inkuire.ITID(p.dri.symbolUUID, isParsed = false)),
153-
// isVariable = vars.contains(p.name) || isVariable,
154-
// params = Seq.empty //TODO not there
155-
// )
156-
// p.variance match {
157-
// case "" => Inkuire.Invariance(t)
158-
// case "+" => Inkuire.Covariance(t)
159-
// case "-" => Inkuire.Contravariance(t)
160-
// }
161-
// }
162-
// }
163-
164-
// def paramsFromKind(kind: Kind, vars: Seq[String], isVariable: Boolean): Seq[Inkuire.Variance] = kind match {
165-
// case Kind.Class(typeParams, _) => typeParamsToInkuire(typeParams, vars, isVariable)
166-
// case Kind.Trait(typeParams, _) => typeParamsToInkuire(typeParams, vars, isVariable)
167-
// case Kind.Enum(typeParams, _) => typeParamsToInkuire(typeParams, vars, isVariable)
168-
// case _ => Seq.empty
169-
// }
170-
171-
// val typeITID = Inkuire.ITID(classDef.symbol.dri.symbolUUID, isParsed = false)
172-
// val params = paramsFromKind(baseMember.kind, Seq.empty, true)
173-
// val variablesNames = params.map(_.typ.name.name)
174-
// val baseType = Inkuire.Type(
175-
// name = Inkuire.TypeName(classDef.symbol.name),
176-
// itid = Some(typeITID),
177-
// params = params
178-
// )
179-
// val parents = classDef.getParentsAsLinkToTypes.map {
180-
// case l: LinkToType if l.signature.exists(_.isInstanceOf[Link]) =>
181-
// val link = l.signature.filter(_.isInstanceOf[Link]).head.asInstanceOf[Link]
182-
// if baseType.name.name == "Seq" then {
183-
// println(link.name)
184-
// println(l.kind)
185-
// }
186-
// Inkuire.Type(
187-
// name = Inkuire.TypeName(link.name),
188-
// itid = Some(Inkuire.ITID(link.dri.symbolUUID, isParsed = false)),
189-
// params = paramsFromKind(l.kind, variablesNames, false)
190-
// )
191-
// }
192-
// val isModule = baseMember.kind match {
193-
// case Kind.Object | Kind.Package | Kind.RootPackage => true
194-
// case _ => false
195-
// }
196-
// if !isModule then Inkuire.db = Inkuire.db.copy(types = Inkuire.db.types.updated(typeITID, (baseType, parents)))
197-
// val methods: Seq[Inkuire.ExternalSignature] = classDef.membersToDocument.flatMap(parseMember(classDef)).collect {
198-
// case m: Member if m.kind.isInstanceOf[Kind.Def] && m.signature.exists(_.isInstanceOf[Link]) =>
199-
// val kind: Kind.Def = m.kind.asInstanceOf[Kind.Def]
200-
// val resultLink = m.signature.filter(_.isInstanceOf[Link]).head.asInstanceOf[Link]
201-
// val typeParamNames = variablesNames ++ kind.typeParams.map(p => p.name)
202-
// val function = Inkuire.ExternalSignature(
203-
// signature = Inkuire.Signature(
204-
// receiver = Some(baseType).filter(_ => !isModule),
205-
// arguments = kind.argsLists.flatMap(_.parameters).flatMap(_.signature).collect {
206-
// case l: Link =>
207-
// Inkuire.Type(
208-
// name = Inkuire.TypeName(l.name),
209-
// itid = Some(Inkuire.ITID(l.dri.symbolUUID, isParsed = false)),
210-
// isVariable = typeParamNames.contains(l.name),
211-
// params = Seq.empty //TODO not there
212-
// )
213-
// },
214-
// result = Inkuire.Type(
215-
// name = Inkuire.TypeName(resultLink.name),
216-
// itid = Some(Inkuire.ITID(resultLink.dri.symbolUUID, isParsed = false)),
217-
// isVariable = typeParamNames.contains(resultLink.name),
218-
// params = Seq.empty //TODO not there
219-
// ),
220-
// context = Inkuire.SignatureContext(
221-
// vars = typeParamNames.toSet,
222-
// constraints = Map.empty //TODO for the future
223-
// )
224-
// ),
225-
// name = m.name,
226-
// packageName = classDef.symbol.dri.location,
227-
// uri = m.dri.externalLink.getOrElse("")
228-
// )
229-
// function
230-
// }
231-
// Inkuire.db = Inkuire.db.copy(functions = Inkuire.db.functions ++ methods)
232-
233-
//
144+
}
234145

235146
if signatureOnly then baseMember else baseMember.copy(
236147
members = classDef.extractPatchedMembers,

scaladoc/src/dotty/tools/scaladoc/tasty/InkuireSupport.scala

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ trait InkuireSupport:
4848
name = Inkuire.TypeName(normalizedName),
4949
itid = argument.symbol.itid,
5050
isVariable = vars.contains(normalizedName) || isVariable,
51-
params = Seq.empty //TODO not there
51+
params = Seq.empty //TODO in future arities of params will be needed
5252
)
5353
if argument.symbol.flags.is(Flags.Covariant) then Inkuire.Covariance(t)
5454
else if argument.symbol.flags.is(Flags.Contravariant) then Inkuire.Contravariance(t)
@@ -69,32 +69,31 @@ trait InkuireSupport:
6969
case _ => false
7070

7171
private def inner(tp: TypeRepr, vars: Set[String]): Inkuire.Type = tp match
72-
case OrType(left, right) => inner(left, vars) //TODO future
73-
case AndType(left, right) => inner(left, vars) //TODO future
72+
case OrType(left, right) => inner(left, vars) //TODO for future
73+
case AndType(left, right) => inner(left, vars) //TODO for future
7474
case ByNameType(tpe) => inner(tpe, vars)
7575
case ConstantType(constant) =>
76-
??? //TODO
76+
??? //TODO for future, kinda
7777
case ThisType(tpe) => inner(tpe, vars)
7878
case AnnotatedType(AppliedType(_, Seq(tpe)), annotation) if isRepeatedAnnotation(annotation) =>
79-
inner(tpe, vars) //TODO future
79+
inner(tpe, vars) //TODO for future
8080
case AppliedType(repeatedClass, Seq(tpe)) if isRepeated(repeatedClass) =>
81-
inner(tpe, vars) //TODO future
81+
inner(tpe, vars) //TODO for future
8282
case AnnotatedType(tpe, _) =>
8383
inner(tpe, vars)
8484
case tl @ TypeLambda(params, paramBounds, resType) =>
8585
if resType.typeSymbol.name == "Seq" then println(resType)
86-
inner(resType, vars) //TODO future
86+
inner(resType, vars) //TODO for future
8787
case r: Refinement =>
88-
inner(r.info, vars) //TODO future
88+
inner(r.info, vars) //TODO for future
8989
case t @ AppliedType(tpe, typeList) =>
9090
import dotty.tools.dotc.util.Chars._
9191
if !t.typeSymbol.name.forall(isIdentifierPart) && typeList.size == 2 then
9292
inner(typeList.head, vars)
9393
else if t.isFunctionType then
9494
typeList match
9595
case Nil =>
96-
//Not possible right?
97-
???
96+
??? //Not possible right?
9897
case args =>
9998
val name = s"Function${args.size-1}"
10099
Inkuire.Type(
@@ -105,8 +104,7 @@ trait InkuireSupport:
105104
else if t.isTupleType then
106105
typeList match
107106
case Nil =>
108-
//TODO Not possible right?
109-
???
107+
??? //TODO Not possible right?
110108
case args =>
111109
val name = s"Tuple${args.size}"
112110
Inkuire.Type(
@@ -117,8 +115,7 @@ trait InkuireSupport:
117115
else
118116
inner(tpe, vars).copy(
119117
params = typeList.map(p => Inkuire.Invariance(inner(p, vars)))
120-
) //TODO ?????
121-
// inner(tpe, vars)
118+
) //TODO check if it's ok (Having resolver should mean that variance here isn't meaningful)
122119
case tp: TypeRef =>
123120
Inkuire.Type(
124121
name = Inkuire.TypeName(tp.name),
@@ -129,18 +126,18 @@ trait InkuireSupport:
129126
case tr @ TermRef(qual, typeName) =>
130127
inner(qual, vars)
131128
case TypeBounds(low, hi) =>
132-
inner(low, vars) //TODO
129+
inner(low, vars) //TODO for future
133130
case NoPrefix() =>
134131
??? //TODO not possible right?
135132
case MatchType(bond, sc, cases) =>
136133
inner(sc, vars)
137134
case ParamRef(TypeLambda(names, _, resType), i) =>
138135
Inkuire.Type(
139136
name = Inkuire.TypeName(names(i)),
140-
itid = Some(Inkuire.ITID(s"external-itid-${names(i)}", isParsed = false)), //TODO try doing actual UUID generation?
137+
itid = Some(Inkuire.ITID(s"external-itid-${names(i)}", isParsed = false)), //TODO check if it's possible to get the actual ITID(DRI)
141138
isVariable = true
142139
)
143140
case ParamRef(m: MethodType, i) =>
144-
inner(m.paramTypes(i), vars) //TODO
141+
inner(m.paramTypes(i), vars)
145142
case RecursiveType(tp) =>
146143
inner(tp, vars)

0 commit comments

Comments
 (0)