VSCode不检测重命名后的重复代码,因Find in Files仅字面匹配且插件只基于当前文本相似度判断;需调低duplicate-finder.minLines至5、similarityThreshold至75,并开启includeStrings,配合手动diff或simian工具识别逻辑重复。

VSCode 本身不检测“重命名后”的重复代码——它不记录你改过什么,也不对比前后差异。所谓“重命名后查重复”,本质是查“逻辑重复”,而这个动作和重命名无关,只和当前代码状态有关。
为什么重命名完再搜重复,Find in Files 还是漏?
因为 Ctrl+Shift+F 只做字面匹配:你把 userData 重命名为 userInfo,那原先搜 userData 就再也找不到新代码了;但两个结构一致、仅变量名不同的函数块,依然会被当成完全不同的文本。
- 它不忽略缩进、空格、换行、注释位置变化
- 不识别
for (let i = 0; i 和for (const item of arr)是同类逻辑 - 模板字符串里跨行的重复(如
`${a}\n${b}`)默认被跳过
CodeMirror Duplicate Finder 怎么调才对重命名后有效?
它不关心你重没重命名,只看当前文件里连续多行的文本相似度。但重命名后变量名变了,相似度会掉——所以得主动调低门槛:
- 把
duplicate-finder.minLines改成5(小钩子/工具函数常就 4–6 行) - 把
duplicate-finder.similarityThreshold调到75(默认 85,变量名一换就跌破) - 如果重复藏在模板字符串或 JSX 里,必须开
duplicate-finder.includeStrings: true - 确认
.gitignore没拦住你要查的目录(比如src/hooks/**被排除了,插件就扫不到)
重命名后发现疑似重复,但插件没标出来?试试组合技
插件对“变体重复”基本无解:两个函数只差一个参数名、是否用箭头函数、if 分支拆开写、甚至超时时间从 5000 改成 10000——这些都逃过检测。
- 用
Ctrl+Shift+F搜共性关键词:localStorage.setItem、axios.post、catch (err),把结果文件集中打开 - 把疑似块复制进 diffchecker.com 快速比对(比肉眼快 10 倍)
- 需要跨语言/跨框架归一化?用命令行工具
simian(配simian.json),它对空格缩进更宽容
别指望插件告诉你“这里刚重命名完,所以可能有新重复”。它只回答一个问题:“此刻,哪些连续文本块长得太像”。剩下的判断——比如“这两段是不是该合并成一个函数”——得你来定。











