-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Labels
itype:bugstat:needs triageEvery issue needs to have an "area" and "itype" labelEvery issue needs to have an "area" and "itype" label
Description
Compiler version
Scala CLI version: 1.12.2
Scala version (default): 3.8.1
Minimized code
//> using scala 3.8.1
//> using options -deprecation -feature -Wunused:all -Werror
import language.experimental.subCases
case class NotFound(id: String)
enum AcceptError:
case IsCancelled(id: String)
case Denial
case object CatastrophicError
type Error = NotFound | AcceptError | CatastrophicError.type
import AcceptError.*
def errorToString : Error => String =
case NotFound(id) => s"NotFound: $id"
case CatastrophicError => s"It is all doom"
case ae if ae match //this shouldn't trigger non-exhaustive warning ..
case Denial => s"In Denial"
case IsCancelled(id) => s"IsCancelled: $id"
@main def start =
val e = Denial
println(errorToString(e))Output
> scala-cli run -w sub-cases.scala
Compiling project (Scala 3.8.1, JVM (21))
[error] ./sub-cases.scala:17:3
[error] match may not be exhaustive.
[error]
[error] It would fail on pattern case: AcceptError.IsCancelled(_), Denial
[error] case NotFound(id) => s"NotFound: $id"
[error] ^
Error compiling project (Scala 3.8.1, JVM (21))
In Denial
Program exited with return code 0.
Watching sources, press Ctrl+C to exit, or press Enter to re-run.Expectation
Expect it to be exhaustive i.e. equivalent to compiler's behaviour when encountering this:
def errorToString : Error => String =
case NotFound(id) => s"NotFound: $id"
case CatastrophicError => s"It is all doom"
case Denial => s"In Denial"
case IsCancelled(id) => s"IsCancelled: $id"Another bothersome thing: Compiler spits out the warning as an error but the code is still run. Note the lines in the output:
Error compiling project (Scala 3.8.1, JVM (21))
In Denial
Program exited with return code 0.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
itype:bugstat:needs triageEvery issue needs to have an "area" and "itype" labelEvery issue needs to have an "area" and "itype" label