4.3 KiB
4.3 KiB
description, argument-hint, allowed-tools
| description | argument-hint | allowed-tools | |||||
|---|---|---|---|---|---|---|---|
| 审查当前工作区未提交代码中的垃圾代码,并在不影响逻辑的前提下自动清理 | 可选:指定要检查的文件或目录(默认检查所有未提交修改) |
|
/cleanup — 垃圾代码审查与清理
分析当前工作区(git diff)中的未提交代码,找出并修复常见垃圾代码,不得改变任何运行逻辑。
检查范围
若 $ARGUMENTS 非空,则只检查指定文件/目录;否则检查所有未提交修改(git diff HEAD)。
审查清单
按优先级检查以下问题(只报告在本次 diff 中新增或修改的代码里存在的问题):
1. 重复逻辑 (Duplicate Logic)
- 完全相同或高度相似的代码块在多处出现
- 同一函数/方法被多个地方各自实现,已有公共版本未被复用
- 相同的 DOM 查询、正则、模板字符串在同一文件重复
2. Magic Numbers / Magic Strings
- 裸数字直接参与计算(如偏移量、时间、尺寸、阈值),没有命名常量
- 硬编码字符串(如 id 名、状态值、URL 片段)散落在逻辑中
- 例外:
0,1,-1,100,""等语义明确的惯用值不算
3. 命名问题
- 含义不明的缩写变量(如
or_,tmp2,x2) - 命名与实际用途不符
- 同一概念在不同地方用不同名字表达
4. 死代码 / 无效代码
- 注释掉的旧代码块(3行以上)
- 声明后从未使用的变量/参数/导入
- 永远不会执行的条件分支
5. 代码风格问题
- 尾部空白字符(trailing whitespace)
- 同一文件内风格不一致(如混用单双引号、缩进不统一)
- 空行使用不一致(连续多个空行等)
6. 其他常见问题
- 私有辅助函数应被 export 但没有,导致调用方重复实现
- 类型/接口重复定义
- 过于冗长的条件表达式可以简化(不改逻辑)
执行步骤
Step 1 — 获取待检查文件列表
# 无参数时:获取所有未提交修改
git diff HEAD --name-only
# 有参数时:用 $ARGUMENTS 过滤
Step 2 — 逐文件阅读并分析
- 用 Read 工具读取完整文件(不只读 diff)
- 对照审查清单,记录每个问题:文件名、行号、问题类型、建议修复方式
Step 3 — 报告问题清单
在修改前,先以列表形式输出所有发现的问题:
发现 N 个问题:
[文件] js/foo.js
· L34, L78: 重复逻辑 — 两处都实现了相同的 DOM 查询,可提取到 getPanel()
· L91: Magic number — 硬编码 14 作为偏移量,应命名为 TOOLTIP_OFFSET
[文件] js/bar.js
· L12: 命名问题 — 变量 `or_` 语义不明,应命名为 outerR/outerG/outerB
...
如果没有发现问题,直接输出"未发现垃圾代码,当前代码质量良好。"并停止。
Step 4 — 执行修复
对每个问题,使用 Edit 工具进行最小化修改:
- 重复逻辑:提取为共享常量/函数,更新所有调用点
- Magic number:在文件顶部或逻辑附近声明
const NAME = value,替换所有引用 - 命名问题:重命名变量,更新所有使用处
- 死代码:直接删除
- 尾部空白/风格:修正
- 未 export 的函数:添加
export,在调用方改为导入(不重复实现)
修复原则:
- 只改在审查清单中发现的问题,不做额外优化
- 每次 Edit 只修改确实有问题的行,保持 diff 最小
- 改完后用
grep验证旧的坏代码已消失
Step 5 — 输出总结
清理完成:
修复了 N 个问题:
✓ earth.js — 提取重复 vertexShader 为 ATMOS_VERTEX_SHADER 常量
✓ main.js — 提取 TOOLTIP_CURSOR_OFFSET = 14(4处引用)
✓ controls.js — export updateLayerButtonState,移除 main.js 中的重复实现
...
未修改的问题(需人工确认):
! foo.js L45 — 注释代码块较长,建议手动确认是否可删除
约束
- 禁止改变函数签名、接口定义、导出 API(除非问题正是私有函数应被 export)
- 禁止添加新功能、新抽象、新参数
- 禁止修改注释内容(只删除注释掉的死代码)
- 禁止修改测试文件逻辑
- 如果一个 Magic number 的语义不完全确定,跳过,在总结中标记为"需人工确认"