Skip to content

Commit 95fcac1

Browse files
author
Aurélien Richez
committed
new format for package name already defined error (+tests)
1 parent 42577bb commit 95fcac1

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ public enum ErrorMessageID {
110110
MissingEmptyArgumentListID,
111111
DuplicateNamedTypeParameterID,
112112
UndefinedNamedTypeParameterID,
113-
IllegalStartOfStatementID
113+
IllegalStartOfStatementID,
114+
PackageNameAlreadyDefinedID
114115
;
115116

116117
public int errorNumber() {

compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1888,4 +1888,12 @@ object messages {
18881888
}
18891889
val explanation = "A statement is either an import, a definition or an expression."
18901890
}
1891+
1892+
case class PackageNameAlreadyDefined(pkg: Symbol)(implicit ctx: Context) extends Message(PackageNameAlreadyDefinedID) {
1893+
1894+
override def msg: String = hl"${pkg} is already defined, cannot be a package"
1895+
override def kind: String = "Syntax"
1896+
override def explanation: String =
1897+
"An object cannot have the same name as an existing package. Rename ${pkg} or the package with the same name."
1898+
}
18911899
}

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1516,7 +1516,7 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
15161516
val packageContext =
15171517
if (pkg is Package) ctx.fresh.setOwner(pkg.moduleClass).setTree(tree)
15181518
else {
1519-
ctx.error(em"$pkg is already defined, cannot be a package", tree.pos)
1519+
ctx.error(PackageNameAlreadyDefined(pkg), tree.pos)
15201520
ctx
15211521
}
15221522
val stats1 = typedStats(tree.stats, pkg.moduleClass)(packageContext)

compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,4 +1151,18 @@ class ErrorMessagesTests extends ErrorMessagesTest {
11511151
assertEquals(IllegalStartOfStatement(isModifier = false), err)
11521152
assertEquals(IllegalStartOfStatement(isModifier = true), errWithModifier)
11531153
}
1154+
1155+
@Test def packageNameAlreadyDefined =
1156+
checkMessagesAfter("frontend") {
1157+
"""
1158+
|package bar { }
1159+
|object bar { }
1160+
|
1161+
""".stripMargin
1162+
}.expect { (ictx, messages) =>
1163+
implicit val ctx: Context = ictx
1164+
1165+
assertMessageCount(1, messages)
1166+
assert(messages.head.isInstanceOf[PackageNameAlreadyDefined])
1167+
}
11541168
}

0 commit comments

Comments
 (0)