SuperAPI AI 工具集

duck-refactor

编程与开发

查看项目

更新于 10-16 03:01

技能介绍

用途

duck-refactor 用于支持多文件代码重构,通过有界重构操作、显式引用追踪和验证来完成代码结构调整。它适用于用户要求重构、提取、跨文件重命名、移动代码、内联或转换模式时。

触发短语包括:

  • "refactor this"
  • "extract this function/class/method"
  • "rename this across the codebase"
  • "move this to another file"
  • "inline this function"
  • "convert this callback to promise"

主要能力

  • 多文件重构,带引用追踪。
  • 在编辑前追踪引用与依赖:定位目标代码的所有用法、映射导入/导出、识别调用方与被调用方、查找引用目标的测试文件、记录外部依赖。
  • 在编辑前给出有界重构计划,包含操作类型、目标、目的地、目标阶段、受影响文件、变更列表和验证方式。
  • 应用 Duck Ladder 原则:无需改动(YAGNI)、复用现有本地辅助函数/模式、替换为标准库/原生实现、使用已安装依赖、缩小到最小安全差异,最后才新增代码或抽象。
  • 要求执行批准:在获得明确批准前不进行多文件重构。
  • 执行重构:按定义先于用法、导入先于代码的顺序修改,更新导入/导出,保持格式一致,保留记录持久约束、不变量、契约或行为的准确注释和文档。
  • 验证重构:运行验证计划,确认测试通过、无损坏导入、类型检查通过(如适用)、功能不变。

使用方式

该技能按以下方法执行:

  1. 澄清重构范围:当上下文不完整时提出 1-3 个有针对性的澄清问题;证据缺失时明确说明假设。范围问题包括:提取/重命名/移动/内联什么?目标位置(新文件、现有文件、新函数名)?范围边界(本模块、整个代码库)?

  2. 追踪引用与依赖:使用只读证据收集,输出类似 "Found N references across M files: [list]"。

  3. 呈现重构计划:在编辑前给出有界计划,格式包含操作、目标、目的地、目标阶段、受影响文件、变更列表和验证方式。如果超出阶段上限或触发审查疲劳,则询问是否拆分为更小的有界重构。

  4. 应用 Duck Ladder:在提出重构方案前,依次考虑无需改动、复用现有本地辅助函数/模式、替换为标准库/原生实现、使用已安装依赖、缩小到最小安全差异,最后才新增代码或抽象。

  5. 要求执行批准:在执行重构前,明确目标阶段、目标文件、预期结构变更和验证计划,等待用户回复 "approve" 后执行。

  6. 执行重构:获得批准后,按顺序修改,更新导入/导出,保持格式一致,保留准确的持久性注释和文档。

  7. 验证重构:运行验证计划,报告测试结果和变更文件数量。

当作为子代理运行且没有用户通道时(例如通过 duckling),不应用编辑或运行验证命令。执行步骤 1-5 作为分析;将步骤 6 "执行重构" 和步骤 7 "验证" 替换为批准包内容:推导出的逐文件变更计划(适用时包含差异块)和验证计划。按宿主包装器的契约输出(预检 + 差异 + 批准请求 + 状态页脚)。

适用场景

  • 需要跨多个文件进行代码结构调整时。
  • 需要提取函数、类或方法时。
  • 需要在代码库中重命名标识符时。
  • 需要将代码移动到另一个文件时。
  • 需要内联函数时。
  • 需要将回调转换为 Promise 等模式转换时。

限制

该技能明确区分于其他技能:

  • 与 duck-patch 相比:duck-refactor 是多文件重构;duck-patch 是单文件缺陷修复。
  • 与 duck-simplify 相比:duck-refactor 是中性重构;duck-simplify 是以特定目标降低复杂度。
  • 与 duck-design 相比:duck-refactor 是实现;duck-design 是决策/权衡分析。
  • 与 duck-debug 相比:duck-refactor 修改代码;duck-debug 只追踪/调查。

duck-refactor 不做以下事情:

  • 不进行无结构调整的单文件编辑,应使用 duck-patch。
  • 不以降低复杂度为主要目标,应使用 duck-simplify。
  • 不进行架构决策,应使用 duck-design。
  • 不进行仅移动文件而不修改代码的操作,应使用 duck-patch。

范围限制:

  • 阶段上限(默认):阶段 1 最多 6 个文件,阶段 2 最多 4 个文件,阶段 3 最多 2 个文件。
  • 如果超出阶段上限或触发审查疲劳,拆分为更小的有界批准。
  • 如果重构需要设计决策,暂停并先路由到 duck-design。
  • 如果重构揭示复杂性问题,记录以便后续使用 duck-simplify。
  • 如果某项变更会削弱信任边界验证、安全控制、数据丢失预防、无障碍要求或明确的用户要求,拒绝该变更,并仅提供保留该约束的安全替代方案。

注释和文档完整性要求:

  • 记录持久约束、不变量、契约和行为。
  • 不要在代码注释或普通文档中叙述开发历史。
  • 移除或标记被拒绝的方法、"这曾经是" 历史、近期变更上下文,以及仅解释变更如何产生的评审、测试或会话引用。
  • 不要在持久工件中保留仅会话决策、批准标志或临时标记。
  • 仅在用于历史的持久工件(如 ADR 或变更日志)中保留历史上下文。
  • 仅当测试或评审引用陈述持久约束或验证要求时才保留。

技能特定差异:多文件重构操作需要执行批准并带完整引用追踪。与单文件补丁和复杂度削减区分开。