aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Gruetter <samuel.gruetter@epfl.ch>2014-03-26 16:12:59 +0100
committerSamuel Gruetter <samuel.gruetter@epfl.ch>2014-04-02 14:55:40 +0200
commita846ccf9efffefc55e0750921096aa323a4f4d04 (patch)
treedb5d0fdae42cb4efaa5ede0a3e7eab1375c8e3e1
parent2033b5607a41b77590b8d23bf5c40c906a0b42e7 (diff)
downloaddotty-a846ccf9efffefc55e0750921096aa323a4f4d04.tar.gz
dotty-a846ccf9efffefc55e0750921096aa323a4f4d04.tar.bz2
dotty-a846ccf9efffefc55e0750921096aa323a4f4d04.zip
move InfoString from ErrorReporting to Decorators and
remove all isSensical/SuppressedMessage logic from InfoString
-rw-r--r--src/dotty/tools/dotc/ast/Desugar.scala1
-rw-r--r--src/dotty/tools/dotc/core/Decorators.scala33
-rw-r--r--src/dotty/tools/dotc/typer/Checking.scala2
-rw-r--r--src/dotty/tools/dotc/typer/ErrorReporting.scala38
-rw-r--r--src/dotty/tools/dotc/typer/ImportInfo.scala2
-rw-r--r--src/dotty/tools/dotc/typer/Inferencing.scala2
-rw-r--r--src/dotty/tools/dotc/typer/ProtoTypes.scala2
7 files changed, 36 insertions, 44 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala
index ea9e7566a..8d891b9d9 100644
--- a/src/dotty/tools/dotc/ast/Desugar.scala
+++ b/src/dotty/tools/dotc/ast/Desugar.scala
@@ -9,7 +9,6 @@ import Decorators._
import language.higherKinds
import collection.mutable.ListBuffer
import config.Printers._
-import typer.ErrorReporting.InfoString
import typer.Mode
object desugar {
diff --git a/src/dotty/tools/dotc/core/Decorators.scala b/src/dotty/tools/dotc/core/Decorators.scala
index 21f914d99..25b5dbabc 100644
--- a/src/dotty/tools/dotc/core/Decorators.scala
+++ b/src/dotty/tools/dotc/core/Decorators.scala
@@ -3,7 +3,7 @@ package core
import annotation.tailrec
import Symbols._
-import Contexts._, Names._, Phases._, printing.Texts._, printing.Printer
+import Contexts._, Names._, Phases._, printing.Texts._, printing.Printer, printing.Showable
import util.Positions.Position, util.SourcePosition
import collection.mutable.ListBuffer
import dotty.tools.dotc.transform.TreeTransforms._
@@ -136,5 +136,36 @@ object Decorators {
implicit def sourcePos(pos: Position)(implicit ctx: Context): SourcePosition =
ctx.source.atPos(pos)
+
+ /** The i"..." string interpolator adds two features to the s interpolator:
+ * 1) On all Showables, `show` is called instead of `toString`
+ * 2) Lists can be formatted using the desired separator between two `%` signs,
+ * eg `i"myList = (${myList}%, %)"`
+ */
+ implicit class InfoString(val sc: StringContext) extends AnyVal {
+
+ def i(args: Any*)(implicit ctx: Context): String = {
+
+ def treatArg(arg: Any, suffix: String): (Any, String) = arg match {
+ case arg: Seq[_] if suffix.nonEmpty && suffix.head == '%' =>
+ val (rawsep, rest) = suffix.tail.span(_ != '%')
+ val sep = StringContext.treatEscapes(rawsep)
+ if (rest.nonEmpty) (arg map treatSingleArg mkString sep, rest.tail)
+ else (arg, suffix)
+ case _ =>
+ (treatSingleArg(arg), suffix)
+ }
+
+ def treatSingleArg(arg: Any) : Any = arg match {
+ case arg: Showable => arg.show
+ case _ => arg
+ }
+
+ val prefix :: suffixes = sc.parts.toList
+ val (args1, suffixes1) = (args, suffixes).zipped.map(treatArg(_, _)).unzip
+ new StringContext(prefix :: suffixes1.toList: _*).s(args1: _*)
+ }
+ }
+
}
diff --git a/src/dotty/tools/dotc/typer/Checking.scala b/src/dotty/tools/dotc/typer/Checking.scala
index 5818da180..dcb0781c6 100644
--- a/src/dotty/tools/dotc/typer/Checking.scala
+++ b/src/dotty/tools/dotc/typer/Checking.scala
@@ -14,7 +14,7 @@ import util.{Stats, SimpleMap}
import util.common._
import Decorators._
import Uniques._
-import ErrorReporting.{errorType, InfoString}
+import ErrorReporting.errorType
import config.Printers._
import collection.mutable
diff --git a/src/dotty/tools/dotc/typer/ErrorReporting.scala b/src/dotty/tools/dotc/typer/ErrorReporting.scala
index 397285f6a..5e7faab22 100644
--- a/src/dotty/tools/dotc/typer/ErrorReporting.scala
+++ b/src/dotty/tools/dotc/typer/ErrorReporting.scala
@@ -105,42 +105,4 @@ object ErrorReporting {
def err(implicit ctx: Context): Errors = new Errors
- /** Implementation of i"..." string interpolator */
- implicit class InfoString(val sc: StringContext) extends AnyVal {
-
- def i(args: Any*)(implicit ctx: Context): String = {
-
- def isSensical(arg: Any): Boolean = arg match {
- case tpe: Type if tpe.isErroneous => false
- case NoType => false
- case sym: Symbol if sym.isCompleted =>
- sym.info != ErrorType && sym.info != TypeAlias(ErrorType) && sym.info != NoType
- case _ => true
- }
-
- def treatArg(arg: Any, suffix: String): (Any, String) = arg match {
- case arg: List[_] if suffix.nonEmpty && suffix.head == '%' =>
- val (rawsep, rest) = suffix.tail.span(_ != '%')
- val sep = StringContext.treatEscapes(rawsep)
- if (rest.nonEmpty) (arg map treatSingleArg mkString sep, rest.tail)
- else (arg, suffix)
- case _ =>
- (treatSingleArg(arg), suffix)
- }
-
- def treatSingleArg(arg: Any) : Any = arg match {
- case arg: Showable => arg.show
- case _ => arg
- }
-
- if (ctx.reporter.hasErrors &&
- ctx.suppressNonSensicalErrors &&
- !ctx.settings.YshowSuppressedErrors.value &&
- !args.forall(isSensical(_)))
- throw new SuppressedMessage
- val prefix :: suffixes = sc.parts.toList
- val (args1, suffixes1) = (args, suffixes).zipped.map(treatArg(_, _)).unzip
- new StringContext(prefix :: suffixes1.toList: _*).s(args1: _*)
- }
- }
} \ No newline at end of file
diff --git a/src/dotty/tools/dotc/typer/ImportInfo.scala b/src/dotty/tools/dotc/typer/ImportInfo.scala
index 8c5f0c1e6..9fbd07102 100644
--- a/src/dotty/tools/dotc/typer/ImportInfo.scala
+++ b/src/dotty/tools/dotc/typer/ImportInfo.scala
@@ -7,7 +7,7 @@ import ast.Trees._
import core._
import util.SimpleMap
import Symbols._, Names._, Denotations._, Types._, Contexts._, StdNames._, Flags._
-import typer.ErrorReporting.InfoString
+import Decorators.InfoString
object ImportInfo {
/** The import info for a root import from given symbol `sym` */
diff --git a/src/dotty/tools/dotc/typer/Inferencing.scala b/src/dotty/tools/dotc/typer/Inferencing.scala
index 173ac3aeb..a6ac6b6b4 100644
--- a/src/dotty/tools/dotc/typer/Inferencing.scala
+++ b/src/dotty/tools/dotc/typer/Inferencing.scala
@@ -15,7 +15,7 @@ import util.{Stats, SimpleMap}
import util.common._
import Decorators._
import Uniques._
-import ErrorReporting.{errorType, InfoString}
+import ErrorReporting.errorType
import config.Printers._
import collection.mutable
diff --git a/src/dotty/tools/dotc/typer/ProtoTypes.scala b/src/dotty/tools/dotc/typer/ProtoTypes.scala
index 16869454f..aeba02648 100644
--- a/src/dotty/tools/dotc/typer/ProtoTypes.scala
+++ b/src/dotty/tools/dotc/typer/ProtoTypes.scala
@@ -14,7 +14,7 @@ import util.{Stats, SimpleMap}
import util.common._
import Decorators._
import Uniques._
-import ErrorReporting.{errorType, InfoString}
+import ErrorReporting.errorType
import config.Printers._
import collection.mutable