diff --git a/compiler/src/dotty/tools/dotc/interactive/Completion.scala b/compiler/src/dotty/tools/dotc/interactive/Completion.scala index 0692862c58ed..15628c3b83e8 100644 --- a/compiler/src/dotty/tools/dotc/interactive/Completion.scala +++ b/compiler/src/dotty/tools/dotc/interactive/Completion.scala @@ -416,7 +416,7 @@ object Completion { // 1. The extension method is visible under a simple name, by being defined or inherited or imported in a scope enclosing the reference. val termCompleter = new Completer(Mode.Term, prefix, pos) val extMethodsInScope = termCompleter.scopeCompletions.toList.flatMap { - case (name, denots) => denots.collect { case d: SymDenotation => (d.termRef, name.asTermName) } + case (name, denots) => denots.collect { case d: SymDenotation if d.isTerm => (d.termRef, name.asTermName) } } // 2. The extension method is a member of some given instance that is visible at the point of the reference. @@ -467,8 +467,8 @@ object Completion { !sym.isPackageObject && !sym.is(Artifact) && ( - (mode.is(Mode.Term) && sym.isTerm) - || (mode.is(Mode.Type) && (sym.isType || sym.isStableMember)) + (mode.is(Mode.Term) && (sym.isTerm || sym.is(ModuleClass)) + || (mode.is(Mode.Type) && (sym.isType || sym.isStableMember))) ) /** @param site The type to inspect. diff --git a/language-server/test/dotty/tools/languageserver/CompletionTest.scala b/language-server/test/dotty/tools/languageserver/CompletionTest.scala index 062fa3db11fa..b97b343e0791 100644 --- a/language-server/test/dotty/tools/languageserver/CompletionTest.scala +++ b/language-server/test/dotty/tools/languageserver/CompletionTest.scala @@ -1224,4 +1224,25 @@ class CompletionTest { |def foo(x: Bar[M]) = x.bar.ma${m1}""" .withSource.completion(m1, expected) } + + @Test def packageCompletionsOutsideImport: Unit = { + val expected = Set( + ("java", Module, "java"), + ("javax", Module, "javax"), + ) + code"""object Foo { ja${m1}""" + .withSource.completion(m1, expected) + } + + @Test def topLevelPackagesCompletionsOutsideImport: Unit = { + val expected = Set( + ("example", Module, "example"), + ) + code"""package example: + | def foo = "" + | + |def main = exa${m1}""" + .withSource.completion(m1, expected) + } + }