应将 minLines 设为 5、similarityThreshold 降至 75,并开启 includeStrings: true;需手动触发查重,注意 .gitignore 排除影响,变体重复需结合关键词搜索与人工比对。

duplicate-finder.minLines 和 similarityThreshold 怎么调才不漏不误报
默认值 minLines: 8 和 similarityThreshold: 85 对多数项目偏保守:小函数、React Hook 逻辑、错误处理块常只有 4–6 行,直接被过滤;变量名一换(data → payload)或缩进多一个空格,相似度就掉到 80 以下,插件就当没看见。
实操建议:
- 把
duplicate-finder.minLines改成5,覆盖常见钩子和校验逻辑 - 把
duplicate-finder.similarityThreshold降到75,容忍变量名、空格、注释位置差异 - 如果项目大量用模板字符串或 JSX,必须设
duplicate-finder.includeStrings: true,否则`${a} ${b}`这类重复完全隐身 - 改完配置后右键选
Find Duplicates in Workspace,别等自动扫描——它只在打开文件变更时触发,手动触发才可靠
为什么 .gitignore 排除的目录里永远查不到重复
CodeMirror Duplicate Finder 默认尊重 VSCode 的文件排除规则,包括 .gitignore、files.exclude 和 search.exclude。你搜不到 src/utils/** 里的重复,大概率不是插件不准,而是那目录早被 .gitignore 拦住了。
检查方法:
- 打开命令面板(
Ctrl+Shift+P),运行Developer: Toggle Developer Tools - 切到 Console 标签页,输入
vscode.workspace.getConfiguration().get('search.exclude'),看是否含"**/node_modules/**"或自定义路径 - 临时关闭排除:在设置里搜
search.exclude,清空或注释掉相关项,再重跑查重 - 更稳妥的做法是复制一份项目副本,删掉
.gitignore里非必要条目,专用于定期查重
模板字符串和 JSX 里的重复怎么抓
默认情况下,插件跳过所有字符串内容,因为比较字符串字面量容易误报(比如两个不同 API 的 URL 碰巧结构相似)。但如果你的重复逻辑就藏在 fetch(`${BASE}/user/${id}`) 或 里,就得主动开闸。
关键动作:
- 设
duplicate-finder.includeStrings: true—— 这是硬开关,不启用等于对模板字符串“睁眼瞎” - 同步调低
similarityThreshold到70左右,模板字符串里换行、空格、变量顺序稍有不同,相似度波动更大 - 注意副作用:开启后,大量相似的 mock 数据或长 JSON 字符串可能被误标,需人工快速过筛,重点盯
if/for块包裹的字符串 - 查出结果后,别直接合并——模板字符串内嵌逻辑往往依赖上下文,抽成函数比拼接字符串更安全
变体重复根本查不出来,这时候该怎么做
插件对「同一段逻辑,只改了一个参数名/用了箭头函数/拆了 if 分支」完全无感。这不是 bug,是设计限制:它比的是文本连续块,不是 AST 节点。
真实有效的补救手段:
- 用
Ctrl+Shift+F搜共性关键词,比如axios.post、localStorage.setItem、catch (err),把结果限制在 10 个文件内再肉眼扫 - 把疑似重复块全选复制,粘贴到
diffchecker.com或本地code --diff file1.js file2.js,视觉比对快于读两遍代码 - 对高频变体,写个简单正则批量定位:
if\s*\([^)]*==[^)]*\)\s*\{[\s\S]*?\}找所有单条件 if 块,再人工判断是否该归一 - 真正难的是决策:这两处看着像,但业务语义真一样吗?要不要加个参数控制分支?这类判断没法自动化,得你对着 PR 描述和接口文档拍板











