Skip to content

Commit 62292f2

Browse files
Hermes Espínola Gonzáleznicolasstucki
Hermes Espínola González
authored andcommitted
Error msg/stable identifiers (#5334)
* stable identifier message * stable identifiers test * assert message text * rewrite error message
1 parent 9b192c4 commit 62292f2

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-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
@@ -141,7 +141,8 @@ public enum ErrorMessageID {
141141
LazyStaticFieldID,
142142
StaticOverridingNonStaticMembersID,
143143
OverloadInRefinementID,
144-
NoMatchingOverloadID
144+
NoMatchingOverloadID,
145+
StableIdentPatternID
145146
;
146147

147148
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
@@ -2191,4 +2191,11 @@ object messages {
21912191
val kind: String = "Type Mismatch"
21922192
val explanation: String = ""
21932193
}
2194+
case class StableIdentPattern(tree: untpd.Tree, pt: Type)(implicit val ctx: Context)
2195+
extends Message(StableIdentPatternID) {
2196+
override def kind: String = "Syntax"
2197+
override def msg: String =
2198+
hl"""Stable identifier required, but ${tree.show} found"""
2199+
override def explanation: String = ""
2200+
}
21942201
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ class Typer extends Namer
414414
!pt.isInstanceOf[ApplyingProto] &&
415415
!tree.tpe.isStable &&
416416
!isWildcardArg(tree))
417-
ctx.error(s"stable identifier required, but ${tree.show} found", tree.pos)
417+
ctx.error(StableIdentPattern(tree, pt), tree.pos)
418418

419419
tree
420420
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1605,4 +1605,24 @@ class ErrorMessagesTests extends ErrorMessagesTest {
16051605
message.msg
16061606
)
16071607
}
1608+
1609+
@Test def StableIdentifiers() =
1610+
checkMessagesAfter(FrontEnd.name) {
1611+
"""
1612+
| object Test {
1613+
| var x = 2
1614+
| def test = 2 match {
1615+
| case `x` => x + 1
1616+
| }
1617+
| }
1618+
""".stripMargin
1619+
}.expect { (_, messages) =>
1620+
assertMessageCount(1, messages)
1621+
val message = messages.head
1622+
assertTrue(message.isInstanceOf[StableIdentPattern])
1623+
assertEquals(
1624+
"Stable identifier required, but `x` found",
1625+
message.msg
1626+
)
1627+
}
16081628
}

0 commit comments

Comments
 (0)