mcpField
A
apply-code-conventions

apply-code-conventions

github.com/igmarin开发2845 次安装4 周前更新
代码仓库

关于 apply-code-conventions

apply-code-conventions 是用于审查和重构 Rails 代码的技能,在项目配置的 Linter 规则之外提供架构与行为指导,并强调测试门槛、结构化日志和按目录应用规则。

主要功能

  1. 01遵循 Linter 的风格规则
  2. 02测试先行实施门槛
  3. 03结构化日志要求
  4. 04按路径提供 Rails 建议
  5. 05衔接专门技能

适用场景

  1. 01审查 Rails 代码变更
  2. 02重构控制器或服务对象
  3. 03检查日志与 TODO 注释

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/igmarin/rails-agent-skills --skill apply-code-conventions

安装后在 Claude Code 中输入/apply-code-conventions确认已加载。

附带文件assets/checklist.mdassets/snippets.md

详细介绍

应用代码规范

风格的唯一来源: 风格与格式以项目配置的 linter 为准。本技能仅增加非风格行为和架构指导。关于 Hotwire + Tailwind 的具体内容,参见 apply-stack-conventions。

快速参考

主题规则
原则DRY、YAGNI、在有帮助之处使用 PORO、CoC、KISS
注释 / 标签解释为什么;带标签的备注需要可操作的上下文
日志一个经过验证的消息参数(通常是 JSON hash);不要插值;出错时包含脱敏的回溯信息
深层技术栈串联 apply-stack-conventions → 领域技能(services、jobs、RSpec)

HARD-GATE

TESTS GATE IMPLEMENTATION:
When this skill guides new behavior, the tests gate still applies:
PRD → TASKS → TEST (write, run, fail) → IMPLEMENTATION → …
No implementation code before a failing test. See write-tests.

核心流程

在审查或重构 Rails 代码时,请遵循以下顺序。每个步骤都对应输出中一个必需的检查点。

  1. 运行 linter — 检测配置(例如 .rubocop.yml 或 .standard.yml),运行相应的工具,如果没有找到则注明缺失。输出:检测到 linter(或缺失);风格以其为准。
  2. 应用特定区域的规则 — 检查路径模式,并应用“按区域应用”表中的针对性指导。输出:针对每个相关已更改文件的具体逐路径建议。
  3. 验证测试关卡 — 在任何新行为之前确认存在失败的测试。输出:失败的 spec、运行命令、预期失败、最小实现步骤、通过后的重新运行。
  4. 强制结构化日志 — 确保所有 Rails.logger 调用都使用已安装 logger 经过验证的单消息接口;包含 event: 字段,并为错误包含脱敏的回溯信息。输出:应用下方子规则中的结构化日志规则。
  5. 强制注释纪律 — 确保所有标签(TODO:、FIXME:)都有可操作的上下文(负责人、工单)。输出:应用下方子规则中的注释纪律规则。
  6. 串联到专门技能 — 根据需要,使用集成表引入更深入的指导(安全、jobs、specs)。

语言: 除非明确要求其他语言,否则使用英语。

子规则

注释和带标签的备注

注释为什么,而不是是什么。标签 —— TODO: / FIXME: / HACK: / NOTE: / OPTIMIZE: —— 必须携带可操作的上下文(负责人、工单、下一步)。裸标签无法通过审查。

# BAD — naked tag, no context
# TODO: fix this

# GOOD — TODO with next step + dependency
# TODO(jsmith, JIRA-1234): replace TIER_RATES with DB-backed lookup once billing API v2 is stable.
结构化日志

使用项目已安装的 logger 接口。标准 Ruby/Rails logger 接受一个消息参数;两参数的结构化调用需要经过验证的自定义适配器。在恢复边界处记录一次,脱敏敏感数据,并保留意外异常。

rescue Timeout::Error => e
  Rails.logger.error({ event: "order.processing_failed", error_class: e.class.name, backtrace: e.backtrace&.first(5) }.to_json)
  raise
end
按区域应用(路径模式)
区域路径模式指导
ActiveRecord 性能app/models/**/*.rb在循环中预加载;优先使用 pluck / exists? / find_each。
Controllersapp/controllers/**/*_controller.rb强参数;精简 action → services;IDOR / PII → security-check。
RSpecspec/**/*_spec.rbFactoryBot;除非需要立即初始化,否则 let 优于 let!。
Service objectsapp/services/**/*.rb单一职责;.call / 注入依赖。
Background jobsapp/jobs/**/*.rb / app/workers/**/*.rb幂等性、重试、队列选择以及副作用边界 → implement-background-job。
RSpec 和 let_it_be(test-prof)

仅当 test-prof 已在 Gemfile.lock 中时才推荐 let_it_be。否则默认使用 let;仅当惰性求值会破坏示例时才使用 let!。除非被要求,否则不要引入 test-prof。

扩展资源(渐进式披露)

仅在需要其特定内容时才加载这些文件:

在你的输出中记录加载了哪些资源以及原因,以便该过程可验证。

集成

技能何时串联
apply-stack-conventions技术栈特定:PostgreSQL、Hotwire、Tailwind
model-domain当领域概念和不变量需要更清晰的 Rails 优先建模选择时
create-service-object实现或完善服务对象
implement-background-jobWorker、队列、重试、幂等性
write-testsSpec 风格、测试门禁(红/绿/重构)、request spec 与 controller spec
security-checkController、参数、IDOR、PII
code-review合并前的完整 PR 审查

评论

支持 Markdown