e9ebb1b2

Created Started Finished

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

Let a constructor say what a list is for

skip-calls-to reads the call an expression is inside, and a data constructor
was not one of them. A list held by a constructor is named by that constructor
exactly as an argument is named by the function it is passed to, so a
constructor should be nameable too.

Read in the enclosing-call recording rather than in headFunctionName. Several
operators use that function to decide what is an elidable or a swappable call,
and a constructor is neither, so teaching it about constructors would change
which mutants those produce. The new calleeName falls back to the constructor's
name at the ConLikeTc node GHC rewrites a constructor's HsVar into, which is
the same node BoolLit, ConstBool, MaybeOp and ConstConstructor already read.

Example.ListLitCallsLib.reportCodes is the case, answering with a constructor
of that module's own rather than one of Either's, so that what the config
skips is one named constructor and not every Left in the suite. Asserted both
ways: removing the entry fails the check with the ListLit and ConstEmptyList
mutants on its list, and putting it back passes.