Files
planet/.claude/commands/cleanup.md
2026-04-14 07:46:19 +08:00

4.3 KiB
Raw Blame History

description, argument-hint, allowed-tools
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 — 获取待检查文件列表

# 无参数时:获取所有未提交修改
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 = 144处引用
  ✓ controls.js — export updateLayerButtonState移除 main.js 中的重复实现
  ...

未修改的问题(需人工确认):
  ! foo.js L45 — 注释代码块较长,建议手动确认是否可删除

约束

  • 禁止改变函数签名、接口定义、导出 API除非问题正是私有函数应被 export
  • 禁止添加新功能、新抽象、新参数
  • 禁止修改注释内容(只删除注释掉的死代码)
  • 禁止修改测试文件逻辑
  • 如果一个 Magic number 的语义不完全确定,跳过,在总结中标记为"需人工确认"