From 439f8f29a1f894f52fff9ee0785f1c8564677347 Mon Sep 17 00:00:00 2001 From: december32 Date: Sun, 16 Aug 2020 16:37:32 +0100 Subject: [PATCH 1/3] Fix #9538: type of empty expression --- compiler/src/dotty/tools/repl/ReplDriver.scala | 12 ++++++++---- compiler/test-resources/repl/i9538 | 2 ++ compiler/test/dotty/tools/repl/TypeTests.scala | 5 +++++ 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 compiler/test-resources/repl/i9538 diff --git a/compiler/src/dotty/tools/repl/ReplDriver.scala b/compiler/src/dotty/tools/repl/ReplDriver.scala index a83536fb03f6..6b27c5291cb3 100644 --- a/compiler/src/dotty/tools/repl/ReplDriver.scala +++ b/compiler/src/dotty/tools/repl/ReplDriver.scala @@ -376,10 +376,14 @@ class ReplDriver(settings: Array[String], } case TypeOf(expr) => - compiler.typeOf(expr)(newRun(state)).fold( - displayErrors, - res => out.println(SyntaxHighlighting.highlight(res)(using state.context)) - ) + expr match { + case "" => out.println(s":type .") + case _ => + compiler.typeOf(expr)(newRun(state)).fold( + displayErrors, + res => out.println(SyntaxHighlighting.highlight(res)(using state.context)) + ) + } state case DocOf(expr) => diff --git a/compiler/test-resources/repl/i9538 b/compiler/test-resources/repl/i9538 new file mode 100644 index 000000000000..77f841c111bf --- /dev/null +++ b/compiler/test-resources/repl/i9538 @@ -0,0 +1,2 @@ +scala>:type +:type . diff --git a/compiler/test/dotty/tools/repl/TypeTests.scala b/compiler/test/dotty/tools/repl/TypeTests.scala index cd15ddd34dee..2ec505c1f304 100644 --- a/compiler/test/dotty/tools/repl/TypeTests.scala +++ b/compiler/test/dotty/tools/repl/TypeTests.scala @@ -21,4 +21,9 @@ class TypeTests extends ReplTest { run(":type x") assertEquals("Int", storedOutput().trim) } + + @Test def typeOfEmpty = fromInitialState { implicit s => + run(":type") + assertEquals(":type .", storedOutput().trim) + } } From d5e84f4aa48bd1c053b24336dab2b54fea827e2b Mon Sep 17 00:00:00 2001 From: december32 Date: Sun, 16 Aug 2020 17:02:04 +0100 Subject: [PATCH 2/3] Fix #9538: doc of empty expression --- compiler/src/dotty/tools/repl/ReplDriver.scala | 12 ++++++++---- compiler/test-resources/repl/i9538 | 3 +++ compiler/test/dotty/tools/repl/DocTests.scala | 6 ++++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/compiler/src/dotty/tools/repl/ReplDriver.scala b/compiler/src/dotty/tools/repl/ReplDriver.scala index 6b27c5291cb3..85c391884340 100644 --- a/compiler/src/dotty/tools/repl/ReplDriver.scala +++ b/compiler/src/dotty/tools/repl/ReplDriver.scala @@ -387,10 +387,14 @@ class ReplDriver(settings: Array[String], state case DocOf(expr) => - compiler.docOf(expr)(newRun(state)).fold( - displayErrors, - res => out.println(res) - ) + expr match { + case "" => out.println(s":doc .") + case _ => + compiler.docOf(expr)(newRun(state)).fold( + displayErrors, + res => out.println(res) + ) + } state case Quit => diff --git a/compiler/test-resources/repl/i9538 b/compiler/test-resources/repl/i9538 index 77f841c111bf..ecbe1e8b56cb 100644 --- a/compiler/test-resources/repl/i9538 +++ b/compiler/test-resources/repl/i9538 @@ -1,2 +1,5 @@ scala>:type :type . + +scala>:doc +:doc . diff --git a/compiler/test/dotty/tools/repl/DocTests.scala b/compiler/test/dotty/tools/repl/DocTests.scala index 2fb53f53fa5d..071583508bba 100644 --- a/compiler/test/dotty/tools/repl/DocTests.scala +++ b/compiler/test/dotty/tools/repl/DocTests.scala @@ -177,6 +177,12 @@ class DocTests extends ReplTest { assertEquals("Expansion: some-value", doc("Foo.hello")) } + @Test def docOfEmpty = + fromInitialState { implicit s => + run(":doc") + assertEquals(":doc .", storedOutput().trim) + } + private def eval(code: String): State = fromInitialState { implicit s => run(code) } From a6c538d08a767b77d584bd6c47002d3a1569b1de Mon Sep 17 00:00:00 2001 From: december32 <35935650+december32@users.noreply.github.com> Date: Sun, 16 Aug 2020 21:47:58 +0100 Subject: [PATCH 3/3] Apply suggestions from code review Co-authored-by: Fengyun Liu --- compiler/src/dotty/tools/repl/ReplDriver.scala | 4 ++-- compiler/test-resources/repl/i9538 | 4 ++-- compiler/test/dotty/tools/repl/DocTests.scala | 2 +- compiler/test/dotty/tools/repl/TypeTests.scala | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler/src/dotty/tools/repl/ReplDriver.scala b/compiler/src/dotty/tools/repl/ReplDriver.scala index 85c391884340..97865fc63eb0 100644 --- a/compiler/src/dotty/tools/repl/ReplDriver.scala +++ b/compiler/src/dotty/tools/repl/ReplDriver.scala @@ -377,7 +377,7 @@ class ReplDriver(settings: Array[String], case TypeOf(expr) => expr match { - case "" => out.println(s":type .") + case "" => out.println(s":type ") case _ => compiler.typeOf(expr)(newRun(state)).fold( displayErrors, @@ -388,7 +388,7 @@ class ReplDriver(settings: Array[String], case DocOf(expr) => expr match { - case "" => out.println(s":doc .") + case "" => out.println(s":doc ") case _ => compiler.docOf(expr)(newRun(state)).fold( displayErrors, diff --git a/compiler/test-resources/repl/i9538 b/compiler/test-resources/repl/i9538 index ecbe1e8b56cb..6a9bdacf0baf 100644 --- a/compiler/test-resources/repl/i9538 +++ b/compiler/test-resources/repl/i9538 @@ -1,5 +1,5 @@ scala>:type -:type . +:type scala>:doc -:doc . +:doc diff --git a/compiler/test/dotty/tools/repl/DocTests.scala b/compiler/test/dotty/tools/repl/DocTests.scala index 071583508bba..0cdf886a1bbc 100644 --- a/compiler/test/dotty/tools/repl/DocTests.scala +++ b/compiler/test/dotty/tools/repl/DocTests.scala @@ -180,7 +180,7 @@ class DocTests extends ReplTest { @Test def docOfEmpty = fromInitialState { implicit s => run(":doc") - assertEquals(":doc .", storedOutput().trim) + assertEquals(":doc ", storedOutput().trim) } private def eval(code: String): State = diff --git a/compiler/test/dotty/tools/repl/TypeTests.scala b/compiler/test/dotty/tools/repl/TypeTests.scala index 2ec505c1f304..abc66ba2c0ab 100644 --- a/compiler/test/dotty/tools/repl/TypeTests.scala +++ b/compiler/test/dotty/tools/repl/TypeTests.scala @@ -24,6 +24,6 @@ class TypeTests extends ReplTest { @Test def typeOfEmpty = fromInitialState { implicit s => run(":type") - assertEquals(":type .", storedOutput().trim) + assertEquals(":type ", storedOutput().trim) } }