A fast formatter and linter for R.
HoovR lays R out the way styler does, checks it with every lintr default linter, and scores code health against budgets that fail a build when it gets worse. One executable, nothing else to install, and two to three orders of magnitude faster than the R tools.
$ hoovr lint R/ R/model.R:2:13: HR0004 Use `seq_along(x)` instead of `1:length(x)`, which is wrong when the input is empty R/model.R:3:18: HR0005 Use `&&` in a condition, not `&` R/model.R:4:12: HR0001 Use `<-` for assignment, not `=` 3 findings (3 fixable with `--fix`)
Install
Windows x64 and Linux x86-64. macOS is not supported in 1.0. Full instructions, including checking a download, updating and uninstalling.
Windows winget pending
Submitted to the Windows Package Manager and waiting for review. Until it is listed, download the zip from the releases page.
winget install HoovR.HoovR
Linux
One static binary for any glibc or musl distribution. Check it against the
release's SHA256SUMS, then put it on your PATH.
sha256sum -c SHA256SUMS --ignore-missing unzip hoovr-*-x86_64-unknown-linux-musl.zip install -m 755 hoovr-*-linux-musl/hoovr ~/.local/bin/
R users
The hoovr package, under lintr's and styler's function names.
Its source is on each release from 1.0.0; plain R, no compiler needed.
install.packages("jsonlite")
install.packages(
"https://github.com/RDalziel/hoovr-releases/releases/download/v1.0.0/hoovr_1.0.0.tar.gz",
repos = NULL, type = "source")
hoovr::install_hoovr()
What it does
Three tools over one parser, for R files, R Markdown and Quarto
documents. Configuration is one hoovr.toml; exit codes are
0 clean, 1 findings, 2 could not run.
hoovr format
Tidyverse layout. By default it changes layout only, never tokens, and never
loses a comment. --profile styler-compatible makes styler's
decisions, token rewrites included.
hoovr format R/
hoovr format --check . # CI gate
hoovr lint
Every lintr default linter, plus rules of its own, with fixes where the edit
cannot change what the code does. lintr's # nolint comments work
as written.
hoovr lint --fix R/ hoovr lint --format github .
hoovr metrics
Cyclomatic and cognitive complexity, nesting, size and more against budgets, with a committed baseline that fails a build only when a number gets worse.
hoovr metrics --update-baseline hoovr metrics --check
Moving from lintr or styler?
--profile lintr-compatible reports lintr's findings where HoovR would
differ on purpose. The guide covers
translating a .lintr
and replacing styler.
Measured, not claimed
Every figure comes from running lintr and styler themselves on the same files. Measurements gives the method and the caveats.
| Package | Files | hoovr lint | lintr | hoovr format --check | styler |
|---|---|---|---|---|---|
| withr | 58 | 22 ms | 4.39 s | 15 ms | 14.13 s |
| stringr | 67 | 25 ms | 7.43 s | 16 ms | 17.32 s |
| tibble | 114 | 51 ms | 13.77 s | 27 ms | 82.81 s |
| dplyr | 195 | 56 ms | 38.97 s | 30 ms | 148.03 s |
These are measurements of a build, not promises, and they are
refreshed when a release is re-measured. All of them were taken on 25 September 2026
with the HoovR 1.0.0 release candidate (which reported itself as 0.1.1, before its
version number was set), against lintr 3.4.0 and styler 1.11.0 on R 4.6.1. The speed
figures are on x86-64 Linux with 16 CPUs, each tool doing its own default work;
HoovR's time is the fastest of five runs, lintr's and styler's one run each.
styler's dplyr run leaves out data-raw/starwars.R, on which styler does
not finish, so it covers 194 of the 195 files. No
figure is published against air, whose HoovR profile is experimental, against the
other Rust tools for R, or for macOS.
Stable across 1.x
- Commands, flags, exit codes,
hoovr.tomlkeys, JSON output version 1, and rule codes and names. - Formatter layout changes only in a minor release, and every change is listed in the release notes.
- New rules arrive switched off, so an upgrade does not add findings on its own.
Documentation
Install
Windows, Linux and the R package; checking, updating, uninstalling.
Usage
Commands, profiles, configuration, CI, editors, output formats, migrating.
Rules
Every rule and budget, with its lintr equivalent.
Code health
The budgets, how each is counted, and the ratchet.
Release notes
What changed in each release, in plain English.
Issues
Bugs and questions. Security problems: report privately.