rrubocop

io.github.adrianov由 GitHub 账号 adrianov 发布v0.8.17更新于 Oct 29, 2026

Fast RuboCop-compatible Ruby linter with MCP inspect and autocorrect tools.

已验证STDIO仅桌面开发者工具AI 与机器学习

概览

AI 生成的概览

兼容 RuboCop 的快速 Ruby 代码检查工具,以本地 MCP 服务器运行,让助手在编辑代码时即时检查和自动修正。

可以做什么
  • 检查 Ruby 文件或内联源码,返回 LSP 格式的违规 JSON,并按项目 .rubocop.yml 解析路径
  • 执行自动修正,可选仅安全修正或全部修正;提供文件系统路径时会写回文件
  • 沿用与命令行一致的 RuboCop 兼容配置解析、规则集和输出格式,涵盖 Rails、RSpec、Performance、GraphQL 等规则
适用场景
适合助手正在编辑 Ruby 或 Rails 项目、希望在同一轮对话中看到违规并立即修复,而不必等到之后的命令行或 CI 检查。
运行要求
需在本机安装 rrubocop 可执行文件(Homebrew、cargo 或发布包),并以 --mcp 参数通过 stdio 启动。检查代码和简单 ERB 不需要 Ruby 运行时;不支持的 ERB 会回退到 ruby 或 bundle exec ruby。未声明任何账号、API 密钥或环境变量。
安装前请注意
提供文件系统路径时自动修正会写入文件,应审阅改动。必须显式传入目标路径,省略会报错。若从用户主目录启动,可能继承全局 .rubocop.yml 而漏掉项目规则,建议将工作目录设为项目目录。

安装

在 SourceWeft 中

  1. 打开 控制台中的 rrubocop,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

rrubocop

10x faster RuboCop drop-in — same CLI, .rubocop.yml, and offense output, without maintaining RuboCop gems. Linting and simple config need no Ruby; complex ERB still does. Point it at an existing project and use it like RuboCop.

One binary — runs the same way regardless of rbenv, rvm, system Ruby, or Docker. Uses tree-sitter; no Ruby runtime required for linting or simple ERB. Unsupported ERB falls back to ruby / bundle exec ruby.

Drop-in parity: reads your existing .rubocop.yml, emits RuboCop-like text/JSON, supports -a/-A autocorrect, and grows cop coverage over time.

Baseline (shown in --help / --version): rubocop 1.91.0 with rubocop-rails 2.37.0, rubocop-performance 1.27.0, rubocop-rspec 3.9.0, rubocop-rspec_rails 2.32.0, rubocop-factory_bot 2.28.0 — pinned in src/resources/baseline.json.

Parity runs have been verified over 600+ installed Ruby gem projects (RuboCop vs rrubocop on the same trees).

Install

sh
brew install adrianov/rrubocop/rrubocop
sh
cargo install rrubocop

macOS (.tar.gz from GitHub Releases; binary + man):

sh
# Apple Silicon — use the *-x86_64-apple-darwin.tar.gz asset on Intel Macscurl -LO https://github.com/adrianov/rrubocop/releases/download/v0.8.17/rrubocop-0.8.17-aarch64-apple-darwin.tar.gztar -xzf rrubocop-0.8.17-aarch64-apple-darwin.tar.gzsudo cp rrubocop-0.8.17-aarch64-apple-darwin/rrubocop /usr/local/bin/sudo mkdir -p /usr/local/share/man/man1sudo cp rrubocop-0.8.17-aarch64-apple-darwin/rrubocop.1 /usr/local/share/man/man1/

Ubuntu / Debian (.deb from GitHub Releases; amd64, Ubuntu 22.04+ / Debian bookworm+):

sh
# example for v0.8.17 — use the asset name from the release pagecurl -LO https://github.com/adrianov/rrubocop/releases/download/v0.8.17/rrubocop_0.8.17-1_amd64.debsudo dpkg -i rrubocop_0.8.17-1_amd64.debman rrubocop
sh
rrubocop [OPTIONS] [PATH]...

