ry v0.3.0
[0.3.0] - 2026-07-11
This release focuses on diagnostic precision, driven by audits of five
real-world CRAN packages (brms, posterior, bayesplot, loo, cmdstanr).
Total diagnostics across those clean corpora dropped from 837 (240
errors) to 30 (1 error — a genuine bug in brms), while all genuine
findings from the audits are still reported. The largest corpus checks
in under a second in release mode.
Added
- S3 dispatch for operators: binary and unary
Opsgroup methods
(including operator-specific methods such as+.classname) defined in
the checked sources or an attached package are now consulted before
arithmetic and comparison diagnostics. - Data-frame schema tracking:
data.frame()derives column names from
positional expressions (data.frame(y, K)has columnsyandK),
and column writes via$,[[, and partial indexed assignment update
the tracked schema. - Static dataset inventory: bindings introduced by a package's
data/
directory and byload()of a project.rda/.RDatafile are
resolved by reading only the top-level tags of the R serialization
stream (gzip, bzip2, and xz supported) — no R code is executed. - NSE evaluation modes in typeshed stubs: parameters can be declared as
data-masked, tidy-select, or quoted, so dplyr-style verbs resolve
columns instead of flagging them as undefined globals. - Typeshed stubs for testthat, plus expanded base, Bayesian-stack, and
dplyr catalogues; stubs can also declare source-relative path
arguments sosource("helper.R")-style calls are followed. globalskey inry.tomlfor names created dynamically by the host
application or an unresolvableload(); only the listed names become
opaque, without suppressing other diagnostics.- Lexical closure capture: names assigned anywhere in enclosing function
bodies are visible inside nested closures, matching R's deferred
lookup, without making direct read-before-assignment valid. - Forwarded-default analysis: a formal forwarded into another function
is credited with the callee's reachable defaults, removing false
NULL-default condition warnings while keeping the genuine ones.
Fixed
importFrom(pkg, name)now preserves exact binding provenance when a
stub for the dependency exists, falling back to opaque otherwise.- Numeric truthiness idioms (e.g.
if (length(x))) and list/atomic
equality comparisons no longer produce false diagnostics. - Various false positives around class-attribute assignment, nested
record-path writes, S3 predicate narrowing, and dplyr join calls.
What's Changed
Full Changelog: v0.2.0...v0.3.0