From 32d3c5d064fe84baab3248026c5b8897991940cc Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Mon, 28 Aug 2017 15:42:05 +0200 Subject: [PATCH 1/4] Inline repl project into `dotty-compiler` As discussed with Guillaume Martres, this has the effect that if you depend on dotty-compiler version X, you also get the appropriate dotty repl with the same version --- build.sbt | 1 - .../tools/repl/AbstractFileClassLoader.scala | 0 .../src/dotty/tools/repl/AmmoniteReader.scala | 0 .../src/dotty/tools/repl/Main.scala | 0 .../src/dotty/tools/repl/ParseResult.scala | 2 +- .../src/dotty/tools/repl/Rendering.scala | 0 .../src/dotty/tools/repl/ReplCompiler.scala | 0 .../src/dotty/tools/repl/ReplDriver.scala | 0 .../src/dotty/tools/repl/ReplFrontEnd.scala | 0 .../src/dotty/tools/repl/UserFacingPrinter.scala | 16 +++------------- .../src/dotty/tools/repl/package.scala | 0 .../src/dotty/tools/repl/results.scala | 0 .../src/dotty/tools/repl/terminal/Ansi.scala | 0 .../src/dotty/tools/repl/terminal/Filter.scala | 0 .../dotty/tools/repl/terminal/FilterTools.scala | 0 .../src/dotty/tools/repl/terminal/LICENSE | 0 .../src/dotty/tools/repl/terminal/Protocol.scala | 0 .../dotty/tools/repl/terminal/SpecialKeys.scala | 0 .../src/dotty/tools/repl/terminal/Terminal.scala | 0 .../src/dotty/tools/repl/terminal/Utils.scala | 0 .../repl/terminal/filters/BasicFilters.scala | 0 .../repl/terminal/filters/GUILikeFilters.scala | 0 .../repl/terminal/filters/HistoryFilter.scala | 0 .../repl/terminal/filters/ReadlineFilters.scala | 0 .../tools/repl/terminal/filters/UndoFilter.scala | 0 {repl => compiler}/test-resources/repl/defs | 0 {repl => compiler}/test-resources/repl/errmsgs | 0 .../test-resources/repl/errorThenValid | 0 {repl => compiler}/test-resources/repl/functions | 0 {repl => compiler}/test-resources/repl/getClass | 0 {repl => compiler}/test-resources/repl/i1433 | 0 {repl => compiler}/test-resources/repl/i2063 | 0 {repl => compiler}/test-resources/repl/i2213 | 0 {repl => compiler}/test-resources/repl/i2492 | 0 {repl => compiler}/test-resources/repl/i2554 | 0 {repl => compiler}/test-resources/repl/import | 0 .../test-resources/repl/importFromObj | 0 .../test-resources/repl/innerClasses | 0 .../test-resources/repl/onePlusOne | 0 {repl => compiler}/test-resources/repl/overrides | 0 {repl => compiler}/test-resources/repl/patdef | 0 .../test-resources/repl/renderNull | 0 .../test-resources/repl/toplevelTry | 0 .../test-resources/repl/valueClassMember | 0 {repl => compiler}/test-resources/repl/varOrder | 0 .../test-resources/type-printer/classDefs | 0 .../test-resources/type-printer/defs | 0 .../test-resources/type-printer/hkClass | 0 .../test-resources/type-printer/infix | 0 .../test-resources/type-printer/type-mismatch | 0 .../test-resources/type-printer/typeAliasInfix | 0 .../test-resources/type-printer/vals | 0 .../test/dotty/tools/dotc/CompilationTests.scala | 2 +- .../test/dotty/tools/repl/CompilerTests.scala | 0 .../test/dotty/tools/repl/ReplTest.scala | 0 .../test/dotty/tools/repl/ScriptedTests.scala | 0 .../test/dotty/tools/repl/TabcompleteTests.scala | 0 .../test/dotty/tools/repl/TypeTests.scala | 0 project/Build.scala | 2 +- 59 files changed, 6 insertions(+), 17 deletions(-) rename {repl => compiler}/src/dotty/tools/repl/AbstractFileClassLoader.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/AmmoniteReader.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/Main.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/ParseResult.scala (98%) rename {repl => compiler}/src/dotty/tools/repl/Rendering.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/ReplCompiler.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/ReplDriver.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/ReplFrontEnd.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/UserFacingPrinter.scala (92%) rename {repl => compiler}/src/dotty/tools/repl/package.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/results.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/Ansi.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/Filter.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/FilterTools.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/LICENSE (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/Protocol.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/SpecialKeys.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/Terminal.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/Utils.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/filters/BasicFilters.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/filters/GUILikeFilters.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/filters/HistoryFilter.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/filters/ReadlineFilters.scala (100%) rename {repl => compiler}/src/dotty/tools/repl/terminal/filters/UndoFilter.scala (100%) rename {repl => compiler}/test-resources/repl/defs (100%) rename {repl => compiler}/test-resources/repl/errmsgs (100%) rename {repl => compiler}/test-resources/repl/errorThenValid (100%) rename {repl => compiler}/test-resources/repl/functions (100%) rename {repl => compiler}/test-resources/repl/getClass (100%) rename {repl => compiler}/test-resources/repl/i1433 (100%) rename {repl => compiler}/test-resources/repl/i2063 (100%) rename {repl => compiler}/test-resources/repl/i2213 (100%) rename {repl => compiler}/test-resources/repl/i2492 (100%) rename {repl => compiler}/test-resources/repl/i2554 (100%) rename {repl => compiler}/test-resources/repl/import (100%) rename {repl => compiler}/test-resources/repl/importFromObj (100%) rename {repl => compiler}/test-resources/repl/innerClasses (100%) rename {repl => compiler}/test-resources/repl/onePlusOne (100%) rename {repl => compiler}/test-resources/repl/overrides (100%) rename {repl => compiler}/test-resources/repl/patdef (100%) rename {repl => compiler}/test-resources/repl/renderNull (100%) rename {repl => compiler}/test-resources/repl/toplevelTry (100%) rename {repl => compiler}/test-resources/repl/valueClassMember (100%) rename {repl => compiler}/test-resources/repl/varOrder (100%) rename {repl => compiler}/test-resources/type-printer/classDefs (100%) rename {repl => compiler}/test-resources/type-printer/defs (100%) rename {repl => compiler}/test-resources/type-printer/hkClass (100%) rename {repl => compiler}/test-resources/type-printer/infix (100%) rename {repl => compiler}/test-resources/type-printer/type-mismatch (100%) rename {repl => compiler}/test-resources/type-printer/typeAliasInfix (100%) rename {repl => compiler}/test-resources/type-printer/vals (100%) rename {repl => compiler}/test/dotty/tools/repl/CompilerTests.scala (100%) rename {repl => compiler}/test/dotty/tools/repl/ReplTest.scala (100%) rename {repl => compiler}/test/dotty/tools/repl/ScriptedTests.scala (100%) rename {repl => compiler}/test/dotty/tools/repl/TabcompleteTests.scala (100%) rename {repl => compiler}/test/dotty/tools/repl/TypeTests.scala (100%) diff --git a/build.sbt b/build.sbt index c2c5fda85b36..a27722235ee1 100644 --- a/build.sbt +++ b/build.sbt @@ -18,7 +18,6 @@ val `dotty-bench-bootstrapped` = Build.`dotty-bench-bootstrapped` val `scala-library` = Build.`scala-library` val `scala-compiler` = Build.`scala-compiler` val `scala-reflect` = Build.`scala-reflect` -val `dotty-repl` = Build.`dotty-repl` val scalap = Build.scalap val dist = Build.dist val `dist-bootstrapped` = Build.`dist-bootstrapped` diff --git a/repl/src/dotty/tools/repl/AbstractFileClassLoader.scala b/compiler/src/dotty/tools/repl/AbstractFileClassLoader.scala similarity index 100% rename from repl/src/dotty/tools/repl/AbstractFileClassLoader.scala rename to compiler/src/dotty/tools/repl/AbstractFileClassLoader.scala diff --git a/repl/src/dotty/tools/repl/AmmoniteReader.scala b/compiler/src/dotty/tools/repl/AmmoniteReader.scala similarity index 100% rename from repl/src/dotty/tools/repl/AmmoniteReader.scala rename to compiler/src/dotty/tools/repl/AmmoniteReader.scala diff --git a/repl/src/dotty/tools/repl/Main.scala b/compiler/src/dotty/tools/repl/Main.scala similarity index 100% rename from repl/src/dotty/tools/repl/Main.scala rename to compiler/src/dotty/tools/repl/Main.scala diff --git a/repl/src/dotty/tools/repl/ParseResult.scala b/compiler/src/dotty/tools/repl/ParseResult.scala similarity index 98% rename from repl/src/dotty/tools/repl/ParseResult.scala rename to compiler/src/dotty/tools/repl/ParseResult.scala index e2ad3f3609e9..f8a1f3df21b2 100644 --- a/repl/src/dotty/tools/repl/ParseResult.scala +++ b/compiler/src/dotty/tools/repl/ParseResult.scala @@ -95,7 +95,7 @@ case object Help extends Command { object ParseResult { - private[this] val CommandExtract = """(:[\S]+)\s*(.*)""".r + @sharable private[this] val CommandExtract = """(:[\S]+)\s*(.*)""".r /** Extract a `ParseResult` from the string `sourceCode` */ def apply(sourceCode: String)(implicit ctx: Context): ParseResult = diff --git a/repl/src/dotty/tools/repl/Rendering.scala b/compiler/src/dotty/tools/repl/Rendering.scala similarity index 100% rename from repl/src/dotty/tools/repl/Rendering.scala rename to compiler/src/dotty/tools/repl/Rendering.scala diff --git a/repl/src/dotty/tools/repl/ReplCompiler.scala b/compiler/src/dotty/tools/repl/ReplCompiler.scala similarity index 100% rename from repl/src/dotty/tools/repl/ReplCompiler.scala rename to compiler/src/dotty/tools/repl/ReplCompiler.scala diff --git a/repl/src/dotty/tools/repl/ReplDriver.scala b/compiler/src/dotty/tools/repl/ReplDriver.scala similarity index 100% rename from repl/src/dotty/tools/repl/ReplDriver.scala rename to compiler/src/dotty/tools/repl/ReplDriver.scala diff --git a/repl/src/dotty/tools/repl/ReplFrontEnd.scala b/compiler/src/dotty/tools/repl/ReplFrontEnd.scala similarity index 100% rename from repl/src/dotty/tools/repl/ReplFrontEnd.scala rename to compiler/src/dotty/tools/repl/ReplFrontEnd.scala diff --git a/repl/src/dotty/tools/repl/UserFacingPrinter.scala b/compiler/src/dotty/tools/repl/UserFacingPrinter.scala similarity index 92% rename from repl/src/dotty/tools/repl/UserFacingPrinter.scala rename to compiler/src/dotty/tools/repl/UserFacingPrinter.scala index 55ec71f633e7..951852bdc543 100644 --- a/repl/src/dotty/tools/repl/UserFacingPrinter.scala +++ b/compiler/src/dotty/tools/repl/UserFacingPrinter.scala @@ -17,11 +17,11 @@ import dotc.core.Symbols.{ Symbol, ClassSymbol, defn } import dotc.core.SymDenotations.NoDenotation import dotc.core.Types._ import dotc.printing.Texts._ -import dotc.printing.{ GlobalPrec, DotPrec, Printer, PlainPrinter } +import dotc.printing.{ GlobalPrec, DotPrec, Printer, PlainPrinter, RefinedPrinter } import dotc.typer.Implicits.SearchResult import dotc.typer.ImportInfo -class UserFacingPrinter(_ctx: Context) extends PlainPrinter(_ctx) { +class UserFacingPrinter(_ctx: Context) extends RefinedPrinter(_ctx) { private def panic(msg: String): Nothing = throw new AssertionError(msg) @@ -75,15 +75,6 @@ class UserFacingPrinter(_ctx: Context) extends PlainPrinter(_ctx) { } } - override def toText(denot: Denotation): Text = denot match { - case NoDenotation => - panic("NoDenotation encountered in UserFacingPrinter") - case denot: MultiDenotation => - panic("MultiDenotation not allowed in UserFacingPrinter") - case _ => - toText(denot.symbol) - } - override def toText(const: Constant): Text = Str(const.value.toString) override def toText(tp: Type): Text = tp match { @@ -142,7 +133,6 @@ class UserFacingPrinter(_ctx: Context) extends PlainPrinter(_ctx) { printPkg(tp.cls.owner.asClass) ~ "." ~ nameString(tp.cls.name) } } + case tp => super.toText(tp) } - - override lazy val plain = new PlainPrinter(_ctx) } diff --git a/repl/src/dotty/tools/repl/package.scala b/compiler/src/dotty/tools/repl/package.scala similarity index 100% rename from repl/src/dotty/tools/repl/package.scala rename to compiler/src/dotty/tools/repl/package.scala diff --git a/repl/src/dotty/tools/repl/results.scala b/compiler/src/dotty/tools/repl/results.scala similarity index 100% rename from repl/src/dotty/tools/repl/results.scala rename to compiler/src/dotty/tools/repl/results.scala diff --git a/repl/src/dotty/tools/repl/terminal/Ansi.scala b/compiler/src/dotty/tools/repl/terminal/Ansi.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/Ansi.scala rename to compiler/src/dotty/tools/repl/terminal/Ansi.scala diff --git a/repl/src/dotty/tools/repl/terminal/Filter.scala b/compiler/src/dotty/tools/repl/terminal/Filter.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/Filter.scala rename to compiler/src/dotty/tools/repl/terminal/Filter.scala diff --git a/repl/src/dotty/tools/repl/terminal/FilterTools.scala b/compiler/src/dotty/tools/repl/terminal/FilterTools.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/FilterTools.scala rename to compiler/src/dotty/tools/repl/terminal/FilterTools.scala diff --git a/repl/src/dotty/tools/repl/terminal/LICENSE b/compiler/src/dotty/tools/repl/terminal/LICENSE similarity index 100% rename from repl/src/dotty/tools/repl/terminal/LICENSE rename to compiler/src/dotty/tools/repl/terminal/LICENSE diff --git a/repl/src/dotty/tools/repl/terminal/Protocol.scala b/compiler/src/dotty/tools/repl/terminal/Protocol.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/Protocol.scala rename to compiler/src/dotty/tools/repl/terminal/Protocol.scala diff --git a/repl/src/dotty/tools/repl/terminal/SpecialKeys.scala b/compiler/src/dotty/tools/repl/terminal/SpecialKeys.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/SpecialKeys.scala rename to compiler/src/dotty/tools/repl/terminal/SpecialKeys.scala diff --git a/repl/src/dotty/tools/repl/terminal/Terminal.scala b/compiler/src/dotty/tools/repl/terminal/Terminal.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/Terminal.scala rename to compiler/src/dotty/tools/repl/terminal/Terminal.scala diff --git a/repl/src/dotty/tools/repl/terminal/Utils.scala b/compiler/src/dotty/tools/repl/terminal/Utils.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/Utils.scala rename to compiler/src/dotty/tools/repl/terminal/Utils.scala diff --git a/repl/src/dotty/tools/repl/terminal/filters/BasicFilters.scala b/compiler/src/dotty/tools/repl/terminal/filters/BasicFilters.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/filters/BasicFilters.scala rename to compiler/src/dotty/tools/repl/terminal/filters/BasicFilters.scala diff --git a/repl/src/dotty/tools/repl/terminal/filters/GUILikeFilters.scala b/compiler/src/dotty/tools/repl/terminal/filters/GUILikeFilters.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/filters/GUILikeFilters.scala rename to compiler/src/dotty/tools/repl/terminal/filters/GUILikeFilters.scala diff --git a/repl/src/dotty/tools/repl/terminal/filters/HistoryFilter.scala b/compiler/src/dotty/tools/repl/terminal/filters/HistoryFilter.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/filters/HistoryFilter.scala rename to compiler/src/dotty/tools/repl/terminal/filters/HistoryFilter.scala diff --git a/repl/src/dotty/tools/repl/terminal/filters/ReadlineFilters.scala b/compiler/src/dotty/tools/repl/terminal/filters/ReadlineFilters.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/filters/ReadlineFilters.scala rename to compiler/src/dotty/tools/repl/terminal/filters/ReadlineFilters.scala diff --git a/repl/src/dotty/tools/repl/terminal/filters/UndoFilter.scala b/compiler/src/dotty/tools/repl/terminal/filters/UndoFilter.scala similarity index 100% rename from repl/src/dotty/tools/repl/terminal/filters/UndoFilter.scala rename to compiler/src/dotty/tools/repl/terminal/filters/UndoFilter.scala diff --git a/repl/test-resources/repl/defs b/compiler/test-resources/repl/defs similarity index 100% rename from repl/test-resources/repl/defs rename to compiler/test-resources/repl/defs diff --git a/repl/test-resources/repl/errmsgs b/compiler/test-resources/repl/errmsgs similarity index 100% rename from repl/test-resources/repl/errmsgs rename to compiler/test-resources/repl/errmsgs diff --git a/repl/test-resources/repl/errorThenValid b/compiler/test-resources/repl/errorThenValid similarity index 100% rename from repl/test-resources/repl/errorThenValid rename to compiler/test-resources/repl/errorThenValid diff --git a/repl/test-resources/repl/functions b/compiler/test-resources/repl/functions similarity index 100% rename from repl/test-resources/repl/functions rename to compiler/test-resources/repl/functions diff --git a/repl/test-resources/repl/getClass b/compiler/test-resources/repl/getClass similarity index 100% rename from repl/test-resources/repl/getClass rename to compiler/test-resources/repl/getClass diff --git a/repl/test-resources/repl/i1433 b/compiler/test-resources/repl/i1433 similarity index 100% rename from repl/test-resources/repl/i1433 rename to compiler/test-resources/repl/i1433 diff --git a/repl/test-resources/repl/i2063 b/compiler/test-resources/repl/i2063 similarity index 100% rename from repl/test-resources/repl/i2063 rename to compiler/test-resources/repl/i2063 diff --git a/repl/test-resources/repl/i2213 b/compiler/test-resources/repl/i2213 similarity index 100% rename from repl/test-resources/repl/i2213 rename to compiler/test-resources/repl/i2213 diff --git a/repl/test-resources/repl/i2492 b/compiler/test-resources/repl/i2492 similarity index 100% rename from repl/test-resources/repl/i2492 rename to compiler/test-resources/repl/i2492 diff --git a/repl/test-resources/repl/i2554 b/compiler/test-resources/repl/i2554 similarity index 100% rename from repl/test-resources/repl/i2554 rename to compiler/test-resources/repl/i2554 diff --git a/repl/test-resources/repl/import b/compiler/test-resources/repl/import similarity index 100% rename from repl/test-resources/repl/import rename to compiler/test-resources/repl/import diff --git a/repl/test-resources/repl/importFromObj b/compiler/test-resources/repl/importFromObj similarity index 100% rename from repl/test-resources/repl/importFromObj rename to compiler/test-resources/repl/importFromObj diff --git a/repl/test-resources/repl/innerClasses b/compiler/test-resources/repl/innerClasses similarity index 100% rename from repl/test-resources/repl/innerClasses rename to compiler/test-resources/repl/innerClasses diff --git a/repl/test-resources/repl/onePlusOne b/compiler/test-resources/repl/onePlusOne similarity index 100% rename from repl/test-resources/repl/onePlusOne rename to compiler/test-resources/repl/onePlusOne diff --git a/repl/test-resources/repl/overrides b/compiler/test-resources/repl/overrides similarity index 100% rename from repl/test-resources/repl/overrides rename to compiler/test-resources/repl/overrides diff --git a/repl/test-resources/repl/patdef b/compiler/test-resources/repl/patdef similarity index 100% rename from repl/test-resources/repl/patdef rename to compiler/test-resources/repl/patdef diff --git a/repl/test-resources/repl/renderNull b/compiler/test-resources/repl/renderNull similarity index 100% rename from repl/test-resources/repl/renderNull rename to compiler/test-resources/repl/renderNull diff --git a/repl/test-resources/repl/toplevelTry b/compiler/test-resources/repl/toplevelTry similarity index 100% rename from repl/test-resources/repl/toplevelTry rename to compiler/test-resources/repl/toplevelTry diff --git a/repl/test-resources/repl/valueClassMember b/compiler/test-resources/repl/valueClassMember similarity index 100% rename from repl/test-resources/repl/valueClassMember rename to compiler/test-resources/repl/valueClassMember diff --git a/repl/test-resources/repl/varOrder b/compiler/test-resources/repl/varOrder similarity index 100% rename from repl/test-resources/repl/varOrder rename to compiler/test-resources/repl/varOrder diff --git a/repl/test-resources/type-printer/classDefs b/compiler/test-resources/type-printer/classDefs similarity index 100% rename from repl/test-resources/type-printer/classDefs rename to compiler/test-resources/type-printer/classDefs diff --git a/repl/test-resources/type-printer/defs b/compiler/test-resources/type-printer/defs similarity index 100% rename from repl/test-resources/type-printer/defs rename to compiler/test-resources/type-printer/defs diff --git a/repl/test-resources/type-printer/hkClass b/compiler/test-resources/type-printer/hkClass similarity index 100% rename from repl/test-resources/type-printer/hkClass rename to compiler/test-resources/type-printer/hkClass diff --git a/repl/test-resources/type-printer/infix b/compiler/test-resources/type-printer/infix similarity index 100% rename from repl/test-resources/type-printer/infix rename to compiler/test-resources/type-printer/infix diff --git a/repl/test-resources/type-printer/type-mismatch b/compiler/test-resources/type-printer/type-mismatch similarity index 100% rename from repl/test-resources/type-printer/type-mismatch rename to compiler/test-resources/type-printer/type-mismatch diff --git a/repl/test-resources/type-printer/typeAliasInfix b/compiler/test-resources/type-printer/typeAliasInfix similarity index 100% rename from repl/test-resources/type-printer/typeAliasInfix rename to compiler/test-resources/type-printer/typeAliasInfix diff --git a/repl/test-resources/type-printer/vals b/compiler/test-resources/type-printer/vals similarity index 100% rename from repl/test-resources/type-printer/vals rename to compiler/test-resources/type-printer/vals diff --git a/compiler/test/dotty/tools/dotc/CompilationTests.scala b/compiler/test/dotty/tools/dotc/CompilationTests.scala index 7c65516ba015..0da87dfc396a 100644 --- a/compiler/test/dotty/tools/dotc/CompilationTests.scala +++ b/compiler/test/dotty/tools/dotc/CompilationTests.scala @@ -197,7 +197,7 @@ class CompilationTests extends ParallelTesting { compileDir("../compiler/src/dotty/tools/dotc/config", picklingOptions) + compileDir("../compiler/src/dotty/tools/dotc/parsing", picklingOptions) + compileDir("../compiler/src/dotty/tools/dotc/printing", picklingOptions) + - compileDir("../repl/src/dotty/tools/repl", picklingOptions) + + compileDir("../compiler/src/dotty/tools/repl", picklingOptions) + compileDir("../compiler/src/dotty/tools/dotc/rewrite", picklingOptions) + compileDir("../compiler/src/dotty/tools/dotc/transform", picklingOptions) + compileDir("../compiler/src/dotty/tools/dotc/typer", picklingOptions) + diff --git a/repl/test/dotty/tools/repl/CompilerTests.scala b/compiler/test/dotty/tools/repl/CompilerTests.scala similarity index 100% rename from repl/test/dotty/tools/repl/CompilerTests.scala rename to compiler/test/dotty/tools/repl/CompilerTests.scala diff --git a/repl/test/dotty/tools/repl/ReplTest.scala b/compiler/test/dotty/tools/repl/ReplTest.scala similarity index 100% rename from repl/test/dotty/tools/repl/ReplTest.scala rename to compiler/test/dotty/tools/repl/ReplTest.scala diff --git a/repl/test/dotty/tools/repl/ScriptedTests.scala b/compiler/test/dotty/tools/repl/ScriptedTests.scala similarity index 100% rename from repl/test/dotty/tools/repl/ScriptedTests.scala rename to compiler/test/dotty/tools/repl/ScriptedTests.scala diff --git a/repl/test/dotty/tools/repl/TabcompleteTests.scala b/compiler/test/dotty/tools/repl/TabcompleteTests.scala similarity index 100% rename from repl/test/dotty/tools/repl/TabcompleteTests.scala rename to compiler/test/dotty/tools/repl/TabcompleteTests.scala diff --git a/repl/test/dotty/tools/repl/TypeTests.scala b/compiler/test/dotty/tools/repl/TypeTests.scala similarity index 100% rename from repl/test/dotty/tools/repl/TypeTests.scala rename to compiler/test/dotty/tools/repl/TypeTests.scala diff --git a/project/Build.scala b/project/Build.scala index 9eb36e2a184d..50d05fec03e2 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -130,6 +130,7 @@ object Build { javaSource in Compile := baseDirectory.value / "src", javaSource in Test := baseDirectory.value / "test", resourceDirectory in Compile := baseDirectory.value / "resources", + resourceDirectory in Test := baseDirectory.value / "test-resources", // Prevent sbt from rewriting our dependencies ivyScala ~= (_ map (_ copy (overrideScalaVersion = false))) @@ -407,7 +408,6 @@ object Build { settings(commonBootstrappedSettings). settings(dottyDocSettings) - lazy val `dotty-bot` = project.in(file("bot")). settings(commonScala2Settings). settings( From 94bdcf544216b0babd591a112c2e209fbfc8cf01 Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Tue, 29 Aug 2017 09:02:57 +0200 Subject: [PATCH 2/4] Move `UserFacingPrinter` to `printing` package --- .../printing}/UserFacingPrinter.scala | 42 +++++++++---------- .../dotty/tools/dotc/printing/package.scala | 6 +++ compiler/src/dotty/tools/repl/package.scala | 6 +-- 3 files changed, 28 insertions(+), 26 deletions(-) rename compiler/src/dotty/tools/{repl => dotc/printing}/UserFacingPrinter.scala (85%) diff --git a/compiler/src/dotty/tools/repl/UserFacingPrinter.scala b/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala similarity index 85% rename from compiler/src/dotty/tools/repl/UserFacingPrinter.scala rename to compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala index 951852bdc543..a6fea7d9e79a 100644 --- a/compiler/src/dotty/tools/repl/UserFacingPrinter.scala +++ b/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala @@ -1,25 +1,25 @@ -package dotty.tools -package repl +package dotty.tools.dotc +package printing -import dotc.ast.Trees.{ Untyped, Tree } -import dotc.core.Annotations.Annotation -import dotc.core.Constants.Constant -import dotc.core.Contexts.Context -import dotc.core.Denotations.{ Denotation, MultiDenotation, SingleDenotation } -import dotc.core.Flags._ -import dotc.core.TypeApplications.{ AppliedType, EtaExpansion } -import dotc.core.Names._ -import dotc.core.NameOps._ -import dotc.core.StdNames._ -import dotc.core.Decorators._ -import dotc.core.Scopes.Scope -import dotc.core.Symbols.{ Symbol, ClassSymbol, defn } -import dotc.core.SymDenotations.NoDenotation -import dotc.core.Types._ -import dotc.printing.Texts._ -import dotc.printing.{ GlobalPrec, DotPrec, Printer, PlainPrinter, RefinedPrinter } -import dotc.typer.Implicits.SearchResult -import dotc.typer.ImportInfo +import ast.Trees.{ Untyped, Tree } +import core._ +import Annotations.Annotation +import Constants.Constant +import Contexts.Context +import Denotations.{ Denotation, MultiDenotation, SingleDenotation } +import Flags._ +import TypeApplications.{ AppliedType, EtaExpansion } +import Names._ +import NameOps._ +import StdNames._ +import Decorators._ +import Scopes.Scope +import Symbols.{ Symbol, ClassSymbol, defn } +import SymDenotations.NoDenotation +import Types._ +import Texts._ +import typer.Implicits.SearchResult +import typer.ImportInfo class UserFacingPrinter(_ctx: Context) extends RefinedPrinter(_ctx) { diff --git a/compiler/src/dotty/tools/dotc/printing/package.scala b/compiler/src/dotty/tools/dotc/printing/package.scala index e2c0dda1b57e..c7d04cd05a3e 100644 --- a/compiler/src/dotty/tools/dotc/printing/package.scala +++ b/compiler/src/dotty/tools/dotc/printing/package.scala @@ -20,4 +20,10 @@ package object printing { * -Xprint will print `sym.name` instead of `sym.originalName` */ val XprintMode = new Key[Unit] + + /** @pre `nel` is non-empty list */ + private[printing] implicit class ListOps[A](val nel: List[A]) extends AnyVal { + def intersperse(a: A): List[A] = + nel.flatMap(a :: _ :: Nil).tail + } } diff --git a/compiler/src/dotty/tools/repl/package.scala b/compiler/src/dotty/tools/repl/package.scala index f1fa141e0cb1..4d73926647cd 100644 --- a/compiler/src/dotty/tools/repl/package.scala +++ b/compiler/src/dotty/tools/repl/package.scala @@ -4,6 +4,7 @@ import dotc.core.Contexts.Context import dotc.core.Symbols.Symbol import dotc.core.Denotations.Denotation import dotc.reporting.diagnostic.MessageContainer +import dotc.printing.UserFacingPrinter import dotc.reporting.{ StoreReporter, @@ -17,11 +18,6 @@ package object repl { new StoreReporter(null) with UniqueMessagePositions with HideNonSensicalMessages - private[repl] implicit class ListOps[A](val nel: List[A]) extends AnyVal { - def intersperse(a: A): List[A] = - nel.flatMap(a :: _ :: Nil).tail - } - private[repl] implicit class ShowUser(val s: Symbol) extends AnyVal { def showUser(implicit ctx: Context): String = { val printer = new UserFacingPrinter(ctx) From e0139bf8fae53456c9a117f8e9f02d57214ca02c Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Tue, 29 Aug 2017 09:26:25 +0200 Subject: [PATCH 3/4] Fix #3025: remove duplicated logic from `UserFacingPrinter` --- .../dotc/printing/UserFacingPrinter.scala | 58 ++----------------- compiler/test-resources/repl/i2554 | 4 +- 2 files changed, 7 insertions(+), 55 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala b/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala index a6fea7d9e79a..5805dcfd73ee 100644 --- a/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala +++ b/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala @@ -1,30 +1,15 @@ package dotty.tools.dotc package printing -import ast.Trees.{ Untyped, Tree } import core._ -import Annotations.Annotation -import Constants.Constant -import Contexts.Context -import Denotations.{ Denotation, MultiDenotation, SingleDenotation } -import Flags._ -import TypeApplications.{ AppliedType, EtaExpansion } -import Names._ -import NameOps._ -import StdNames._ -import Decorators._ -import Scopes.Scope -import Symbols.{ Symbol, ClassSymbol, defn } -import SymDenotations.NoDenotation -import Types._ -import Texts._ +import Constants.Constant, Contexts.Context, Denotations._, Flags._, Names._ +import NameOps._, StdNames._, Decorators._, Scopes.Scope, Types._, Texts._ +import SymDenotations.NoDenotation, Symbols.{ Symbol, ClassSymbol, defn } import typer.Implicits.SearchResult import typer.ImportInfo class UserFacingPrinter(_ctx: Context) extends RefinedPrinter(_ctx) { - private def panic(msg: String): Nothing = throw new AssertionError(msg) - private[this] def getPkgCls(path: String) = _ctx.requiredPackage(path).moduleClass.asClass @@ -45,7 +30,7 @@ class UserFacingPrinter(_ctx: Context) extends RefinedPrinter(_ctx) { def wellKnownPkg(pkgSym: Symbol) = standardPkg(pkgSym) || wrappedName(pkgSym) override protected def keyString(sym: Symbol): String = { - val flags = sym.flags + val flags = sym.flagsUNSAFE if (flags is Package) "" else if (sym.isPackageObject) "package object" else if (flags.is(Module) && flags.is(Case)) "case object" @@ -68,7 +53,7 @@ class UserFacingPrinter(_ctx: Context) extends RefinedPrinter(_ctx) { toText(sym) ~ { if (sym.is(Method)) toText(sym.info) else if (sym.isClass) "" - else if (sym.isType && sym.info.isInstanceOf[TypeAlias]) " =" ~~ toText(sym.info) + else if (sym.isType && sym.info.isInstanceOf[TypeAlias]) toText(sym.info) else if (sym.isType) "" else { ":" ~~ toText(sym.info) @@ -78,48 +63,17 @@ class UserFacingPrinter(_ctx: Context) extends RefinedPrinter(_ctx) { override def toText(const: Constant): Text = Str(const.value.toString) override def toText(tp: Type): Text = tp match { - case tp: AnnotatedType => toText(tp.tpe) ~~ toText(tp.annot) case tp: ConstantType => toText(tp.value) - case tp: TypeAlias => toText(tp.underlying) case ExprType(result) => ":" ~~ toText(result) - case TypeBounds(lo, hi) => - { if (lo != defn.NothingType) toText(lo) ~~ ">: _" else Str("_") } ~~ - { if (hi != defn.AnyType) "<:" ~~ toText(hi) else Text() } case tp: TypeRef => tp.info match { case TypeAlias(alias) => toText(alias) case _ => toText(tp.info) } case tp: ParamRef => { - val name = tp.paramName.unexpandedName.invariantName.toString + val name = ParamRefNameString(tp.paramName) if (tp.isInstanceOf[TermParamRef]) name ~ ".type" else name } - case EtaExpansion(tycon) => toText(tycon) - case PolyType(params, res) => - "[" ~ Fluid(params.map(tl => toText(tl.toArg)).intersperse(Str(", "))) ~ "]" ~ toText(res) - case tp: MethodType => { - def paramText(name: TermName, tp: Type) = toText(name) ~ ": " ~ toText(tp) - changePrec(GlobalPrec) { - (if (tp.isImplicit) "(implicit " else "(") ~ - Text((tp.paramNames, tp.paramInfos).zipped map paramText, ", ") ~ - (if (tp.resultType.isInstanceOf[MethodType]) ")" else "): ") ~ - toText(tp.resultType) - } - } - case AppliedType(tycon, args) => { - def toTextInfixType(tycon: Type, args: List[Type]): Text = { - // TODO: blatant copy from `RefinedPrinter` - val l :: r :: Nil = args - val isRightAssoc = tycon.typeSymbol.name.endsWith(":") - val leftArg = if (isRightAssoc && l.isInfixType) "(" ~ toText(l) ~ ")" else toText(l) - val rightArg = if (!isRightAssoc && r.isInfixType) "(" ~ toText(r) ~ ")" else toText(r) - leftArg ~~ atPrec(DotPrec) { tycon.toText(this) } ~~ rightArg - } - if (tp.isInfixType) toTextInfixType(tycon, args) - else { - toText(tycon) ~ "[" ~ Fluid(args.reverse.map(toText).intersperse(Str(", "))) ~ "]" - } - } case tp: ClassInfo => { if (wellKnownPkg(tp.cls.owner)) nameString(tp.cls.name) diff --git a/compiler/test-resources/repl/i2554 b/compiler/test-resources/repl/i2554 index 2830056997be..b8d88dee119c 100644 --- a/compiler/test-resources/repl/i2554 +++ b/compiler/test-resources/repl/i2554 @@ -4,6 +4,4 @@ scala> import foo._ scala> implicit val shape: Shape[_ <: FlatShapeLevel, Int, Int, _] = null implicit val shape: foo.Shape[_ <: foo.FlatShapeLevel, Int, Int, _] = null scala> def hint = Shape.tuple2Shape(shape, shape) -def hint: foo.Shape[foo.FlatShapeLevel, Tuple2[Int, Int], Tuple2[Int, Int], - Tuple2 -[_, _]] +def hint: foo.Shape[foo.FlatShapeLevel, (Int, Int), (Int, Int), ()] From f7e9af9401e1fd3b98ebe04211b8a6978a6e70b1 Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Tue, 29 Aug 2017 15:05:30 +0200 Subject: [PATCH 4/4] Adapt `RefinedPrinter` to eliminate duplication in `UserFacingPrinter` --- .../tools/dotc/printing/RefinedPrinter.scala | 5 +++ .../dotc/printing/UserFacingPrinter.scala | 41 +++++-------------- .../test-resources/type-printer/functions | 2 + .../dotc/reporting/ErrorMessagesTests.scala | 2 +- 4 files changed, 18 insertions(+), 32 deletions(-) create mode 100644 compiler/test-resources/type-printer/functions diff --git a/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala b/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala index f5e99390f1df..49da2dc136ee 100644 --- a/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala +++ b/compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala @@ -662,6 +662,11 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) { override protected def keyString(sym: Symbol): String = { val flags = sym.flagsUNSAFE if (sym.isType && sym.owner.isTerm) "" + else if (sym.isPackageObject) "package object" + else if (flags.is(Module) && flags.is(Case)) "case object" + else if (sym.isClass && flags.is(Case)) "case class" + else if (flags is Module) "object" + else if (sym.isTerm && !flags.is(Param) && flags.is(Implicit)) "implicit val" else super.keyString(sym) } diff --git a/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala b/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala index 5805dcfd73ee..23ea813b6e81 100644 --- a/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala +++ b/compiler/src/dotty/tools/dotc/printing/UserFacingPrinter.scala @@ -5,8 +5,6 @@ import core._ import Constants.Constant, Contexts.Context, Denotations._, Flags._, Names._ import NameOps._, StdNames._, Decorators._, Scopes.Scope, Types._, Texts._ import SymDenotations.NoDenotation, Symbols.{ Symbol, ClassSymbol, defn } -import typer.Implicits.SearchResult -import typer.ImportInfo class UserFacingPrinter(_ctx: Context) extends RefinedPrinter(_ctx) { @@ -29,17 +27,8 @@ class UserFacingPrinter(_ctx: Context) extends RefinedPrinter(_ctx) { def wellKnownPkg(pkgSym: Symbol) = standardPkg(pkgSym) || wrappedName(pkgSym) - override protected def keyString(sym: Symbol): String = { - val flags = sym.flagsUNSAFE - if (flags is Package) "" - else if (sym.isPackageObject) "package object" - else if (flags.is(Module) && flags.is(Case)) "case object" - else if (sym.isClass && flags.is(Case)) "case class" - else if (flags.is(Lazy)) "lazy val" - else if (flags is Module) "object" - else if (sym.isTerm && !flags.is(Param) && flags.is(Implicit)) "implicit val" - else super.keyString(sym) - } + override protected def keyString(sym: Symbol): String = + if (sym.flagsUNSAFE is Package) "" else super.keyString(sym) override def nameString(name: Name): String = if (name.isReplAssignName) name.decode.toString.takeWhile(_ != '$') @@ -49,34 +38,24 @@ class UserFacingPrinter(_ctx: Context) extends RefinedPrinter(_ctx) { if (sym.name.isReplAssignName) nameString(sym.name) else keyString(sym) ~~ nameString(sym.name.stripModuleClassSuffix) - override def dclText(sym: Symbol): Text = - toText(sym) ~ { - if (sym.is(Method)) toText(sym.info) - else if (sym.isClass) "" - else if (sym.isType && sym.info.isInstanceOf[TypeAlias]) toText(sym.info) - else if (sym.isType) "" - else { - ":" ~~ toText(sym.info) - } - } + override def dclText(sym: Symbol): Text = toText(sym) ~ { + if (sym.is(Method)) toText(sym.info) + else if (sym.isType && sym.info.isInstanceOf[TypeAlias]) toText(sym.info) + else if (sym.isType || sym.isClass) "" + else ":" ~~ toText(sym.info) + } override def toText(const: Constant): Text = Str(const.value.toString) override def toText(tp: Type): Text = tp match { - case tp: ConstantType => toText(tp.value) case ExprType(result) => ":" ~~ toText(result) + case tp: ConstantType => toText(tp.value) case tp: TypeRef => tp.info match { case TypeAlias(alias) => toText(alias) case _ => toText(tp.info) } - case tp: ParamRef => { - val name = ParamRefNameString(tp.paramName) - if (tp.isInstanceOf[TermParamRef]) name ~ ".type" - else name - } case tp: ClassInfo => { - if (wellKnownPkg(tp.cls.owner)) - nameString(tp.cls.name) + if (wellKnownPkg(tp.cls.owner)) nameString(tp.cls.name) else { def printPkg(sym: ClassSymbol): Text = if (sym.owner == defn.RootClass || wrappedName(sym.owner)) diff --git a/compiler/test-resources/type-printer/functions b/compiler/test-resources/type-printer/functions new file mode 100644 index 000000000000..6d0bcd7e92da --- /dev/null +++ b/compiler/test-resources/type-printer/functions @@ -0,0 +1,2 @@ +scala> val toInt: Any => Int = new { def apply(a: Any) = 1; override def toString() = "" } +val toInt: Any => Int = diff --git a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala index c325e1497509..9a4d40fb6397 100644 --- a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala +++ b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala @@ -365,7 +365,7 @@ class ErrorMessagesTests extends ErrorMessagesTest { @Test def methodDoesNotTakePrameters = checkMessagesAfter("frontend") { """ - |object Scope{ + |object Scope { | def foo = () | foo() |}