diff options
author | Samuel Gruetter <samuel.gruetter@epfl.ch> | 2014-03-26 16:12:59 +0100 |
---|---|---|
committer | Samuel Gruetter <samuel.gruetter@epfl.ch> | 2014-04-02 14:55:40 +0200 |
commit | a846ccf9efffefc55e0750921096aa323a4f4d04 (patch) | |
tree | db5d0fdae42cb4efaa5ede0a3e7eab1375c8e3e1 | |
parent | 2033b5607a41b77590b8d23bf5c40c906a0b42e7 (diff) | |
download | dotty-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.scala | 1 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/Decorators.scala | 33 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/Checking.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/ErrorReporting.scala | 38 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/ImportInfo.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/Inferencing.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/ProtoTypes.scala | 2 |
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 |