--- description: 审查当前工作区未提交代码中的垃圾代码,并在不影响逻辑的前提下自动清理 argument-hint: 可选:指定要检查的文件或目录(默认检查所有未提交修改) allowed-tools: ["Read", "Edit", "Bash", "Grep", "Glob"] --- # /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 — 获取待检查文件列表 ```bash # 无参数时:获取所有未提交修改 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 的语义不完全确定,**跳过**,在总结中标记为"需人工确认"