// tests exhaustivity doesn't give warnings (due to its heuristic rewrites kicking in or it backing off) object Test { // List() => Nil List(1) match { case List() => case x :: xs => } // we don't look into guards val turnOffChecks = true List(1) match { case _ if turnOffChecks => } // we back off when there are any user-defined extractors // in fact this is exhaustive, but we pretend we don't know since List's unapplySeq is not special to the compiler // to compensate our ignorance, we back off // well, in truth, we do rewrite List() to Nil, but otherwise we do nothing // the full rewrite List(a, b) to a :: b :: Nil, for example is planned (but not sure it's a good idea) List(true, false) match { case List(_, _, _:_*) => case List(node, _:_*) => case Nil => } }