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.