Skip to content

Commit 37b705e

Browse files
committed
#5008: Add enum example in documentation and a test for 'case class cannot extend enum'
1 parent 675b2ac commit 37b705e

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,30 @@ class ErrorMessagesTests extends ErrorMessagesTest {
1919
checkMessagesAfter(FrontEnd.name)("""class Foo""")
2020
.expectNoErrors
2121

22+
@Test def caseClassExtendsEnum =
23+
checkMessagesAfter(RefChecks.name) {
24+
"""
25+
| enum Foo {}
26+
| case class Bar() extends Foo
27+
""".stripMargin
28+
}
29+
.expect { (ictx, messages)
30+
implicit val ctx: Context = ictx
31+
assertMessageCount(1, messages)
32+
val errorMsg = messages.head
33+
assertEquals("normal case class Bar in package <empty> cannot extend an enum", errorMsg.msg)
34+
}
35+
36+
// FIXME
37+
@Test def enumExtendsAnothorEnum =
38+
checkMessagesAfter(RefChecks.name) {
39+
"""
40+
| enum Foo {}
41+
| enum Bar extends Foo {}
42+
""".stripMargin
43+
}
44+
.expectNoErrors
45+
2246
@Test def typeMismatch =
2347
checkMessagesAfter(FrontEnd.name) {
2448
"""

docs/docs/reference/enums/enums.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,35 @@ object Planet {
8888
println(s"Your weight on $p is ${p.surfaceWeight(mass)}")
8989
}
9090
}
91+
```
92+
### A specific use case of enum
93+
94+
Two enums can be combined into a different type as shown below:
95+
96+
```scala
97+
98+
trait Animal
99+
object Animal {
100+
def enumValues: Iterable[Animal] = Dog.enumValues ++ Cat.enumValues
101+
def enumValueNamed = Dog.enumValueNamed ++ Cat.enumValueNamed
102+
}
103+
104+
enum Dog extends Animal {
105+
case GermanShepherd, Labrador, Boxer
106+
}
107+
108+
enum Cat extends Animal {
109+
case PersianCat, Ragdoll, ScottishFold
110+
}
111+
112+
object Main {
113+
def main(args: Array[String]): Unit = {
114+
val values: Iterable[Animal] = Animal.enumValues
115+
val boxer_dog: Animal = Animal.enumValueNamed("Boxer")
116+
val ragdoll_cat: Animal = Animal.enumValueNamed("Ragdoll")
117+
}
118+
}
119+
91120
```
92121

93122
### Implementation

0 commit comments

Comments
 (0)