Features

  • Config — RuboCop-compatible resolution: walk-up discovery, inherit_from / inherit_gem / require/plugins, inherit_mode (merge/override), nested .rubocop.yml overrides, DisabledByDefault, NewCops / Enabled: pending, plus per-cop Enabled / Exclude / Include / options; public gem defaults/inherit_gem YAML are vendored by version (from Gemfile.lock, with same_as aliases when YAML is identical) and parsed in memory; private/unlisted gems fall back to bundle info --path; simple ERB in YAML expands natively (Ruby only for unsupported tags)
  • Autocorrect — -a (safe) / -A (all)
  • Output — progress (marks stream as files finish), text, json, github, quiet, files, … (TTY color like RuboCop; --color / --no-color)
  • Directives — # rubocop:disable / enable
  • Parser — tree-sitter-ruby (no Prism / no CRuby)
  • Cache — content-addressed cache.redb under $RRUBOCOP_CACHE_DIR or $XDG_CACHE_HOME/rrubocop / ~/.cache/rrubocop (same style as abcop); --cache false skips reads but still writes
  • Prefer MCP with LLMs. rrubocop --mcp is the best way to use rrubocop from an agent: the model gets offenses as soon as it writes, so it can fix and autocorrect in the same turn and ship effective code right away — not after a later CLI/CI pass. Official Rust rmcp SDK; same tools as RuboCop 1.85+: rubocop_inspection and rubocop_autocorrection

Reference implementations: nitrocop (architecture & fixtures), upstream RuboCop.

Built-in cops

Departments grow breadth-first from common RuboCop plugin sets (nitrocop / gem sources). Notable coverage:

