Release Notes
This release focuses on checker precision, higher-order R semantics, and editor
correctness. It is a minor release because diagnostic output and inferred
warning sets intentionally change, and JSON diagnostics gain a new field.
Checker and type inference
- Higher-order calls such as
Map(),mapply(),vapply(),Filter(), and
purrr map-family functions now bind callbacks, sources, templates, and
controls by R formal-argument matching rather than raw call position. Named,
reordered, and partially matched arguments therefore infer consistently. - Single-bracket vector and list subsetting derives result length from logical
and numeric indices when it is provable. Literal negative exclusions retain
exact length for known inputs, while transformed subsets no longer carry
stale source-column schemas. - Recursive parameter defaults (
RY098) distinguish guaranteed forcing from
quoting, conditional paths, short-circuit evaluation, loop reachability, and
replacement assignments. This removes false positives while preserving
provable recursion diagnostics. - Types merged after one-arm
ifreassignment retain the parent/branch union
instead of becoming opaque, and repeated checks on oneCheckerno longer
accumulate diagnostics from previous files.
Pipes, suppressions, and output
- Native-pipe extraction placeholders (R >= 4.3), such as
mtcars |> _$mpg
anddf |> _[["col"]], resolve to the piped value. Magrittr substitutes every
.occurrence, including nested calls, while.and_remain specific to
their respective pipe operators. Invalid cross-operator placeholders now
reportRY010. Thanks to @tjmahr for reporting
the placeholder scope issue in #27. - Standalone
# ry: ignoredirectives target the next actual code line,
skipping blank and comment-only lines without mistaking#inside strings
for a directive. Rule lists stop at their closing]. - JSON diagnostics now include the diagnostic
confidencetier. Severity
overrides preserve confidence, so--min-confidencebehaves consistently.
Editor and language server
- Cached parses are paired atomically with the exact source text they came
from, preventing concurrent edits from mixing stale text with a newer AST. - LSP byte offsets and columns now correctly handle UTF-16, non-ASCII
identifiers, CRLF files, invalid/out-of-range positions, completion and
signature-help cursors, and code-action edits. - Rename validates R identifiers (including Unicode and reserved-word rules),
and loop-variable navigation/rename highlights only the binding identifier. - Closing a document refreshes cross-file diagnostics in remaining documents.
Completion and signature help use the embedded base typeshed rather than a
separate hand-maintained signature table.
Typeshed and package handling
- Updated the embedded r-typeshed snapshot to
d4453457(schema 0.0.4),
including corrected base and rlang metadata, typed rlang missing-value
constants, and new vctrs function metadata. - Recursive package scans skip symlinks and unclassifiable directory entries,
preventing filesystem loops..Rbuildignorehandling now distinguishes a
real trailing$anchor from escaped dollar literals. - R string decoding accepts R's variable-width
\u(1-4 hex digits) and
\U(1-8 hex digits) forms.
Install ry-cli 0.8.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/sims1253/ry/releases/download/v0.8.0/ry-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/sims1253/ry/releases/download/v0.8.0/ry-cli-installer.ps1 | iex"Download ry-cli 0.8.0
| File | Platform | Checksum |
|---|---|---|
| ry-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| ry-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| ry-cli-aarch64-pc-windows-msvc.zip | ARM64 Windows | checksum |
| ry-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ry-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| ry-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |