用途
Refactor Operations 是一个专注于“安全重构”的技能,用于在尽量不改变行为的前提下改进代码结构。它同时覆盖重构决策、执行方法、安全校验和死代码清理。
主要能力
1. 重构决策树
技能以决策树形式组织常见重构场景,帮助判断应使用哪种模式:
- 提取代码为新单元:提取函数/方法(识别输入参数与返回值)、提取组件(React、Vue、Svelte,将 JSX/模板与相关状态移入新文件)、提取 Hook/Composable(复用有状态逻辑)、提取模块(文件超过 300-500 行时按职责拆分并使用 barrel exports,注意循环依赖)、提取类/服务(遵循单一职责,使用依赖注入)、提取配置(魔法数字、硬编码字符串、环境相关值、特性开关)。
- 为清晰而重命名:重命名变量/函数/方法(更新所有引用,可用 IDE 重命名或 ast-grep)、重命名文件+更新导入(使用 git mv 保留历史)、重命名模块/包并更新所有使用方(可考虑临时从旧名再导出)。
- 移动到更好的位置:函数/类移到不同文件(从原位置再导出一个发布周期)、文件移到不同目录、整体目录重组(增量迁移,保持测试通过)。
- 简化现有代码:内联函数、内联变量、卫语句与提前返回(反转条件)、分解复杂条件式。
- 删除死代码:未使用导入(lint 自动修复)、不可达分支(静态分析+人工复核)、孤立文件(依赖图分析,如 knip、ts-prune、vulture)、未使用导出。
2. 安全检查清单
- 重构前:完整测试套件全部通过、工作树干净、使用专用分支、基线分支 CI 通过、理解代码实际行为、为未测试代码编写特征测试。
- 重构中:每次提交都能编译且测试通过、提交小而聚焦(一次重构一次提交)、不混入行为变更、每次修改后运行测试(可用 --watch)。
- 重构后:完整测试通过、无新增 lint/类型警告、请求代码评审、性能基准不变(如适用)、更新文档(如公共 API 变化)。
3. 提取、重命名、移动速查表
提供模式/场景与关键注意事项对照,例如提取函数的命名应描述“做什么”而非“怎么做”,提取组件的 props 接口应最小化,提取 Hook/Composable 必须以 use 开头并返回稳定引用,提取模块应一模块一职责,重命名时注意字符串引用、序列化数据、测试/storybook/配置文件中被遗漏的导入路径等。
4. 死代码检测工作流
- 自动检测:TypeScript/JavaScript 使用 knip、ts-prune、eslint;Python 使用 vulture、ruff、coverage.py;Go 使用 staticcheck/golangci-lint;Rust 使用编译器警告。文档给出具体命令。
- 人工验证:检查是否通过反射/动态导入使用、是否为外部消费的公共 API、是否被脚本/测试/工具使用、是否在特性开关或 A/B 测试之后。
- 有把握地删除:小批量删除、一组死代码一次提交、保留 git 历史。
5. 代码异味检测
列出常见异味与启发式及对应重构方式:长函数、上帝对象、依恋情结、重复代码、深层嵌套、基本类型偏执、霰弹式修改、死代码、数据泥团、长参数列表。
6. 测试驱动重构方法论
针对未测试代码:先写特征测试捕获“当前行为”(作为安全网而非正确性证明)、验证覆盖率、小步重构并每次运行测试、之后改进为意图清晰的测试、分开提交测试与重构以便评审。
7. 工具参考与常见陷阱
工具表涵盖 ast-grep、jscodeshift、eslint --fix、ruff、goimports、clippy、knip、ts-prune、vulture、rope、IDE 重命名、sd,并给出命令。常见陷阱表覆盖:重构与行为变更混在同一提交、内部重构破坏公共 API、提取模块后出现循环依赖、测试通过但运行时失败、文件移动后丢失 git 历史、重命名遗漏字符串引用、过早抽象、提取耦合代码、死代码删除破坏反射/插件、提取后性能回退、大型重构 PR 产生合并冲突、移动文件后类型错误等。
使用方式
技能以决策树、清单和速查表为入口,按场景选择重构模式;结合 references 目录下的参考文件(提取模式、代码异味、安全方法论)以及测试、结构搜索、调试、代码统计、迁移、git 等配套技能协同使用。
适用场景
适用于需要对既有代码进行结构化调整、消除重复、拆分过大文件或类、清理死代码、重命名或移动符号与文件、并在测试保护下确保行为不变的重构任务。
限制
资料未说明具体支持的平台、收费方式与价格信息。