Resolve FIXME Comments
用途
用于在代码库中查找所有 FIXME 注释,并完整实现这些注释所描述的工作。适用于用户要求修复、解决或处理 FIXME 注释的场景。
工作流程
- 运行发现脚本
从仓库根目录执行脚本,收集所有 FIXME 及其上下文:
bash .forge/skills/resolve-fixme/scripts/find-fixme.sh [PATH]
PATH 可选;省略则搜索整个工作目录。
脚本会为每个 FIXME 打印前 2 行、后 5 行上下文,以及确切的文件路径和行号。
跳过 .git/、target/、node_modules/ 和 vendor/。
需要 rg(ripgrep)或 grep + python3。
- 将每个 FIXME 展开为完整指令
不要只依赖发现输出。
对每个命中项:
打开文件并阅读报告行附近的内容。
将 FIXME 扩展为包含整个注释块。
将所有连续的相关注释行视为同一条指令的一部分。
重要:
FIXME 可能是多行的。包含 FIXME 的那一行通常只是开头。
真正的指令可能延续在后续注释行中,并可能包含实际的实现细节。
在阅读完整注释块之前,不要解释或修改 FIXME。
对每个展开后的 FIXME,记录:
文件路径
完整注释块的起始行与结束行
该 FIXME 所要求内容的简短摘要
- 跨文件合并相关 FIXME
在编辑代码之前,先一起审阅所有展开后的 FIXME。
许多 FIXME 描述的是同一底层任务在不同文件中的不同侧面。例如:
一个文件可能描述需要引入的领域类型
另一个可能描述一旦该类型存在就应消失的参数
另一个可能描述完成同一重构所需的服务、仓库或 UI 更新
将这类 FIXME 归组为一个实现任务。
分组时,寻找:
共享词汇
对同一类型、服务、仓库、参数或功能的引用
明确描述不同文件中前置与后续变更的注释
只有放在一起阅读才有意义的注释
对每个分组,产出一份统一的任务理解:
涉及的所有文件和行范围
该分组需要完成的完整实现
变更应采用的顺序
不要孤立地逐个文件解决分组内的 FIXME。要一致地解决整个任务。
- 完整实现每个 FIXME
每个 FIXME 都必须被解决。没有跳过路径。
逐个分组任务推进,直到底层实现完成:
阅读理解设计所需的任何额外文件。
创建或修改所需的代码、类型、服务、仓库、测试、配置或模板。
将变更传播到分组中所有受影响的文件。
只有在所描述的工作真正实现之后,才移除对应的 FIXME 注释。
关键规则:除非底层实现已完成,否则绝不要删除或改写 FIXME 注释。该注释是所需工作的记录。在完成该工作之前移除它属于失败。
如果 FIXME 暗示更大的重构,就执行该重构。如果它需要创建新的支撑代码,就创建它。如果注释明确暗示其他地方还有后续工作,不要停在第一个局部变更上。
- 验证
解决所有 FIXME 之后:
运行项目的标准验证步骤:
cargo insta test --accept
重新运行发现脚本:
bash .forge/skills/resolve-fixme/scripts/find-fixme.sh [PATH]
确认目标范围内不再残留 FIXME 注释。
说明
优先采用针对性修复,但当多个 FIXME 描述同一更大任务时,不要缩小工作范围。
当意图不明确时,先广泛阅读再编辑。
一致性比局部性更重要:分组后的 FIXME 应导向一份连贯的实现。
任务不是清理注释,而是完成这些注释所指向的实现。