Skip to content

Commit d1d4fc5

Browse files
authored
Merge pull request #15236 from rochala/class-value-completion-after-shadowing
fix completions to properly contain public fields if they were shadowed
2 parents 83b90d8 + be173b0 commit d1d4fc5

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import dotty.tools.dotc.util.SourcePosition
2323

2424
import scala.collection.mutable
2525
import scala.util.control.NonFatal
26-
import dotty.tools.dotc.core.Types.TypeRef
2726

2827
/**
2928
* One of the results of a completion query.
@@ -481,7 +480,11 @@ object Completion {
481480
private def accessibleMembers(site: Type)(using Context): Seq[SingleDenotation] = {
482481
def appendMemberSyms(name: Name, buf: mutable.Buffer[SingleDenotation]): Unit =
483482
try
484-
buf ++= site.member(name).alternatives
483+
val member = site.member(name)
484+
if member.symbol.is(ParamAccessor) && !member.symbol.isAccessibleFrom(site) then
485+
buf ++= site.nonPrivateMember(name).alternatives
486+
else
487+
buf ++= member.alternatives
485488
catch
486489
case ex: TypeError =>
487490

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

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

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

0 commit comments

Comments
 (0)