Skip to content

Commit a6f5fdd

Browse files
author
Aurélien Richez
committed
new format for package name already defined error (+tests)
1 parent f728134 commit a6f5fdd

File tree

4 files changed

+24
-1
lines changed

4 files changed

+24
-1
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public enum ErrorMessageID {
112112
UndefinedNamedTypeParameterID,
113113
IllegalStartOfStatementID,
114114
TraitIsExpectedID,
115+
PackageNameAlreadyDefinedID
115116
;
116117

117118
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
@@ -1916,4 +1916,12 @@ object messages {
19161916
|"""
19171917
}
19181918
}
1919+
1920+
case class PackageNameAlreadyDefined(pkg: Symbol)(implicit ctx: Context) extends Message(PackageNameAlreadyDefinedID) {
1921+
1922+
override def msg: String = hl"${pkg} is already defined, cannot be a package"
1923+
override def kind: String = "Syntax"
1924+
override def explanation: String =
1925+
"An object cannot have the same name as an existing package. Rename ${pkg} or the package with the same name."
1926+
}
19191927
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1522,7 +1522,7 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
15221522
val packageContext =
15231523
if (pkg is Package) ctx.fresh.setOwner(pkg.moduleClass).setTree(tree)
15241524
else {
1525-
ctx.error(em"$pkg is already defined, cannot be a package", tree.pos)
1525+
ctx.error(PackageNameAlreadyDefined(pkg), tree.pos)
15261526
ctx
15271527
}
15281528
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
@@ -1172,4 +1172,18 @@ class ErrorMessagesTests extends ErrorMessagesTest {
11721172
val TraitIsExpected(symbol) :: Nil = messages
11731173
assertEquals("class B", symbol.show)
11741174
}
1175+
1176+
@Test def packageNameAlreadyDefined =
1177+
checkMessagesAfter("frontend") {
1178+
"""
1179+
|package bar { }
1180+
|object bar { }
1181+
|
1182+
""".stripMargin
1183+
}.expect { (ictx, messages) =>
1184+
implicit val ctx: Context = ictx
1185+
1186+
assertMessageCount(1, messages)
1187+
assert(messages.head.isInstanceOf[PackageNameAlreadyDefined])
1188+
}
11751189
}

0 commit comments

Comments
 (0)