duplicate finder 默认不支持按文件类型过滤,因其仅扫描 vscode 可见文件,需通过 files.exclude 设置或配合 ctrl+shift+f 预筛,或改用 simian/jscpd 等命令行工具实现精准类型过滤。

为什么默认的 Duplicate Finder 不会按文件类型过滤
CodeMirror Duplicate Finder 插件本身不提供「只扫描 .ts 文件」或「跳过 .test.js」这类原生过滤能力。它扫描的是工作区中所有未被 .gitignore 或 VSCode 的 files.exclude 排除的文件,且对文件后缀无感知——哪怕你只打开一个 src/ 目录,它也会把里面所有可读文件(包括 .md、.json)一并纳入比对。
用 files.exclude 临时限制扫描范围最直接
这不是“功能”,而是绕过插件限制的实操路径:VSCode 的 files.exclude 设置能实时控制哪些文件/目录被编辑器“看见”,而 Duplicate Finder 只扫描编辑器可见的文件。
- 打开工作区设置(
settings.json),添加或修改:"files.exclude": { "**/*.md": true, "**/*.json": true, "**/*.test.js": true, "**/node_modules/**": true } - 改完保存,右键 →
Find Duplicates in Workspace,插件就只会扫剩下的.js、.ts、.jsx等源码文件 - 注意:这个设置会影响所有插件和搜索功能,用完记得还原,否则 Ctrl+P 查文件也会漏掉
配合 Find in Files 按后缀预筛再人工比对
当你要查的重复逻辑有强语言特征(比如全是 useEffect 调用),不如先用 VSCode 原生搜索缩小范围,再进单个文件用 Duplicate Finder:
- Ctrl+Shift+F,搜索框填
useEffect,在「包含」里写**/*.tsx - 结果出来后,逐个点开命中文件,右键 →
Find Duplicates in File - 这样避免了全量扫描带来的误报(比如把
README.md里写的伪代码也当重复块) - 特别适合检查钩子、组件模板、API 封装层这类高复用但文件类型集中的代码
真正需要按类型隔离时,得换工具链
如果你的项目要求「只比对 TypeScript 类型定义」或「排除 JSX 中的重复字符串」,Duplicate Finder 已到能力边界。这时必须切到命令行静态分析工具:
-
simian支持--files="**/*.ts"参数,还能用--threshold=70降低相似度要求 -
jscpd(JavaScript Code Plagiarism Detector)原生支持--path "**/*.js" --reporters html,输出带语法高亮的对比报告 - 它们不依赖 VSCode UI,可集成进 CI 流程,但配置成本明显高于插件
别指望一个插件同时满足「语义识别」「文件类型过滤」「跨语言归一化」——它只是帮你把「扫 200 个文件」压成「扫 5 个文件」,剩下的筛选和判断,始终得你来定。











