dotty.tools.repl

Type members

Classlikes

case class AmbiguousCommand(cmd: String, matchingCommands: List[String]) extends Command

An ambiguous prefix that matches multiple commands

An ambiguous prefix that matches multiple commands

A phase that collects user defined top level imports.

A phase that collects user defined top level imports.

These imports must be collected as typed trees and therefore after Typer.

sealed trait Command extends ParseResult

A command is on the format:

A command is on the format:

:commandName <optional arguments...>

The Command trait denotes these commands

case class DocOf(expr: String) extends Command

A command that is used to display the documentation associated with the given expression.

A command that is used to display the documentation associated with the given expression.

Companion:
object
object DocOf
Companion:
class
case object Help extends Command

:help shows the different commands implemented by the Dotty repl

:help shows the different commands implemented by the Dotty repl

case object Imports extends Command

:imports lists the imports that have been explicitly imported during the session

:imports lists the imports that have been explicitly imported during the session

final class JLineTerminal extends Closeable
case class Load(path: String) extends Command

:load <path> interprets a scala file as if entered line-by-line into the REPL

:load <path> interprets a scala file as if entered line-by-line into the REPL

Companion:
object
object Load
Companion:
class
object Main

Main entry point to the REPL

Main entry point to the REPL

case object Newline extends ParseResult

Parsed result is simply a newline

Parsed result is simply a newline

sealed trait ParseResult

A parsing result from string input

A parsing result from string input

Companion:
object
Companion:
class
case class Parsed(source: SourceFile, trees: List[Tree], reporter: StoreReporter) extends ParseResult

An error free parsing resulting in a list of untyped trees

An error free parsing resulting in a list of untyped trees

case object Quit extends Command

:quit exits the repl

:quit exits the repl

object Rendering
class ReplCompiler extends Compiler

This subclass of Compiler is adapted for use in the REPL.

This subclass of Compiler is adapted for use in the REPL.

  • compiles parsed expression in the current REPL state:
    • adds the appropriate imports in scope
    • wraps expressions into a dummy object
  • provides utility to query the type of an expression
  • provides utility to query the documentation of an expression
class ReplDriver(settings: Array[String], out: PrintStream, classLoader: Option[ClassLoader]) extends Driver

Main REPL instance, orchestrating input, compilation and presentation

Main REPL instance, orchestrating input, compilation and presentation

case class Reset(arg: String) extends Command

Reset the session to the initial state from when the repl program was started

Reset the session to the initial state from when the repl program was started

Companion:
object
object Reset
Companion:
class
class ScriptEngine extends AbstractScriptEngine

A JSR 223 (Scripting API) compatible wrapper around the REPL for improved interoperability with software that supports it.

A JSR 223 (Scripting API) compatible wrapper around the REPL for improved interoperability with software that supports it.

It works by instantiating a new script engine through the script engine manager. The script engine provides a eval method to evaluate scripts in string form. Example use:

val m = new javax.script.ScriptEngineManager() val e = m.getEngineByName("scala") println(e.eval("42"))

Companion:
object
Companion:
class
case class Settings(arg: String) extends Command
Companion:
object
object Settings
Companion:
class
case object SigKill extends ParseResult

ctrl-c obtained from input string

ctrl-c obtained from input string

case class State(objectIndex: Int, valIndex: Int, imports: Map[Int, List[Import]], context: Context)

The state of the REPL contains necessary bindings instead of having to have mutation

The state of the REPL contains necessary bindings instead of having to have mutation

The compiler in the REPL needs to do some wrapping in order to compile valid code. This wrapping occurs when a single MemberDef that cannot be top-level needs to be compiled. In order to do this, we need some unique identifier for each of these wrappers. That identifier is objectIndex.

Free expressions such as 1 + 1 needs to have an assignment in order to be of use. These expressions are therefore given a identifier on the format resX where X starts at 0 and each new expression that needs an identifier is given the increment of the old identifier. This identifier is valIndex.

Value parameters:
context

the latest compiler context

imports

a map from object index to the list of user defined imports

objectIndex

the index of the next wrapper

valIndex

the index of next value binding for free expressions

case class SyntaxErrors(sourceCode: String, errors: List[Diagnostic], trees: List[Tree]) extends ParseResult

A parsing result containing syntax errors

A parsing result containing syntax errors

case class TypeOf(expr: String) extends Command

To find out the type of an expression you may simply do:

To find out the type of an expression you may simply do:

scala> :type (1 * 54).toString
String
Companion:
object
object TypeOf
Companion:
class
case class UnknownCommand(cmd: String) extends Command

An unknown command that will not be handled by the REPL

An unknown command that will not be handled by the REPL

object results

Contains the different data and type structures used to model results in the REPL

Contains the different data and type structures used to model results in the REPL