DepartmentNotes
Layout/*90 layout cops (alignment, spacing, empty lines, indentation; all with autocorrect)
Lint/*, Style/*, Naming/*, Security/*69 / 143 / 9 / 4
Metrics/*AbcSize, BlockNesting, ClassLength, CollectionLiteralLength, ModuleLength, ParameterLists
Rails/*63 rails cops
Performance/*24 performance cops
RSpec/*104 rspec cops
RSpecRails/*2 (HttpStatus, InferredSpecType)
FactoryBot/*4 (AssociationStyle, AttributeDefinedStatically, CreateList, FactoryClassName)
Bundler/*, Gemspec/*, Rake/*4 / 4 / 5
GraphQL/*26 rubocop-graphql cops

Use rrubocop --list-cops for the full registered set, and rrubocop --list-autocorrectable-cops for cops with -a/-A support (181 with autocorrect so far; Layout complete; Style/Lint/Rails/RSpec growing).

Usage

sh
rrubocop                         # lint .rrubocop app lib                 # pathsrrubocop -f json .               # JSON offensesrrubocop -a .                    # safe autocorrectrrubocop -A .                    # all autocorrectrrubocop --only Metrics/AbcSize librrubocop --rubocop-version 1.79.2 . # emulate a project's pinned RuboCop (matches CI's bundled gem)rrubocop --list-copsrrubocop -L                      # list target filesrrubocop -F 10                   # stop after 10 offenses (off by default; `-F` = 1)                                 # with `-a`/`-A`, N is non-autocorrectable offenses onlyrrubocop --mcp                   # MCP server on stdio (for AI clients)

Exit codes: 0 clean, 1 offenses at/above --fail-level, 2 error.

MCP (Model Context Protocol)

Preferred for LLM / agent workflows. Wire rrubocop as an MCP server so the model can call rubocop_inspection / rubocop_autocorrection while it edits: feedback arrives in the same turn, the agent corrects soon, and it writes clean code on the first pass instead of discovering offenses only in CI.

rrubocop --mcp runs a long-lived MCP server on stdio — same idea as RuboCop’s MCP, with no Ruby mcp gem. Tools:

ToolPurpose
rubocop_inspectionLint via path / paths (string or array; required for filesystem inspect) and/or inline source_code; returns LSP-shaped offense JSON
rubocop_autocorrectionSame targets as inspection; safety: true = safe only; writes files when a filesystem path is set

Always pass path or paths (absolute file or directory preferred; path may be a string or an array). The server walks up from the first target to find .rubocop.yml. Omitting targets for filesystem ops errors out (avoids scanning $HOME when MCP cwd is mis-set). Files without a recognized Ruby extension, filename, or shebang (e.g. YAML/JSON configs) are silently skipped — same as upstream MCP, whose TargetFinder runs in :only_recognized_file_types mode — so passing mixed paths yields no Lint/Syntax noise; summary.target_file_count reflects inspected files only. A long-lived global MCP started from $HOME otherwise inherits ~/.rubocop.yml (AllCops: Enabled: false is common) and misses project cops such as RSpec/ExampleLength.

  • MCP Registry name: mcp-name: io.github.adrianov/rrubocop

Metadata lives in server.json (Cargo package on crates.io). Each v* tag publishes that listing to the MCP Registry.

Example client config (Cursor / VS Code / Windsurf):

json
{  "mcpServers": {    "rrubocop": {      "type": "stdio",      "command": "rrubocop",      "args": ["--mcp"],      "cwd": "/path/to/your/project"    }  }}

Claude Code:

sh
claude mcp add rrubocop -- rrubocop --mcp

Intended for MCP clients, not interactive use.

Caching

Content-addressed cache under $RRUBOCOP_CACHE_DIR (or $XDG_CACHE_HOME/rrubocop / ~/.cache/rrubocop). Keys cover contents, version, rule revision, --only/--except, --rubocop-version, config fingerprint, and path. Auto-pruned to 20 000 entries; --cache false skips reads but still writes. Autocorrect runs bypass the cache. Nothing is written inside the project.

Benchmarks

Cold lint (cache off) on a large Rails codebase (~3.8k Ruby files), same host:

ToolWall clockResultNotes
bundle exec rubocop --cache false2m 37s (2:36.64)0 offenses~99% CPU (mostly single-core)
rrubocop --cache false7.0s (7.005)0 offenses~1040% CPU (parallel)
nitrocop --no-cache8.9s (8.906)~21k offenses~1000% CPU; not a fair parity run (see below)

rrubocop is ≈ 22× faster wall clock than RuboCop (156.6s / 7.0s) on the same clean result. RuboCop user time was 155s; rrubocop used 71s of CPU across cores.

nitrocop caveat: out of the box it did not honor the same disabled cops / custom rules / gem configs as bundle exec rubocop (e.g. failed inherit_gem load, skipped/unimplemented cops), so it reported ~21k false positives vs RuboCop/rrubocop’s clean run. Matching that baseline needs extra setup (--migrate, plugin/config wiring). Treat the 8.9s figure as raw throughput only, not drop-in parity.

Cold lint (cache off) on rails/rails (main, RuboCop 1.79.2 via bundle exec), same host (4 cores), both clean (0 offenses). Two runs averaged:

ToolWall clockNotes
bundle exec rubocop --cache false1m 7s (67.254)~99% CPU (mostly single-core); 3543 files
rrubocop --cache false5.7s (5.668)~357% CPU (parallel); 3446 files

≈ 12× faster wall clock (67.254s / 5.668s). RuboCop user time was 66.9s; rrubocop used 20.2s of CPU across cores.

Same host, cold --cache false, offense-set parity on Active Support and Active Record (fp=0, fn=0 on shared .rb files):

TargetRuboCoprrubocopSpeedup
activesupport (rails main)11.566s (531 files)1.872s≈6.2×
activerecord (rails main)29.611s (1162 files)2.780s≈10.7×
activesupport (v8.1.3.1)10.729s (506 files)1.795s≈6.0×
activerecord (v8.1.3.1)27.847s (1126 files)2.656s≈10.5×

Cold lint on a fresh rails new app (Rails 8.1.3.1, default rubocop-rails-omakase via inherit_gem, RuboCop 1.90.0 via bundle exec), plus scaffold/model/mailer/job generators (41 identical target files). Offense-set parity fp=0, fn=0 (both clean). Two-run average:

ToolWall clock
bundle exec rubocop --cache false0.722s
rrubocop --cache false0.593s

Cross-test vs nitrocop

With a local nitrocop build:

sh
testdata/cross_test_nitrocop.py /path/to/fixture_dir

Compares (path, line, cop_name) offense sets.

License

GPL-3.0-or-later. See NOTICE for MIT attribution of nitrocop-derived design/logic.

来源:README.md,提交 0b67072

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

10
  1. v0.8.17最新Oct 29, 2026
  2. v0.8.16Oct 11, 2026
  3. v0.8.15Oct 1, 2026
  4. v0.8.14Sep 30, 2026
  5. v0.8.13Sep 30, 2026
  6. v0.8.12Sep 30, 2026
  7. v0.8.11Sep 24, 2026
  8. v0.8.10Sep 22, 2026
  9. v0.8.9Sep 18, 2026
  10. v0.8.8Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分