44fe4d76

Created Started Cancelled

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

Follow-up to #138, which gave `ListLit` a `skip-calls-to` key. `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.

A list holding the pieces of a message is a list nobody asserts the elements
of, so emptying it yields a mutant that can only be killed by pinning wording.
The key means the same here and matches the same way: any *enclosing* call, not
only the immediate one, because 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.

### Why a config key rather than an `ANN` pragma

A message built inside an instance method has no binding to annotate, and
codecs, `PersistField` instances and job handlers are all written that way. In
the repository this came from, 13 of the message sites were inside instance
methods; the alternative was asserting the exact wording in a test, which is
what the key exists to avoid.

### The example is now the test for both

`Example.ListLitCallsLib` 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 operators. That also makes the module
a check on dead disable targets, since a pragma naming an operator with no
remaining mutant fails the check.

### Asserted

Removing the `ConstEmptyList` entry fails `mutation-sydtest-mutation-example`
with the two `ConstEmptyList` mutants in `reportDollar`
(`ListLitCallsLib.hs:35`); putting it back passes. Both directions were run.
PR #139