From e42bb303231b9c91f679c410d51455ba91df024d Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Wed, 28 Sep 2016 13:03:04 +0200 Subject: Change Message#errorId to type Int --- src/dotty/tools/dotc/reporting/ConsoleReporter.scala | 7 +++++-- src/dotty/tools/dotc/reporting/diagnostic/Message.scala | 6 ++++-- src/dotty/tools/dotc/reporting/diagnostic/messages.scala | 14 +++++++------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/dotty/tools/dotc/reporting/ConsoleReporter.scala b/src/dotty/tools/dotc/reporting/ConsoleReporter.scala index e4c24643b..8ded4035c 100644 --- a/src/dotty/tools/dotc/reporting/ConsoleReporter.scala +++ b/src/dotty/tools/dotc/reporting/ConsoleReporter.scala @@ -10,7 +10,7 @@ import java.io.{ BufferedReader, IOException, PrintWriter } import scala.reflect.internal.util._ import printing.SyntaxHighlighting._ import printing.Highlighting._ -import diagnostic.{ Message, MessageContainer } +import diagnostic.{ Message, MessageContainer, NoExplanation } import diagnostic.messages._ /** @@ -68,7 +68,10 @@ class ConsoleReporter( def posStr(pos: SourcePosition, diagnosticLevel: String, message: Message)(implicit ctx: Context) = if (pos.exists) Blue({ val file = pos.source.file.toString - val errId = if (message.errorId != "") s"[${message.errorId}] " else "" + val errId = + if (message.errorId != NoExplanation.ID) + s"[E${"0" * (3 - message.errorId.toString.length) + message.errorId}] " + else "" val kind = if (message.kind == "") diagnosticLevel else s"${message.kind} $diagnosticLevel" diff --git a/src/dotty/tools/dotc/reporting/diagnostic/Message.scala b/src/dotty/tools/dotc/reporting/diagnostic/Message.scala index e365851be..f19191f4f 100644 --- a/src/dotty/tools/dotc/reporting/diagnostic/Message.scala +++ b/src/dotty/tools/dotc/reporting/diagnostic/Message.scala @@ -15,7 +15,7 @@ object Message { new NoExplanation(str) } -abstract class Message(val errorId: String) { self => +abstract class Message(val errorId: Int) { self => import messages._ /** The `msg` contains the diagnostic message e.g: @@ -81,7 +81,7 @@ abstract class Message(val errorId: String) { self => } /** The fallback `Message` containing no explanation and having no `kind` */ -class NoExplanation(val msg: String) extends Message("") { +class NoExplanation(val msg: String) extends Message(NoExplanation.ID) { val explanation = "" val kind = "" } @@ -90,6 +90,8 @@ class NoExplanation(val msg: String) extends Message("") { * lacks an explanation */ object NoExplanation { + final val ID = -1 + def unapply(m: Message): Option[Message] = if (m.explanation == "") Some(m) else None diff --git a/src/dotty/tools/dotc/reporting/diagnostic/messages.scala b/src/dotty/tools/dotc/reporting/diagnostic/messages.scala index 11c6b43d9..4553a2d22 100644 --- a/src/dotty/tools/dotc/reporting/diagnostic/messages.scala +++ b/src/dotty/tools/dotc/reporting/diagnostic/messages.scala @@ -89,7 +89,7 @@ object messages { import dotc.ast.untpd // Syntax Errors ---------------------------------------------------------- // - abstract class EmptyCatchOrFinallyBlock(tryBody: untpd.Tree, errNo: String)(implicit ctx: Context) + abstract class EmptyCatchOrFinallyBlock(tryBody: untpd.Tree, errNo: Int)(implicit ctx: Context) extends Message(errNo) { val explanation = { val tryString = tryBody match { @@ -121,7 +121,7 @@ object messages { } case class EmptyCatchBlock(tryBody: untpd.Tree)(implicit ctx: Context) - extends EmptyCatchOrFinallyBlock(tryBody, "E001") { + extends EmptyCatchOrFinallyBlock(tryBody, 1) { val kind = "Syntax" val msg = hl"""|The ${"catch"} block does not contain a valid expression, try @@ -129,7 +129,7 @@ object messages { } case class EmptyCatchAndFinallyBlock(tryBody: untpd.Tree)(implicit ctx: Context) - extends EmptyCatchOrFinallyBlock(tryBody, "E002") { + extends EmptyCatchOrFinallyBlock(tryBody, 2) { val kind = "Syntax" val msg = hl"""|A ${"try"} without ${"catch"} or ${"finally"} is equivalent to putting @@ -137,7 +137,7 @@ object messages { } case class DeprecatedWithOperator()(implicit ctx: Context) - extends Message("E003") { + extends Message(3) { val kind = "Syntax" val msg = hl"""${"with"} as a type operator has been deprecated; use `&' instead""" @@ -168,7 +168,7 @@ object messages { // Type Errors ------------------------------------------------------------ // case class DuplicateBind(bind: untpd.Bind, tree: untpd.CaseDef)(implicit ctx: Context) - extends Message("E004") { + extends Message(4) { val kind = "Naming" val msg = em"duplicate pattern variable: `${bind.name}`" @@ -195,7 +195,7 @@ object messages { } case class MissingIdent(tree: untpd.Ident, treeKind: String, name: String)(implicit ctx: Context) - extends Message("E005") { + extends Message(5) { val kind = "Missing Identifier" val msg = em"not found: $treeKind$name" @@ -206,7 +206,7 @@ object messages { } case class TypeMismatch(found: Type, expected: Type, whyNoMatch: String = "", implicitFailure: String = "")(implicit ctx: Context) - extends Message("E006") { + extends Message(6) { val kind = "Type Mismatch" private val (where, printCtx) = Formatting.disambiguateTypes(found, expected) private val (fnd, exp) = Formatting.typeDiff(found, expected)(printCtx) -- cgit v1.2.3