Open dmurdoch opened 11 months ago
I can see two kinds of solutions to this.
covr
has installed its tracing code, and again when the code is removed.covr
to recursively handle lists. 2 is relatively straightforward, by adding a new type of record into the$replacements
. The new type handles lists, not closures. A simple structure for it saves the environment where the list was found and the name of the list, and then has a list of replacements to make within that list, indexed by number rather than name since lists aren't always named.
A disadvantage of this is that lists aren't the only places where functions can be hidden -- packages could have environment objects, functions could be assigned as attributes of other objects, etc. Handling attributes wouldn't be hard if lists were handled, but handling environments recursively would have to watch out for infinite loops. Still, it's probably doable.
A disadvantage of 1 is that packages might need to be reorganized to do it, and it would be hard for the package writers to maintain.
In my recent PR https://github.com/igraph/rigraph/pull/1021 to
igraph
, the coverage tests said that the testing didn't include the changed code, even though it did.I put together a simple package with the same structure of running functions that have been assigned into a list, and
covr::package_coverage(type="examples")
also claimed there was no coverage.The example package had this code:
and it exported
test
. The example for the help page fortest
ran this:A version of the package that simply assigned
test <- test1
and rantest()
showed 100% coverage.The full package is available here: https://github.com/dmurdoch/testpkg/tree/test_coverage .
Here's my session info: