diff --git a/compiler/src/dotty/tools/dotc/interactive/Completion.scala b/compiler/src/dotty/tools/dotc/interactive/Completion.scala index bc63b958f1f0..7a808aafb481 100644 --- a/compiler/src/dotty/tools/dotc/interactive/Completion.scala +++ b/compiler/src/dotty/tools/dotc/interactive/Completion.scala @@ -112,10 +112,13 @@ object Completion { val completer = new Completer(mode, prefix, pos) val completions = path match { - case Select(qual, _) :: _ => completer.selectionCompletions(qual) - case Import(expr, _) :: _ => completer.directMemberCompletions(expr) - case (_: untpd.ImportSelector) :: Import(expr, _) :: _ => completer.directMemberCompletions(expr) - case _ => completer.scopeCompletions + // Ignore synthetic select from `This` because in code it was `Ident` + // See example in dotty.tools.languageserver.CompletionTest.syntheticThis + case Select(qual @ This(_), _) :: _ if qual.span.isSynthetic => completer.scopeCompletions + case Select(qual, _) :: _ => completer.selectionCompletions(qual) + case Import(expr, _) :: _ => completer.directMemberCompletions(expr) + case (_: untpd.ImportSelector) :: Import(expr, _) :: _ => completer.directMemberCompletions(expr) + case _ => completer.scopeCompletions } val describedCompletions = describeCompletions(completions) diff --git a/language-server/test/dotty/tools/languageserver/CompletionTest.scala b/language-server/test/dotty/tools/languageserver/CompletionTest.scala index 5aa12f425371..139c70e4c46e 100644 --- a/language-server/test/dotty/tools/languageserver/CompletionTest.scala +++ b/language-server/test/dotty/tools/languageserver/CompletionTest.scala @@ -857,4 +857,17 @@ class CompletionTest { |}""".withSource .completion(m1, Set(("show",Method, "(using x$2: x$1.reflect.Printer[x$1.reflect.Tree]): String"))) } + + @Test def syntheticThis: Unit = { + code"""|class Y() { + | def bar: Unit = + | val argument: Int = ??? + | arg${m1} + | + | def arg: String = ??? + |} + |""".withSource + .completion(m1, Set(("arg", Method, "=> String"), + ("argument", Field, "Int"))) + } }