Skip to content

Commit b3260c1

Browse files
committed
fix completions to properly contain public fields if they were shadowed by private ones
1 parent ee5bab9 commit b3260c1

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

compiler/src/dotty/tools/dotc/interactive/Completion.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,11 @@ object Completion {
481481
private def accessibleMembers(site: Type)(using Context): Seq[SingleDenotation] = {
482482
def appendMemberSyms(name: Name, buf: mutable.Buffer[SingleDenotation]): Unit =
483483
try
484-
buf ++= site.member(name).alternatives
484+
val member = site.member(name)
485+
if member.symbol.isAccessibleFrom(site) then
486+
buf ++= member.alternatives
487+
else
488+
buf ++= site.nonPrivateMember(name).alternatives
485489
catch
486490
case ex: TypeError =>
487491

language-server/test/dotty/tools/languageserver/CompletionTest.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,4 +1275,13 @@ class CompletionTest {
12751275
.noCompletions()
12761276
}
12771277

1278+
@Test def singleDenotNoCompletions: Unit = {
1279+
val expected = Set(("symbol", Field, "Int"))
1280+
code"""class Test(val symbol: Int)
1281+
|class BetterTest(symbol: Int) extends Test(symbol)
1282+
|object O:
1283+
| def t(test: BetterTest) = test.symb$m1"""
1284+
.completion(m1, expected)
1285+
}
1286+
12781287
}

0 commit comments

Comments
 (0)