| name | code-simplifier |
| description | 简化和优化代码,提升清晰度、一致性和可维护性,同时保持原有功能不变。专注于最近修改的代码,除非明确要求更大范围。当用户说 "/code-simplifier"、"简化代码"、"优化代码"、"重构代码"、"清理代码"、"simplify"、"clean up code" 时触发。支持 Go、Java、Python、TypeScript、React(TSX/JSX)、Vue(2/3)。 |
Code Simplifier
代码简化专家。直接修改文件,不只是报告。只改"怎么做",不改"做什么"。
核心原则
- 功能不变 — 所有原有行为、输出必须保持完整
- 清晰优于简短 — 显式代码优于过度紧凑的"聪明"写法
- 最小改动 — 只改有明确收益的地方,不做可有可无的调整
- 不过度简化 — 不把多个关注点塞进一个函数,不删除有组织价值的抽象
协议
步骤 1: 确定范围
默认行为:用 git diff --name-only HEAD~1 获取最近修改的文件列表(如果在团队编排中被调用,调用方通常已指定范围,以调用方为准)。
过滤出支持的文件类型:
| 语言 | 文件扩展名 |
|---|
| Go | .go |
| Java | .java |
| Python | .py |
| TypeScript/React | .ts .tsx .jsx |
| Vue | .vue |
用户明确指定文件/目录时以用户为准。无 git 历史时,要求用户指定范围。
步骤 2: De-Sloppify(AI 过度工程化清理)
逐文件扫描以下模式,发现即用 Edit 工具直接清理:
| 模式 | 说明 |
|---|
| 语言特性测试 | 测试 null 参数、默认构造函数等语言本身保证的行为,而非业务逻辑 |
| 过度防守校验 | 内部方法间传递已校验参数又重复校验 |
| 无意义 try-catch | catch 后只是重新抛出、或 catch 空块 |
| 一次性抽象 | 只有一个实现的 interface/abstract class(明确为扩展点的除外) |
| 过度配置化 | 简单值用了复杂配置机制或环境变量 |
| 注释掉的代码 | 被注释的整段代码块(有 git 历史就不需要保留) |
步骤 2.5: 方法提取
先拆结构、再磨细节。大方法拆成小方法后,步骤 3 的简化会作用在更小的单元上,效果更好。
逐文件扫描范围内的方法/函数,满足以下任一条件即触发拆分:
条件 1 — 多职责检测(优先):方法内包含 2 个以上独立逻辑段落:
- 空行或注释分隔的代码块各自完成不同任务
- 混合了不同层次的关注点(如校验 + 业务逻辑 + 持久化 + 结果转换)
- 方法内有可被其他方法复用的代码片段
条件 2 — 行数兜底:即使看起来是"一件事",超过阈值说明可以找到更好的抽象层次:
| 语言 | 阈值 |
|---|
| Go | 50 行 |
| Java | 70 行 |
| Python | 50 行 |
| TypeScript/JavaScript | 50 行 |
提取协议:
- 识别方法内的独立逻辑段落
- 为每个段落确定职责,用"动词+名词"命名(如
validateOrder、buildAndSaveOrder)
- 提取为同级私有/内部方法(Java: private、Go: unexported、Python: _前缀、TS: 模块内函数)
- 原方法保留为编排入口,依次调用提取出的方法
- 在跳转处添加注释:提取后的编排方法中,在关键调用处添加简短注释说明该步骤的目的,尤其是:
- 调用链中不明显的跳转(如回调、异步、事件触发)
- 有条件分支决定是否继续的地方
- 返回值会影响后续流程的地方
- 用 Edit 工具直接执行拆分
安全约束:
- 不改变方法的公开签名
- 提取的方法默认最小可见性
- 段落间有紧密局部变量依赖时,通过参数传递而非扩大作用域
注释原则:
- 注释解释"为什么"而非"做什么"——方法名已经说了做什么
- 只在跳转和流程转折处加,不要每行都加
- 一句话够用就不写两句
各语言的提取示例参见对应 reference 文件中的"方法提取"章节。
步骤 3: 逐文件简化
3a. 加载语言指南
根据文件扩展名,读取对应的 reference 文件获取语言特定简化模式:
| 文件类型 | Reference |
|---|
.go | references/go.md |
.java | references/java.md |
.py | references/python.md |
.ts .tsx .jsx | references/typescript-react.md |
.vue | references/vue.md |
多种语言时只加载涉及的语言。
3b. 应用通用简化模式
以下模式适用于所有语言:
| 模式 | 做法 |
|---|
| 早返回 | 前置条件检查后立即 return,减少嵌套层级 |
| 消除冗余 else | if 分支已 return/throw/continue 则删除 else |
| 提取魔法数字 | 硬编码数值/字符串提取为命名常量 |
| 合并重复逻辑 | 3 处以上相同逻辑提取为公共函数 |
| 简化条件表达式 | 复杂布尔条件提取为命名变量或辅助函数 |
| 删除死代码 | 不可达分支、未使用的变量/导入/函数 |
| 删除多余注释 | 只描述显而易见内容的注释(保留解释 why 的注释) |
3c. 应用语言特定模式
参考加载的 reference 文件中的模式和示例。
3d. 执行修改
用 Edit 工具直接修改文件。每处改动在终端输出一行说明:
[文件路径:行号] 改动描述(一句话)
步骤 4: 验证与摘要
- 如果项目有 lint/test 命令(检测 Makefile、package.json scripts、go.mod 等),运行一次确认没有破坏
- 输出改动摘要:
## 简化完成
**范围**: N 个文件
**改动**: M 处
| 文件 | 改动数 | 主要改动 |
|------|--------|----------|
| path/to/file.go | 3 | 早返回、消除冗余 else、提取常量 |
| ... | ... | ... |
完成后停止,等待下一个命令。