VSCode 原生不支持导出代码重复检测报告,主流插件如 CodeMirror Duplicate Finder 仅提供高亮与分组视图,无法生成 JSON/HTML 等结构化报告文件,也不提供导出功能、API 或磁盘写入能力。

VSCode 原生不支持导出代码重复检测报告,所有「导出」动作都依赖插件能力,且目前主流插件(如 CodeMirror Duplicate Finder)只提供高亮与分组视图,不生成可存档的结构化报告文件。
CodeMirror Duplicate Finder 能不能导出 JSON/HTML 报告?
不能。该插件只在编辑器内高亮重复块,并在侧边栏以分组列表形式展示匹配位置,但没有导出按钮、命令或配置项支持生成任何格式的外部报告。它不写入磁盘,也不提供 API 或事件供其他插件读取结果。
- 你右键菜单里看到的
Find Duplicates in Workspace只触发扫描并刷新 UI,不会生成临时文件 - 设置中所有选项(如
duplicate-finder.minLines、duplicate-finder.similarityThreshold)仅影响检测逻辑,不影响输出形态 - 插件源码未暴露结果数据结构,无法用 VSCode 的
Developer: Inspect Editor Tokens或扩展 API 拿到原始重复块数组
想保存重复检测结果,只能手动截图或复制文本?
不完全是。虽然不能一键导出报告,但你可以用组合操作把关键信息固化下来:
- 在侧边栏重复分组上右键 →
Copy All Duplicates(部分版本支持),粘贴后得到带文件路径、行号和代码片段的纯文本,适合存为duplicate-summary.txt - 对每个高亮块,按
Ctrl+Click(或Cmd+Click)跳转到所有匹配位置,再用Ctrl+Shift+P→File: Save As保存当前文件副本,加注释说明“含重复块 @L42–L49” - 若需长期追踪,建议把重复块特征(如函数名、关键字符串)记入
TODO注释,配合TODO Tree插件统一索引,比截图更可持续
为什么不用 ESLint 或 SonarLint 替代?
它们能报重复逻辑,但不是同一类检测目标:
-
ESLint的no-duplicate-case、no-identical-functions等规则只覆盖极窄语义场景(如 switch 分支重复、完全相同的函数字面量),对跨文件、非函数级、结构相似但变量名不同的重复无效 -
SonarLint支持“Identical blocks”规则,但需连接 SonarQube 服务器才能启用完整分析,本地离线模式下该规则默认禁用,且报告仍需通过 Web UI 查看,无法直接导出 - 二者输出都是问题列表(problem matcher 格式),不是“重复块原文+所有位置”的对照视图——而这才是你做合并或重构时真正需要的信息
真正卡住的地方不在工具链,而在 VSCode 缺乏统一的「静态分析结果导出协议」:每个插件各自维护 UI 层展示逻辑,没人负责把中间结果标准化成 JSON Schema 或提供 exportResults() 方法。所以目前最务实的做法,是把侧边栏内容当「实时报告」用,靠人工摘录关键段落存档——别等自动导出,它短期内不会来。











