必须先安装linter核心包(steelbrain作者)、linter-rubocop语言插件和linter-ui-default ui插件,三者缺一不可;还需确保系统已安装≥1.0版本的rubocop并正确配置路径与.rubocop.yml(含root: true),否则静默失效。

linter-rubocop 装了但没反应?先确认 linter 核心和 UI 插件都到位
Atom 1.24+ 版本后,linter 不再是可选依赖,而是强制前置框架。只装 linter-rubocop 会静默失败:命令面板搜不到 Linter: Toggle,设置页也不显示配置入口,状态栏永远显示 “0 problems”。
必须按顺序执行:
- 在 Atom → Preferences → Install 中搜索
linter(作者必须是steelbrain),安装并执行Window: Reload - 再单独安装
linter-rubocop(别装名字相近但作者不明的包,比如linter-rubocop-atom) - 手动安装
linter-ui-default:命令行运行apm install linter-ui-default,并在 Packages 设置里确认开关为启用状态
缺 linter-ui-default 是最常见“没报错”的原因——linter-rubocop 只负责调用 rubocop 命令并解析结果,画红线、悬停提示、状态栏计数全靠它。
RuboCop 本身没装或路径不对,linter-rubocop 就直接罢工
linter-rubocop 默认不自带 RuboCop,它只是个“调度器”,必须系统里真有 rubocop 可执行文件,并且 Atom 能访问到。
常见失效场景:
- 终端能跑
rubocop --version,但 Atom 里不报错 → 很可能是 GUI 启动 Atom 导致 PATH 缺失(尤其 macOS)。改用终端执行atom --new-window启动,继承 shell 环境 - 项目用了
bundle管理 gem,但linter-rubocop设置里没指定执行路径 → 进 Settings → Packages →linter-rubocop→ 勾选Use bundle exec,或手动填bundle exec rubocop到RuboCop Command字段 - 全局安装了
rubocop,但版本太老(如0.90)→linter-rubocop需要rubocop >= 1.0才能正确解析 JSON 输出格式,旧版返回文本格式会导致解析失败、静默跳过
.rubocop.yml 配置位置和 root: true 很关键
linter-rubocop 默认只从当前文件所在目录向上查找 .rubocop.yml,直到遇到含 root: true 的配置文件为止。没设 root: true,它可能读到父目录甚至 home 目录下的配置,导致规则不生效或误报。
正确做法:
- 把
.rubocop.yml放在项目根目录(即Gemfile所在层) - 文件开头必须有
root: true,例如:
root: true AllCops: RunRailsCops: true Metrics/LineLength: Max: 120
如果项目结构是 myapp/app/models/xxx.rb,而 .rubocop.yml 在 myapp/ 下但没写 root: true,插件可能继续往上找,最终用错配置。
“Fix on save” 失效?检查 rubocop 是否支持自动修复 + 插件开关
linter-rubocop 的自动修复能力取决于 RuboCop 本身是否能 fix 当前问题,不是所有 cop 都支持 --auto-correct(比如 Lint/UnusedVariable 就不能 auto-fix)。
确保生效需同时满足:
-
linter-rubocop设置中开启Fix on save和Fixable Rules Only - 当前 Ruby 文件未被
.rubocop.yml的Exclude规则覆盖(例如Exclude: ['db/**/*', 'spec/**/*']) - 文件顶部没写
# rubocop:disable all或类似禁用注释 - RuboCop 版本 ≥ 1.20(早期版本对
--auto-correct-all支持不完整,部分规则仍需手动触发)
一个容易忽略的点:如果同时开了 prettier-atom 或 atom-beautify,它们可能在保存瞬间抢先格式化,导致 RuboCop 修复被覆盖——建议 Ruby 项目只留 linter-rubocop 负责检查+修复,格式化交给 RuboCop 自己(通过 rubocop -a 批量处理),别混用其他格式化插件。











