Create your custom Scala REPL
If you ever need to create an interactive console/REPL that let’s users use play with your code in a simple terminal you might (still) find that there’s hardly any documentation. I fixed the console for Gremlin-Scala (a graph DSL) and thought that other people might want a very basic version of a custom shell to have a quick start.
It doesn’t do much more than importing java.lang.Math so that you can type things like abs(-4.2)
directly in the shell without having to import java.lang.Math._
first. The important part is that your import statements and any initialisation belongs into addThunk
- those are executed after the shell is fully initialised - otherwise you get all sorts of AST errors that don’t really help much.
This is obviously only a starting point, you can further customise it to automatically do stuff with the executed command like we do in Gremlin-Scala’s Console.
import scala.tools.nsc.Settings
import scala.tools.nsc.interpreter.ILoop
object TestConsole extends App {
val settings = new Settings
settings.usejavacp.value = true
settings.deprecation.value = true
new SampleILoop().process(settings)
}
class SampleILoop extends ILoop {
override def prompt = "==> "
addThunk {
intp.beQuietDuring {
intp.addImports("java.lang.Math._")
}
}
override def printWelcome() {
echo("\n" +
" \\,,,/\n" +
" (o o)\n" +
"-----oOOo-(_)-oOOo-----")
}
}