Skip to content

Commit 4fefb64

Browse files
authored
Merge pull request #3437 from AurelienRichez/floss-spree-scala-io/package-name-already-defined
new format for "package name already defined" error (+tests)
2 parents 635d668 + 72432f4 commit 4fefb64

File tree

4 files changed

+23
-1
lines changed

4 files changed

+23
-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
@@ -113,6 +113,7 @@ public enum ErrorMessageID {
113113
IllegalStartOfStatementID,
114114
TraitIsExpectedID,
115115
TraitRedefinedFinalMethodFromAnyRefID,
116+
PackageNameAlreadyDefinedID,
116117
;
117118

118119
public int errorNumber() {

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1922,4 +1922,11 @@ object messages {
19221922
val msg = hl"Traits cannot redefine final $method from ${"class AnyRef"}."
19231923
val explanation = ""
19241924
}
1925+
1926+
case class PackageNameAlreadyDefined(pkg: Symbol)(implicit ctx: Context) extends Message(PackageNameAlreadyDefinedID) {
1927+
val msg = hl"${pkg} is already defined, cannot be a ${"package"}"
1928+
val kind = "Naming"
1929+
val explanation =
1930+
hl"An ${"object"} cannot have the same name as an existing ${"package"}. Rename either one of them."
1931+
}
19251932
}

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
@@ -1189,4 +1189,18 @@ class ErrorMessagesTests extends ErrorMessagesTest {
11891189
assertEquals("method wait", method.show)
11901190
}
11911191

1192+
1193+
@Test def packageNameAlreadyDefined =
1194+
checkMessagesAfter("frontend") {
1195+
"""
1196+
|package bar { }
1197+
|object bar { }
1198+
|
1199+
""".stripMargin
1200+
}.expect { (ictx, messages) =>
1201+
implicit val ctx: Context = ictx
1202+
1203+
val PackageNameAlreadyDefined(pkg) = messages.head
1204+
assertEquals(pkg.show, "object bar")
1205+
}
11921206
}

0 commit comments

Comments
 (0)