You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
parse_data: promote custom parse logic for R 4.4 compatibility
utils::getParseData has a longstanding bug: for an installed package,
parse data is available only for the last file [1]. To work around
that, the get_tokens helper first calls getParseData and then falls
back to custom logic that extracts the concatenated source lines,
splits them on #line directives, and calls getParseData on each file's
lines.
The getParseData bug was fixed in R 4.4.0 (r84538). Unfortunately
that change causes at least two issues (for some subset of packages):
a substantial performance regression [2] and an error when applying
exclusions [3].
Under R 4.4, getParseData always returns non-NULL as a result of that
change when calculating package coverage (in other words, the
get_parse_data fallback is _not_ triggered). The slowdown is
partially due to the parse data no longer being cached across
get_tokens calls. Another relevant aspect, for both the slowdown and
the error applying exclusions, is likely that the new getParseData
returns data for the entire package rather than the per-file parse
data the downstream covr code expects.
One solution would be to adapt covr's caching and handling of the
getParseData when running under R 4.4.0 or later. Instead go with a
simpler and more minimal fix. Reorder the calls so that the
get_parse_data call, which we know has been the primary code path for
package coverage before R 4.4.0, is the first call tried. Leave
getParseData as the fallback to handle the non-package coverage cases.
[1] r-lib#154https://bugs.r-project.org/show_bug.cgi?id=16756
[2] As an extreme case, calling package_coverage on R.utils goes from
under 15 minutes to over 6 hours.
[3] nanotime (v0.3.10) and diffobj (v0.3.5) are two examples of
packages that hit into this error.
Closesr-lib#576Closesr-lib#579
Re: r-lib#567
0 commit comments