diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index 227d78a20bb7..17d5510c6729 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -2384,7 +2384,7 @@ object Parsers { if (in.token == CASE) syntaxErrorOrIncomplete(OnlyCaseClassOrCaseObjectAllowed()) else - syntaxErrorOrIncomplete("expected class or object definition") + syntaxErrorOrIncomplete(ExpectedClassOrObjectDef()) if (mustStartStat) // do parse all definitions even if they are probably local (i.e. a "}" has been forgotten) defOrDcl(in.offset, defAnnotsMods(modifierTokens)) } diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java index 638df8c16ea0..c7b724b70cad 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java @@ -87,6 +87,7 @@ public enum ErrorMessageID { ValueClassParameterMayNotBeAVarID, ValueClassNeedsExactlyOneValParamID, OnlyCaseClassOrCaseObjectAllowedID, + ExpectedClassOrObjectDefID, ; public int errorNumber() { diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala index 6156d9d651b4..621ab3efcf96 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala @@ -1573,4 +1573,11 @@ object messages { val explanation = "" } + case class ExpectedClassOrObjectDef()(implicit ctx: Context) + extends Message(ExpectedClassOrObjectDefID) { + val kind = "Syntax" + val msg = "expected class or object definition" + val explanation = "" + } + } diff --git a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala index 9a13655890bf..1e5f73fe2cbd 100644 --- a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala +++ b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala @@ -792,4 +792,15 @@ class ErrorMessagesTests extends ErrorMessagesTest { assertEquals(err, OnlyCaseClassOrCaseObjectAllowed()) } + @Test def expectedClassOrObjectDef = + checkMessagesAfter("frontend") { + """Foo""" + } + .expect { (ictx, messages) => + implicit val ctx: Context = ictx + assertMessageCount(1, messages) + val err :: Nil = messages + assertEquals(err, ExpectedClassOrObjectDef()) + } + }