@@ -12,47 +12,52 @@ trait MemberLookup {
1212 def lookupOpt (using QuoteContext )(
1313 query : Query ,
1414 ownerOpt : Option [qctx.reflect.Symbol ],
15- ): Option [(qctx.reflect.Symbol , String )] = {
16- import qctx .reflect ._
17-
18- def nearestClass (sym : Symbol ): Symbol =
19- if sym.isClassDef then sym else nearestClass(sym.owner)
20-
21- def nearestPackage (sym : Symbol ): Symbol =
22- if sym.flags.is(Flags .Package ) then sym else nearestPackage(sym.owner)
23-
24- def nearestMembered (sym : Symbol ): Symbol =
25- if sym.isClassDef || sym.flags.is(Flags .Package ) then sym else nearestMembered(sym.owner)
26-
27- val res =
28- ownerOpt match {
29- case Some (owner) =>
30- val nearest = nearestMembered(owner)
31- val nearestCls = nearestClass(owner)
32- val nearestPkg = nearestPackage(owner)
33- query match {
34- case Query .StrictMemberId (id) => localLookup(id, nearest).map(_ -> id)
35- case Query .Id (id) =>
36- (localLookup(id, nearest) orElse localLookup(id, nearestPkg)).map(_ -> id)
37- case Query .QualifiedId (Query .Qual .This , _, rest) =>
38- downwardLookup(rest.asList, nearestCls).map(_ -> rest.join)
39- case Query .QualifiedId (Query .Qual .Package , _, rest) =>
40- downwardLookup(rest.asList, nearestPkg).map(_ -> rest.join)
41- case Query .QualifiedId (Query .Qual .Id (id), _, rest) if id == nearestCls.name =>
42- downwardLookup(rest.asList, nearestCls).map(_ -> rest.join)
43- case Query .QualifiedId (Query .Qual .Id (id), _, rest) if id == nearestPkg.name =>
44- downwardLookup(rest.asList, nearestPkg).map(_ -> rest.join)
45- case query : Query .QualifiedId => downwardLookup(query.asList, defn.RootPackage ).map(_ -> query.join)
46- }
47-
48- case None =>
49- downwardLookup(query.asList, defn.RootPackage ).map(_ -> query.join)
50- }
51-
52- // println(s"looked up `$query` in ${owner.show}[${owner.flags.show}] as ${res.map(_.show)}")
53-
54- res
55- }
15+ ): Option [(qctx.reflect.Symbol , String )] =
16+ try
17+ import qctx .reflect ._
18+
19+ def nearestClass (sym : Symbol ): Symbol =
20+ if sym.isClassDef then sym else nearestClass(sym.owner)
21+
22+ def nearestPackage (sym : Symbol ): Symbol =
23+ if sym.flags.is(Flags .Package ) then sym else nearestPackage(sym.owner)
24+
25+ def nearestMembered (sym : Symbol ): Symbol =
26+ if sym.isClassDef || sym.flags.is(Flags .Package ) then sym else nearestMembered(sym.owner)
27+
28+ val res =
29+ ownerOpt match {
30+ case Some (owner) =>
31+ val nearest = nearestMembered(owner)
32+ val nearestCls = nearestClass(owner)
33+ val nearestPkg = nearestPackage(owner)
34+ query match {
35+ case Query .StrictMemberId (id) => localLookup(id, nearest).map(_ -> id)
36+ case Query .Id (id) =>
37+ (localLookup(id, nearest) orElse localLookup(id, nearestPkg)).map(_ -> id)
38+ case Query .QualifiedId (Query .Qual .This , _, rest) =>
39+ downwardLookup(rest.asList, nearestCls).map(_ -> rest.join)
40+ case Query .QualifiedId (Query .Qual .Package , _, rest) =>
41+ downwardLookup(rest.asList, nearestPkg).map(_ -> rest.join)
42+ case Query .QualifiedId (Query .Qual .Id (id), _, rest) if id == nearestCls.name =>
43+ downwardLookup(rest.asList, nearestCls).map(_ -> rest.join)
44+ case Query .QualifiedId (Query .Qual .Id (id), _, rest) if id == nearestPkg.name =>
45+ downwardLookup(rest.asList, nearestPkg).map(_ -> rest.join)
46+ case query : Query .QualifiedId => downwardLookup(query.asList, defn.RootPackage ).map(_ -> query.join)
47+ }
48+
49+ case None =>
50+ downwardLookup(query.asList, defn.RootPackage ).map(_ -> query.join)
51+ }
52+
53+ // println(s"looked up `$query` in ${owner.show}[${owner.flags.show}] as ${res.map(_.show)}")
54+
55+ res
56+ catch
57+ case e : Exception =>
58+ // TODO (https://github.com/lampepfl/scala3doc/issues/238): proper reporting
59+ println(s " [WARN] Unable to find a link for ${query} ${ownerOpt.fold(" " )(o => " in " + o.name)}" )
60+ None
5661
5762 private def hackMembersOf (using QuoteContext )(rsym : qctx.reflect.Symbol ) = {
5863 import qctx .reflect ._
0 commit comments