Show HN:清除 Claude 留在代码库里的垃圾——CCN
CCN(Crap Comment Nuker)是一个基于真实解析器的交互式命令行工具,用于安全清理 AI 助手(如 Claude Code)留在代码库中的注释。它支持 JavaScript/TypeScript、Python、Java、Kotlin、Rust、C/C++,通过 acorn 和 tree-sitter 识别注释,并在写入前重新解析文件,确保不会改动任何代码 token。内置逐条确认、相似注释聚类、历史记录与 dry-run 模式,方便开发者批量清除垃圾注释。
CCN(Crap Comment Nuker)是一款命令行交互工具,专门用来清理 AI 编程助手留在代码库里的注释。项目通过 Show HN 发布,作者自称 Hardwick,并把仓库放在了 GitHub 上。它的目标很直接:把 Claude Code、Copilot 这类工具生成的、散落在代码里的“垃圾注释”逐条找出来,由开发者决定是否删除。工具的作者强调,CCN 不是基于正则表达式的猜测,而是为每种语言接入真正的解析器,因此不会误伤代码。
在安全性上,CCN 的设计核心是一道“写入闸门”(write gate)。JavaScript、CJS、MJS、ESM、JSX 使用 acorn 解析器,其他语言则使用 tree-sitter。解析器提供三样东西:准确的注释范围(所以字符串里的 // 或 # 不会被当成注释)、有效性检查,以及叶节点不变式。每次写入前,工具会重新解析文件,任何导致 token 移动的编辑都会被拒绝,因为注释本身不是 token,所以删注释不会改变代码结构。
CCN 支持的语言包括 JavaScript、TypeScript、TSX、Python、Java、Kotlin、Rust、C 和 C++,并覆盖各自常见扩展名。首次使用非 JavaScript 语言时,工具会提示下载对应的语法文件,并缓存在 ~/.config/ccn/grammars,之后可以离线使用。
交互流程也做得比较完整。直接运行 ccn 会进入主菜单,可以选择清理代码库、查看历史记录或删除历史记录。传入目录后,会依次经过目录菜单、语言菜单、一句俏皮话和说明、逐条注释确认四个界面。每条注释会独占一屏,按 Y 删除、N 保留、M 打开聚类菜单、Ctrl-C 退出。绿色提示表示该注释可能“属于这里”,比如位于方法或类上方、带 @marker,或包含 TODO、FIXME、HACK、NOTE;红色则提示这是多行大块注释。按 M 进入“simulurity”聚类视图,工具会找出代码库中余弦相似度不低于阈值的其他注释,让你一次性处理整组。
工具还提供了多种命令行参数:--lang 指定语言,--langs 列出支持的语言,--dry-run 只预览不写入,--remember 记住每次选择,--demo 自动同意所有提示,--limit 限制每个文件处理的块数,--sim 设置聚类相似度阈值,--no-sim 关闭聚类,--fdelay 和 --cdelay 控制文件间和块间的延迟。配合 --remember,之后的运行会自动应用之前完全一致的选择,但“可能属于这里”的注释始终会询问,而且写入闸门每次都会执行。
每次真正执行删除(不是 dry-run,也没有被安全门拒绝)都会记录到 ~/.config/ccn/recap.json,之后可以从主菜单的 recap 里回顾删掉了哪些注释,包括文件位置和行号。这不是撤销功能,只是回看记录;被修改的文件旁边会留下 .bak 备份。历史默认开启,最多保留最近 200 次会话。
安装方式为 npm install -g commentnuker,或者克隆仓库后直接运行。Linux 和 macOS 支持良好,Windows 作者表示“可能不行”。许可证方面,项目是 source-available 而非 OSI 开源,商用需要单独授权;即使你保留私有代码,也需要按 README 中的要求署名,例如注明“Built with Crap Comment Nuker from justcalljon.pro”。如果不想在公司的代码库中出现“crap”这个词,README 也提供了其他可接受的署名表述。