aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/repl/AmmoniteReader.scala
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-04-27 12:00:29 +0200
committerFelix Mulder <felix.mulder@gmail.com>2016-04-28 11:00:39 +0200
commitd04984596c6abfa27b217b12a42caca26f0c269f (patch)
tree5657a2a1da905954fbab71f49a9cb477f7a690e7 /src/dotty/tools/dotc/repl/AmmoniteReader.scala
parent96cedcdcd82148f091989836eb4959b2c3ec3382 (diff)
downloaddotty-d04984596c6abfa27b217b12a42caca26f0c269f.tar.gz
dotty-d04984596c6abfa27b217b12a42caca26f0c269f.tar.bz2
dotty-d04984596c6abfa27b217b12a42caca26f0c269f.zip
Add multiline support using ammonite multilineFilter
Diffstat (limited to 'src/dotty/tools/dotc/repl/AmmoniteReader.scala')
-rw-r--r--src/dotty/tools/dotc/repl/AmmoniteReader.scala22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/dotty/tools/dotc/repl/AmmoniteReader.scala b/src/dotty/tools/dotc/repl/AmmoniteReader.scala
index 0c4dd80ee..a3b2a1c56 100644
--- a/src/dotty/tools/dotc/repl/AmmoniteReader.scala
+++ b/src/dotty/tools/dotc/repl/AmmoniteReader.scala
@@ -11,9 +11,15 @@ import BasicFilters._
import GUILikeFilters._
import util.SourceFile
-class AmmoniteReader extends InteractiveReader {
+class AmmoniteReader(val interpreter: Interpreter)(implicit ctx: Context) extends InteractiveReader {
val interactive = true
+ def incompleteInput(str: String): Boolean =
+ interpreter.beQuietDuring(interpreter.interpret(str)) match {
+ case Interpreter.Incomplete => true
+ case _ => false // TODO: should perhaps save output here?
+ }
+
val reader = new java.io.InputStreamReader(System.in)
val writer = new java.io.OutputStreamWriter(System.out)
val cutPasteFilter = ReadlineFilters.CutPasteFilter()
@@ -21,11 +27,11 @@ class AmmoniteReader extends InteractiveReader {
val selectionFilter = GUILikeFilters.SelectionFilter(indent = 2)
val multilineFilter: Filter = Filter("multilineFilter") {
case TermState(lb ~: rest, b, c, _)
- if (lb == 10 || lb == 13) => // Enter
-
+ if (lb == 10 || lb == 13) && incompleteInput(b.mkString) =>
BasicFilters.injectNewLine(b, c, rest)
}
- def readLine(prompt: String)(implicit ctx: Context): String = {
+
+ def readLine(prompt: String): String = {
val historyFilter = new HistoryFilter(
() => history.toVector,
Console.BLUE,
@@ -39,9 +45,8 @@ class AmmoniteReader extends InteractiveReader {
GUILikeFilters.altFilter,
GUILikeFilters.fnFilter,
ReadlineFilters.navFilter,
- //autocompleteFilter,
cutPasteFilter,
- //multilineFilter,
+ multilineFilter,
BasicFilters.all
)
@@ -52,7 +57,6 @@ class AmmoniteReader extends InteractiveReader {
allFilters,
displayTransform = (buffer, cursor) => {
val ansiBuffer = Ansi.Str.parse(SyntaxHighlighting(buffer))
- //val ansiBuffer = Ansi.Str.parse(SyntaxHighlighting(new SourceFile("<console>", buffer)))
val (newBuffer, cursorOffset) = SelectionFilter.mangleBuffer(
selectionFilter, ansiBuffer, cursor, Ansi.Reversed.On
)
@@ -64,7 +68,9 @@ class AmmoniteReader extends InteractiveReader {
(newNewBuffer, cursorOffset)
}
) match {
- case Some(s) => history = s :: history; s
+ case Some(res) =>
+ history = res :: history;
+ res
case None => ":q"
}
}