todo tree 与 todo highlight 组合实现可追踪、可协作、可收敛的代码任务管理,需配 ripgrep 提升扫描性能,并统一关键词正则、作用域及刷新机制,辅以团队语义规范。

Todo Tree 和 TODO Highlight 是目前 VS Code 中真正能落地的任务管理组合,不是“提醒”,而是“可追踪、可协作、可收敛”的代码任务系统。单用一个容易漏掉关键上下文,配着用才完整。
Todo Tree 为什么必须配 ripgrep
它默认用 VS Code 自带的搜索,但一进 node_modules 或大项目就卡顿、延迟、漏结果。真实项目里,扫描速度直接决定你愿不愿意每天点开树状视图看一眼。
- macOS/Linux:终端执行
brew install ripgrep,Windows 用choco install ripgrep - 装完后在 settings.json 加上
"todo-tree.ripgrepArgs": "--max-columns=200 --max-count=1000",避免长行截断或结果被截 - 不装 ripgrep 时,
todo-tree.tree.autoRefresh基本形同虚设——保存文件后树不更新,你会误以为没扫到
TODO Highlight 的关键词匹配容易踩的坑
它默认只认 TODO、FIXME、NOTE,但实际项目里常混用大小写、冒号、括号、空格,比如 // todo:、/* FIXME (login) */、// BUG#PROJ-123,这些全得靠正则兜住。
- 别直接往
todoHighlights.keywords里塞字符串,要写成对象:{"pattern": "BUG#[A-Z]+-\d+", "color": "#f56c6c"} - 注意转义:JavaScript 字符串里写
\d+,JSON 里是"\d+",少一个反斜杠就失效 - 如果高亮出现在字符串或注释外(比如变量名含
TODO),说明没启用上下文识别,加配置"todoHighlights.languages": ["javascript", "typescript", "python"]
两个插件共用时的冲突点
它们都依赖注释语法解析,但机制不同:TODO Highlight 是编辑器级实时高亮,Todo Tree 是文件保存后触发扫描。这就导致一个典型问题——改完注释、保存、高亮变了,但 Todo Tree 树里还挂着旧条目。
- 关闭
todo-tree.tree.autoRefresh,改用命令Todo Tree: Refresh Tree手动触发,避免假阴性 - 把 Todo Tree 的扫描范围(
todo-tree.filtering.includeGlobs)和 TODO Highlight 的作用域(todoHighlights.include)保持一致,比如都设为["**/*.ts", "**/*.js", "**/*.py"] - 别同时开启两者的图标标记(如
todo-tree.highlights.enable和todoHighlights.showInStatusBar),右下角状态栏会打架
真正难的不是配出效果,而是让团队所有人写的 FIXME 都指向同一个修复动作、同一个负责人、同一个截止时间。插件只是载体,语义规范才是骨架——比如规定所有 BUG# 后必须接 Jira ID,所有 HACK 必须带日期和替代方案注释,否则再好的工具也救不了模糊表达。











