0f9cbb4e

Created Started Finished

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Let ConstEmptyList be skipped by the call its list is an argument of

ListLit already takes skip-calls-to, for the reason that a list holding the
pieces of a message is a list nobody asserts the elements of, so shrinking it
yields a mutant that can only be killed by pinning wording. ConstEmptyList
reaches the same lists from the other side, by their type rather than their
syntax, and had no way to be told the same thing.

The key means the same and matches the same way, any enclosing call rather
than only the immediate one, which is what makes it usable: the call such a
list is the immediate argument of is always mconcat or unwords, never the
function that says what the message is for.

What an ANN pragma cannot do is the reason this is worth having rather than
annotating the binding. A message built inside an instance method has no
binding to annotate, and codecs, PersistField instances and job handlers are
all written that way.

Example.ListLitCallsLib is now the test for both operators and carries no ANN
pragma at all: the three it had were disabling ConstEmptyList on the very
lists this key is about, and one shared skip-calls-to entry answers both. That
also makes it the check on a dead disable target, since a pragma naming an
operator with no remaining mutant fails.

Asserted by removing the entry: the check fails with the two ConstEmptyList
mutants in reportDollar, and passes with it.