summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-09-09 21:45:04 +1000
committerJason Zaugg <jzaugg@gmail.com>2015-09-10 11:46:36 +1000
commitb89874b7c0bb9ad8e2276b652580f3aaf3e5c621 (patch)
treef3b1705209df7d0322b622ba740a6533de48d54c
parent46211ddd07432f06d125d9926cd8b42bc7bfba40 (diff)
downloadscala-b89874b7c0bb9ad8e2276b652580f3aaf3e5c621.tar.gz
scala-b89874b7c0bb9ad8e2276b652580f3aaf3e5c621.tar.bz2
scala-b89874b7c0bb9ad8e2276b652580f3aaf3e5c621.zip
Fix REPL completion of symbolic identifiers
Recover part of the identifier that preceded the cursor from the source, rather than from the name in the `Select` node, which might contains an encoded name that differs in length from the one in source.
-rw-r--r--src/interactive/scala/tools/nsc/interactive/Global.scala3
-rw-r--r--test/junit/scala/tools/nsc/interpreter/CompletionTest.scala9
2 files changed, 9 insertions, 3 deletions
diff --git a/src/interactive/scala/tools/nsc/interactive/Global.scala b/src/interactive/scala/tools/nsc/interactive/Global.scala
index d6be6331ce..cc4b845b2c 100644
--- a/src/interactive/scala/tools/nsc/interactive/Global.scala
+++ b/src/interactive/scala/tools/nsc/interactive/Global.scala
@@ -1223,9 +1223,8 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
def typeCompletions(tree: Tree, qual: Tree, nameStart: Int, name: Name): CompletionResult = {
val qualPos = qual.pos
val allTypeMembers = typeMembers(qualPos).toList.flatten
-
val positionDelta: Int = nameStart - pos.start
- val subName = name.subName(0, -positionDelta)
+ val subName: Name = name.newName(new String(pos.source.content, nameStart, pos.start - nameStart)).encodedName
CompletionResult.TypeMembers(positionDelta, qual, tree, allTypeMembers, subName)
}
focus1 match {
diff --git a/test/junit/scala/tools/nsc/interpreter/CompletionTest.scala b/test/junit/scala/tools/nsc/interpreter/CompletionTest.scala
index 177d4922fb..514f30571e 100644
--- a/test/junit/scala/tools/nsc/interpreter/CompletionTest.scala
+++ b/test/junit/scala/tools/nsc/interpreter/CompletionTest.scala
@@ -48,7 +48,14 @@ class CompletionTest {
checkExact(completer, """class C { asInstanceO""")("asInstanceOf")
// Output is sorted
- assertEquals(List("prefix_aaa", "prefix_nnn", "prefix_zzz"), completer.complete("""class C { def prefix_nnn = 0; def prefix_zzz = 0; def prefix_aaa = 0; prefix_""").candidates)
+ assertEquals(List("prefix_aaa", "prefix_nnn", "prefix_zzz"), completer.complete( """class C { def prefix_nnn = 0; def prefix_zzz = 0; def prefix_aaa = 0; prefix_""").candidates)
+ }
+
+ @Test
+ def symbolically(): Unit = {
+ val intp = newIMain()
+ val completer = new PresentationCompilerCompleter(intp)
+ checkExact(completer, """class C { def +++(a: Any) = 0; def ---(a: Any) = 0; this.++""")("+++")
}
@Test