Skip to content

Commit adeb1ab

Browse files
authored
Merge pull request #13697 from BarkingBad/scaladoc/fix-broken-lookups
Fix broken lookups
2 parents af2dfe0 + 24d085b commit adeb1ab

File tree

3 files changed

+48
-3
lines changed

3 files changed

+48
-3
lines changed

scaladoc/src/dotty/tools/scaladoc/renderers/DocRenderer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class DocRender(signatureRenderer: SignatureRenderer)(using DocContext):
6666
case Superscript(text) => span(cls:="superscript")(renderElement(text)) // TODO implement style
6767
case Subscript(text) => span(cls:="subscript")(renderElement(text)) // TODO implement style
6868
case Link(target, body) =>
69-
renderLink(target, default => body.fold[TagArg](text(default))(renderElement))
69+
renderLink(target, default => body.fold[TagArg](default)(renderElement))
7070
case Text(text) => raw(text)
7171
case Summary(text) => renderElement(text)
7272
case HtmlTag(content) => raw(content)

scaladoc/src/dotty/tools/scaladoc/tasty/comments/MemberLookup.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ trait MemberLookup {
193193
case Some(sym) =>
194194
val externalOwner: Option[reflect.Symbol] =
195195
if owner eq sym.owner then None
196-
else if owner.flags.is(Flags.Module) then Some(owner.moduleClass)
196+
else if owner.flags.is(Flags.Module) && !owner.flags.is(Flags.Package) then Some(owner.moduleClass)
197197
else if owner.isClassDef then Some(owner)
198198
else None
199199
Some(sym -> externalOwner)

scaladoc/test/dotty/tools/scaladoc/tasty/comments/MemberLookupTests.scala

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ class LookupTestCases[Q <: Quotes](val q: Quotes) {
1313

1414
def testAll(): Unit = {
1515
testOwnerlessLookup()
16+
testOwnerlessLookupOfInherited()
17+
testOwnerlessLookupOfClassWithinPackageWithPackageObject()
1618
testOwnedLookup()
1719
testStrictMemberLookup()
1820
}
@@ -46,7 +48,7 @@ class LookupTestCases[Q <: Quotes](val q: Quotes) {
4648
cls("tests.lookupInheritedMembers.pack1.A").fun("x"),
4749

4850
"tests.lookupInheritedMembers.pack2.B.x" ->
49-
cls("tests.lookupInheritedMembers.pack1.A").fun("x"),
51+
cls("tests.lookupInheritedMembers.pack2.B").fun("x"),
5052
)
5153

5254
cases.foreach { case (query, sym) =>
@@ -62,6 +64,49 @@ class LookupTestCases[Q <: Quotes](val q: Quotes) {
6264
assertSame(query, target, lookedUp)
6365
}
6466

67+
/**
68+
* We cannot test for cls().fun() beucase it returns parent fun symbol from tasty. Hence we will look for member (val, def, type) but compare its owner to just cls()
69+
*/
70+
def testOwnerlessLookupOfInherited(): Unit = {
71+
val cases = List[(String, Sym)](
72+
"tests.lookupInheritedMembers.pack2.B.x" ->
73+
cls("tests.lookupInheritedMembers.pack2.B"),
74+
75+
"tests.lookupInheritedMembers.pack2.B.y" ->
76+
cls("tests.lookupInheritedMembers.pack2.B"),
77+
78+
"tests.lookupInheritedMembers.pack2.B.MyType" ->
79+
cls("tests.lookupInheritedMembers.pack2.B"),
80+
)
81+
82+
cases.foreach { case (query, sym) =>
83+
val target = sym.symbol
84+
val lookupRes = MemberLookup.lookupOpt(parseQuery(query), None)
85+
assertTrue(s"Couldn't look up: $query", lookupRes.nonEmpty)
86+
val Some((_ , _, Some(owner))) = lookupRes
87+
assertSame(query, target, owner)
88+
}
89+
}
90+
91+
/**
92+
* Classes should not have owner of package object
93+
*/
94+
def testOwnerlessLookupOfClassWithinPackageWithPackageObject(): Unit = {
95+
val cases = List[(String, Sym)](
96+
"<:<" ->
97+
cls("scala.<:<"),
98+
)
99+
100+
cases.foreach { case (query, sym) =>
101+
val target = sym.symbol
102+
val lookupRes = MemberLookup.lookupOpt(parseQuery(query), Some(cls("scala.=:=").symbol))
103+
assertTrue(s"Couldn't look up: $query", lookupRes.nonEmpty)
104+
println(lookupRes)
105+
val Some((_ , _, owner)) = lookupRes
106+
assertSame(query, None, owner)
107+
}
108+
}
109+
65110
def testOwnedLookup(): Unit = {
66111
val cases = List[((Sym, String), Sym)](
67112
cls("tests.A") -> "tests.Methods.simple" -> cls("tests.Methods").fun("simple"),

0 commit comments

Comments
 (0)