Skip to content

Regression: "Unreachable case" warning in pattern match on StringContext #18601

Closed
@sirthias

Description

@sirthias

Compiler version

3.3.1

Minimized code

extension (sc: StringContext)
  def m: StringContext = sc
  def unapply(string: String): Option[String] =
    val pattern = sc.parts.head
    if (string.length == pattern.length) Some(string) else None

def parse(x: PartialFunction[String, String]) = x

val pf = parse {
  case m"x$s" => s
  case m"xx$s" => s
}

pf.applyOrElse("a", _ => ".") // "a"
pf.applyOrElse("ab", _ => ".") // "ab"
pf.applyOrElse("abc", _ => ".") // "."

Output

-- [E030] Match case Unreachable Warning: --------------------------------------
17 |  case m"xx$s" => s
   |       ^^^^^^^
   |       Unreachable case

Expectation

No warning, as with compiler version 3.3.0

Notes

There is no regression (and no warning) here:

extension (sc: StringContext) def m: SC = SC(sc)

class SC(sc: StringContext):
  def unapply(string: String): Option[String] =
    val pattern = sc.parts.head
    if (string.length == pattern.length) Some(string) else None

def parse(x: PartialFunction[String, String]) = x

val pf = parse {
  case m"x$s" => s
  case m"xx$s" => s
}

pf.applyOrElse("a", _ => ".") // "a"
pf.applyOrElse("ab", _ => ".") // "ab"
pf.applyOrElse("abc", _ => ".") // "."

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions