CodeMirror Duplicate Finder无真正白名单,仅通过search.exclude排除路径实现“只查指定目录”;需手动关闭.gitignore拦截、开启includeStrings、调低minLines和similarityThreshold以适配项目。

CodeMirror Duplicate Finder 的白名单其实是“排除路径”配置
它没有真正意义上的「白名单」机制,只有通过 search.exclude 和插件自身的扫描范围控制来实现「只查指定目录」的效果。所谓“白名单检测”,本质是把不想扫的全 exclude 掉,剩下就是你要盯的。
常见错误现象:装了插件却找不到 src/hooks/ 下的重复逻辑,但 src/components/ 里一堆高亮——大概率是 .gitignore 或 files.exclude 把 src/hooks/** 给挡了。
- 必须关掉全局排除:在工作区
.vscode/settings.json中显式覆盖search.exclude,比如删掉"**/src/hooks": true这类行 - 插件不读
files.exclude,但会尊重search.exclude;而.gitignore是硬性过滤,哪怕你手动加了"**/src/utils": false也无效,得临时注释掉 .gitignore 相关条目 - 想只扫
src/features/和src/shared/?直接配:"search.exclude": { "**/node_modules": true, "**/dist": true, "**/tests": true, "**/src/components": true, "**/src/assets": true }
duplicate-finder.includeStrings 设为 true 才能扫进模板字符串和 JSX
默认它跳过所有字符串内容,所以两个一模一样的 `api/v1/users/${id}/profile` 模板串,或两段相同结构的 <div classname="card">...</div>,根本不会被识别为重复——不是漏,是设计如此。
如果你的项目大量逻辑藏在 JSX 或带变量的模板字符串里(比如 React 组件中反复拼接 class 名、API 路径),不打开这个开关,等于关掉了半块检测区域。
- 在设置里搜
duplicate-finder.includeStrings,勾选或手动加:"duplicate-finder.includeStrings": true
- 开启后性能略降,尤其大文件含长模板字符串时,建议搭配
duplicate-finder.minLines提高到 6 或 7,避免误报单行字符串 - 注意:它仍不会解析字符串内变量语义,
`/user/${id}`和`/profile/${userId}`还是算不同
minLines 和 similarityThreshold 必须按项目调,不能照搬默认值
默认 duplicate-finder.minLines: 8 和 duplicate-finder.similarityThreshold: 85 是通用保守值,但在真实业务代码里容易失效:React 自定义 Hook 常就 4–6 行,工具函数可能只有 5 行加个 try/catch,相似度一换参数名就掉到 70 以下。
不调这两个值,等于让插件在你项目里“睁眼瞎”。
- 中小型项目建议起步值:
"duplicate-finder.minLines": 5,<br>"duplicate-finder.similarityThreshold": 75
- 如果发现太多噪声(比如两段都含
console.log('done')就被标红),再逐步提高 threshold 到 80;若漏检严重,把 minLines 降到 4,但别设为 1–2,否则注释块或空行都会触发 - 调整后务必右键 →
Find Duplicates in Workspace重刷一次,插件不会自动监听配置变更
真正需要白名单思维的地方:是人工比对前的筛选
插件永远扫不出「参数名不同但逻辑一致」「if 拆开写 vs 合并写」「箭头函数 vs function 声明」这类变体重复。这时候所谓的“白名单”,是你自己决定:哪些文件/目录值得花时间肉眼比对。
比如你刚改完用户中心的登录流程,怀疑订单模块也用了同一套 token 刷新逻辑——那就别全项目扫,直接 Ctrl+Shift+F 搜 refreshToken 或 axios.interceptors,把结果限定在 src/auth/ 和 src/order/ 两个目录下,再复制进 diffchecker.com。
这个过程没法自动化,但能省掉 90% 的无意义滚动。别等插件给你标出“重复”,先用关键词把你关心的上下文圈出来——这才是白名单真正的用法。


















