如何在 Scala 的 MainGenericRunner REPL(交互式解释器)中启用制表符补全?

How to enable tab completion in Scala's MainGenericRunner REPL (interactive interpreter)?

我已经向可能 Java 项目1 添加了一个 REPL(读取 eval 打印循环),它是使用 maven 构建的。 REPL can be started with a script。相关部分是

declare -r GRADLE_CLASSPATH="$(gradle :minidns-repl:printClasspath --quiet |tail -n1)"

java \
    -Dscala.usejavacp=true \
    -classpath "${GRADLE_CLASSPATH}" \
    scala.tools.nsc.MainGenericRunner \
    -i minidns-repl/scala.repl

到目前为止这有效。唯一使 REPL 变得完美的缺失是 tab 完成。我从 Scala 知道它确实支持这个。

如何为 MainGenericRunner 启用它?

1:随意测试REPL:

git clone https://github.com/rtreffer/minidns.git \
  && cd minidns \
  && ./repl`

然后执行 DNS 查询,例如c.query("wikipedia.org", TYPE.A)

known issue -i 的处理方式中断了完成。

还有一个待定的修复程序,但我不知道它是否会进入 2.11.8,它也有一个完整的 new completion feature.

虽然当前的 scala repl 具有自动完成功能,但它现在运行得不是很好。 (除了 som-snytt 提到的 issue)。

如果您需要 repl 中的工作完成,您最好选择 Ammonite REPL,它比标准 repl 还具有更多功能。

注意:我没有在 2.11.8 中测试制表符完成,但看起来它们已经从头开始重写并且看起来很有前途。