用途
ponytail-review 是一个代码审查技能,专门针对“过度工程”(over-engineering)问题。它审查代码差异(diff),目标是找出可以删除的内容,让 diff 变得更短。
主要能力
它聚焦于以下几类不必要的复杂度:
- delete:死代码、无人使用的灵活性、投机性功能。替代方案:无。
- stdlib:手写的、标准库已经提供的实现。需指出对应的函数名。
- native:依赖或代码在做平台本身已经能做的事。需指出对应的平台特性。
- yagni:只有一个实现的抽象、没人设置的配置、只有一个调用方的分层。
- shrink:逻辑相同但行数更少的写法。需给出更短的形式。
使用方式
输出格式为每条发现一行:
- 单文件 diff:
L<line>: <tag> <what>. <replacement>. - 多文件 diff:
<file>:L<line>: ...
示例:
L12-38: stdlib: 27-line validator class. "@" in email, 1 line, real validation is the confirmation mail.L4: native: moment.js imported for one format call. Intl.DateTimeFormat, 0 deps.repo.py:L88: yagni: AbstractRepository with one implementation. Inline it until a second one exists.L52-71: delete: retry wrapper around an idempotent local call. Nothing replaces it.L30-44: shrink: manual loop builds dict. dict(zip(keys, values)), 1 line.
审查结束时给出唯一评分指标:net: -<N> lines possible(净可减少 N 行)。
如果没有任何可删内容,则输出 Lean already. Ship. 并停止。
适用场景
适用于希望精简代码、减少不必要抽象和依赖的代码审查场景。它只列出问题,不实际应用修复。
限制
- 范围仅限过度工程与复杂度。正确性 bug、安全漏洞和性能问题明确不在范围内,应转交常规审查流程。
- 单个冒烟测试或基于 assert 的自检是 ponytail 的最低要求,不算臃肿,不应被标记删除。
- 不应用修复,只列出清单。
- 可通过
stop ponytail-review或normal mode切换回详细审查风格。