VSCode原生不支持语义级重复代码检测,必须依赖插件;CodeMirror Duplicate Finder需调低minLines至5、similarityThreshold至75,并启用includeStrings才能有效识别小函数、模板字符串等真实项目中的逻辑重复。

VSCode 原生不支持语义级重复代码检测,Ctrl+Shift+F 搜不到逻辑相同但变量名、缩进或注释不同的代码块——必须靠插件,且不能只装完就用。
CodeMirror Duplicate Finder 配置不对等于没装
它默认只扫「连续 ≥8 行、相似度 ≥85%」的文本块,而真实项目里小函数、React Hook 逻辑常只有 4–6 行,模板字符串里的重复默认被跳过。不调配置,基本查不到东西。
- 把
duplicate-finder.minLines改成5(尤其对useEffect、useState组合逻辑有效) - 把
duplicate-finder.similarityThreshold降到75,否则const data = ...和const payload = ...就算完全一样也标不出 - 若重复藏在
jsx或带换行的模板字符串里,必须开duplicate-finder.includeStrings: true - 检查
.gitignore或files.exclude是否误排除了src/utils/**这类目录——插件不会扫描被排除的路径
为什么 Find in Files 总是漏掉第 6 处重复?
Ctrl+Shift+F 是纯字符串匹配,不归一化空格、不忽略变量名、不理解 JSX 结构。它能把 axios.post 搜出来,但搜不到同一逻辑改用 fetch 或 useQuery 的变体。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 两个函数只差一个参数名(
uservsuserInfo),它当两段完全无关代码 -
{\n name: "a",\n age: 12\n}和{name: "a", age: 12}因为换行和空格差异,无法匹配 - 重复日志拼接写在
`Error: ${err.message} at ${location}`里,字符串模式直接跳过
变体重复只能人工辅助定位
插件对“结构错位但逻辑一致”的重复无能为力:比如一段校验逻辑被拆进两个 if 分支、一个用箭头函数 + 解构、另一个用 function + arguments、甚至只是多加了一行 if (!x) return;。
- 先用
Ctrl+Shift+F搜共性关键词,如localStorage.setItem、catch (err)、formatDate - 把疑似块复制到 diffchecker.com 快速比对,肉眼判断是否真该合并
- 对跨文件高频重复,可临时跑一次
simianCLI(需配simian.json),它比插件更宽容缩进与空格
别指望工具标出全部重复——它只负责把“全项目扫一遍”的体力活,压缩成“看三四个文件就够了”。真正难的是判断:这两处重复分别在用户中心和订单模块,未来演化路径会不会分叉?这时候工具已经帮不上忙了。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










