Skip to content

Commit 0d7826c

Browse files
authored
Merge pull request #5014 from skvithalani/master
Add enum example in documentation and a test for 'case class cannot extend enum'
2 parents 2bdb5ae + 843e52a commit 0d7826c

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,20 @@ 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+
2236
@Test def typeMismatch =
2337
checkMessagesAfter(FrontEnd.name) {
2438
"""

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

tests/pending/neg/i5008

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
enum Foo {}
2+
enum Bar extends Foo {} // error

0 commit comments

Comments
 (0)