关于 rrubocop
rrubocop 是面向使用 RuboCop 配置和工作流团队的 Rust Ruby 代码检查器。它支持类似 RuboCop 的输出和自动修正,并提供 MCP 检查与修正工具。
主要功能
- 01兼容 RuboCop 配置
- 02类似 RuboCop 的文本与 JSON 输出
- 03安全及完整自动修正
- 04覆盖 Ruby 项目的内置规则
- 05内容寻址的检查缓存
- 06MCP 检查与自动修正工具
适用场景
- 01检查现有 Ruby 项目
- 02沿用项目的 `.rubocop.yml`
- 03通过命令行自动修正违规
- 04让编码 Agent 检查并修复 Ruby 代码
MCP 相关
运行 `rrubocop --mcp`,通过 stdio 暴露 `rubocop_inspection` 和 `rubocop_autocorrection`。MCP 客户端可检查路径或内联源码,并对文件系统目标应用修正。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
rrubocop
速度快 10 倍的 RuboCop 即插即用替代方案——使用相同的 CLI、.rubocop.yml 和违规输出,无需维护 RuboCop gem。代码检查和简单配置无需 Ruby;复杂 ERB 仍需要 Ruby。将它指向现有项目,即可像使用 RuboCop 一样使用。
单个二进制文件——无论使用 rbenv、rvm、系统 Ruby 还是 Docker,运行方式都相同。使用 tree-sitter;代码检查或处理简单 ERB 时无需 Ruby 运行时。不支持的 ERB 会回退到 ruby / bundle exec ruby。
即插即用的兼容性:读取现有的 .rubocop.yml,输出类似 RuboCop 的文本/JSON,支持 -a/-A 自动修正,并持续扩展 cop 覆盖范围。
基准版本(显示在 --help / --version 中):rubocop 1.91.0,以及 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——版本锁定于 src/resources/baseline.json。
已在 600 多个已安装的 Ruby gem 项目中验证兼容性测试(在相同代码树上运行 RuboCop 和 rrubocop)。
安装
brew install adrianov/rrubocop/rrubocop
cargo install rrubocop
macOS(从 GitHub Releases 下载 .tar.gz;包含二进制文件和 man 手册):
# Apple Silicon — use the *-x86_64-apple-darwin.tar.gz asset on Intel Macs
curl -LO https://github.com/adrianov/rrubocop/releases/download/v0.8.16/rrubocop-0.8.16-aarch64-apple-darwin.tar.gz
tar -xzf rrubocop-0.8.16-aarch64-apple-darwin.tar.gz
sudo cp rrubocop-0.8.16-aarch64-apple-darwin/rrubocop /usr/local/bin/
sudo mkdir -p /usr/local/share/man/man1
sudo cp rrubocop-0.8.16-aarch64-apple-darwin/rrubocop.1 /usr/local/share/man/man1/
Ubuntu / Debian(从 GitHub Releases 下载 .deb;适用于 amd64、Ubuntu 22.04+ / Debian bookworm+):
# example for v0.8.16 — use the asset name from the release page
curl -LO https://github.com/adrianov/rrubocop/releases/download/v0.8.16/rrubocop_0.8.16-1_amd64.deb
sudo dpkg -i rrubocop_0.8.16-1_amd64.deb
man rrubocop
rrubocop [OPTIONS] [PATH]...
功能
- 配置 — 兼容 RuboCop 的配置解析:向上查找配置、
inherit_from/inherit_gem/require/plugins、inherit_mode(合并/覆盖)、嵌套的.rubocop.yml覆盖、DisabledByDefault、NewCops/Enabled: pending,以及每个 cop 的Enabled/Exclude/Include/ 选项;按版本随附公共 gem 的默认配置/inherit_gemYAML(来自Gemfile.lock;YAML 相同时使用same_as别名),并在内存中解析;私有/未列出的 gem 会回退到bundle info --path;原生展开 YAML 中的简单 ERB(仅不支持的标签需要 Ruby) - 自动修正 —
-a(安全)/-A(全部) - 输出 —
progress(随文件处理完成逐步输出标记)、text、json、github、quiet、files、……(TTY 颜色行为与 RuboCop 相同;--color/--no-color) - 指令 —
# rubocop:disable/enable - 解析器 — tree-sitter-ruby(不使用 Prism / CRuby)
- 缓存 — 内容寻址的
cache.redb,位于$RRUBOCOP_CACHE_DIR或$XDG_CACHE_HOME/rrubocop/~/.cache/rrubocop下(风格与 abcop 相同);--cache false会跳过读取,但仍会写入 - 使用大模型时优先通过 MCP 使用。
rrubocop --mcp是通过 Agent 使用 rrubocop 的最佳方式:模型写入代码后即可收到违规信息,因此能在同一轮中修复并自动修正,立即交付有效代码,而不是等到之后的 CLI/CI 检查。官方 RustrmcpSDK;提供与 RuboCop 1.85+ 相同的工具:rubocop_inspection和rubocop_autocorrection
参考实现:nitrocop(架构和测试样例)、上游 RuboCop。
内置 cops
各部门从常见的 RuboCop 插件集(nitrocop / gem 源码)开始,按广度优先方式逐步扩展。主要覆盖范围:
| 部门 | 说明 |
|---|---|
Layout/* | 90 个布局 cop(对齐、间距、空行、缩进;全部支持自动修正) |
Lint/*、Style/*、Naming/*、Security/* | 69 / 143 / 9 / 4 个 |
Metrics/* | AbcSize、BlockNesting、ClassLength、CollectionLiteralLength、ModuleLength、ParameterLists |
Rails/* | 63 个 rails cop |
Performance/* | 24 个性能 cop |
RSpec/* | 104 个 rspec cop |
RSpecRails/* | 2 个(HttpStatus、InferredSpecType) |
FactoryBot/* | 4 个(AssociationStyle、AttributeDefinedStatically、CreateList、FactoryClassName) |
Bundler/*、Gemspec/*、Rake/* | 4 / 4 / 5 个 |
GraphQL/* | 26 个 rubocop-graphql cop |
使用 rrubocop --list-cops 查看完整的已注册 cop 列表,使用 rrubocop --list-autocorrectable-cops 查看支持 -a/-A 的 cop(目前有 181 个支持自动修正;Layout 已完整覆盖,Style/Lint/Rails/RSpec 持续扩展)。
用法
rrubocop # lint .
rrubocop app lib # paths
rrubocop -f json . # JSON offenses
rrubocop -a . # safe autocorrect
rrubocop -A . # all autocorrect
rrubocop --only Metrics/AbcSize lib
rrubocop --rubocop-version 1.79.2 . # emulate a project's pinned RuboCop (matches CI's bundled gem)
rrubocop --list-cops
rrubocop -L # list target files
rrubocop -F 10 # stop after 10 offenses (off by default; `-F` = 1)
# with `-a`/`-A`, N is non-autocorrectable offenses only
rrubocop --mcp # MCP server on stdio (for AI clients)
退出代码:0 表示无问题,1 表示存在达到或超过 --fail-level 的问题,2 表示错误。
MCP(Model Context Protocol)
推荐用于大模型 / Agent 工作流。 将 rrubocop 接入为 MCP 服务,让模型在编辑时调用 rubocop_inspection / rubocop_autocorrection:反馈会在同一轮中返回,Agent 可以尽快修正,并在首次编写时就生成干净的代码,而不是等到 CI 中才发现问题。
rrubocop --mcp 会通过 stdio 运行一个长期运行的 MCP 服务——思路与 RuboCop 的 MCP 相同,且无需 Ruby mcp gem。工具:
| 工具 | 用途 |
|---|---|
rubocop_inspection | 通过 path / paths(字符串或数组;文件系统检查时必需)和/或内联 source_code 执行 lint;返回 LSP 格式的问题 JSON |
rubocop_autocorrection | 目标与检查相同;safety: true = 仅执行安全修正;设置文件系统 path 时会写入文件 |
始终传入 path 或 paths(优先使用绝对文件路径或目录;path 可以是字符串或数组)。服务会从第一个目标开始向上查找 .rubocop.yml。文件系统操作若未指定目标,会报错(避免 MCP 的 cwd 设置错误时扫描 $HOME)。不含已识别 Ruby 扩展名、文件名或 shebang 的文件(例如 YAML/JSON 配置文件)会被静默跳过——与上游 MCP 相同,其 TargetFinder 以 :only_recognized_file_types 模式运行——因此传入混合路径不会产生 Lint/Syntax 噪声;summary.target_file_count 只反映实际检查的文件。若从 $HOME 启动长期运行的全局 MCP,它会继承 ~/.rubocop.yml(常见设置是 AllCops: Enabled: false),从而漏掉 RSpec/ExampleLength 等项目规则。
- MCP Registry 名称:
mcp-name: io.github.adrianov/rrubocop
元数据位于 server.json(crates.io 上的 Cargo 软件包)。每个 v* 标签都会将该条目发布到 MCP Registry。
客户端配置示例(Cursor / VS Code / Windsurf):
{
"mcpServers": {
"rrubocop": {
"type": "stdio",
"command": "rrubocop",
"args": ["--mcp"],
"cwd": "/path/to/your/project"
}
}
}
Claude Code:
claude mcp add rrubocop -- rrubocop --mcp
此功能面向 MCP 客户端,不适用于交互式使用。
缓存
内容寻址缓存位于 $RRUBOCOP_CACHE_DIR 下(或 $XDG_CACHE_HOME/rrubocop / ~/.cache/rrubocop)。缓存键涵盖内容、版本、规则修订版、--only/--except、--rubocop-version、配置指纹和路径。缓存会自动修剪至 20 000 条;--cache false 会跳过读取,但仍会写入。自动修正运行不会使用缓存。项目目录内不会写入任何内容。
基准测试
在大型 Rails 代码库(约 3.8k 个 Ruby 文件)上进行冷启动检查(关闭缓存),同一主机:
| 工具 | 用时 | 结果 | 备注 |
|---|---|---|---|
bundle exec rubocop --cache false | 2m 37s(2:36.64) | 0 个问题 | CPU 使用率约 99%(主要为单核) |
rrubocop --cache false | 7.0s(7.005) | 0 个问题 | CPU 使用率约 1040%(并行运行) |
nitrocop --no-cache | 8.9s(8.906) | 约 21k 个问题 | CPU 使用率约 1000%;并非公平的对等测试(见下文) |
在同样干净的结果下,rrubocop 的耗时比 RuboCop 快约 22×(156.6s / 7.0s)。RuboCop 的用户态时间为 155s;rrubocop 在多个核心上共使用了 71s 的 CPU 时间。
**nitrocop 注意事项:**开箱即用时,它无法遵循与 bundle exec rubocop 相同的禁用 cop、自定义规则和 gem 配置(例如 inherit_gem 加载失败、跳过或尚未实现的 cop),因此报告了约 21k 个误报,而 RuboCop 和 rrubocop 的检查结果均干净。要匹配该基线,需要额外设置(--migrate、插件和配置接线)。8.9s 仅代表原始吞吐量,不代表可直接替换并达到同等效果。
在 rails/rails(main,通过 bundle exec 使用 RuboCop 1.79.2)上进行冷启动检查(关闭缓存),同一主机(4 核),两者结果均干净(0 个问题)。两次运行取平均值:
| 工具 | 用时 | 备注 |
|---|---|---|
bundle exec rubocop --cache false | 1m 7s(67.254) | CPU 使用率约 99%(主要为单核);3543 个文件 |
rrubocop --cache false | 5.7s(5.668) | CPU 使用率约 357%(并行运行);3446 个文件 |
耗时快约 12×(67.254s / 5.668s)。RuboCop 的用户态时间为 66.9s;rrubocop 在多个核心上共使用了 20.2s 的 CPU 时间。
同一主机,冷启动 --cache false,在 Active Support 和 Active Record 上的问题集合一致(共同 .rb 文件的 fp=0、fn=0):
| 目标 | RuboCop | rrubocop | 提速倍数 |
|---|---|---|---|
activesupport(rails main) | 11.566s(531 个文件) | 1.872s | 约 6.2× |
activerecord(rails main) | 29.611s(1162 个文件) | 2.780s | 约 10.7× |
activesupport(v8.1.3.1) | 10.729s(506 个文件) | 1.795s | 约 6.0× |
activerecord(v8.1.3.1) | 27.847s(1126 个文件) | 2.656s | 约 10.5× |
在全新的 rails new 应用上进行冷启动检查(Rails 8.1.3.1,通过 inherit_gem 使用默认的 rubocop-rails-omakase,通过 bundle exec 使用 RuboCop 1.90.0),并运行脚手架、模型、邮件程序和任务生成器(41 个相同的目标文件)。问题集合一致:fp=0、fn=0(两者均干净)。两次运行取平均值:
| 工具 | 用时 |
|---|---|
bundle exec rubocop --cache false | 0.722s |
rrubocop --cache false | 0.593s |
与 nitrocop 进行交叉测试
使用本地构建的 nitrocop:
testdata/cross_test_nitrocop.py /path/to/fixture_dir
比较 (path, line, cop_name) 问题集合。
许可证
GPL-3.0-or-later。有关 nitrocop 衍生设计/逻辑的 MIT 归属信息,请参阅 NOTICE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。