如何在Scala的MainGenericRunner REPL(交互式解释器)中启用选项卡完成?

时间:2016-02-11 07:25:50

标签: scala read-eval-print-loop

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

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完美的是标签完成。我从Scala那里知道它支持这一点。

如何为MainGenericRunner启用它?

1:随意测试REPL:

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

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

2 个答案:

答案 0 :(得分:1)

known issue处理//You need to make your own EventHandler class. Search online for that. FCEventHandler handler = new FCEventHandler(); @EventHandler public void preInit(FMLPreInitializationEvent event){ //Config Handling //event handler registry FMLCommonHandler.instance().bus().register(handler); MinecraftForge.EVENT_BUS.register(handler); //the same thing can be similarly done with this if you wish itemCbIngot = new ItemCbIngot().setUnlocalizedName("ItemCbIngot").setTextureName("fc:itemCbIngot"); blockCbBlock = new BlockCbBlock(); GameRegistry.registerItem(itemCbIngot, itemCbIngot.getUnlocalizedName().substring(5)); } 的方式,打破了完成。

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

答案 1 :(得分:1)

虽然目前的scala repl现在具有自动完成功能,但效果不佳。 (除了som-snytt提到的issue之外)。

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

注意:我还没有在2.11.8中测试过标签完成情况,但看起来它们已经从头开始重写并且看起来非常有前景。