VSCode原生不支持语义级重复代码检测,必须依赖插件;CodeMirror Duplicate Finder需调参(minLines=5、similarityThreshold=75、includeStrings=true)才能有效识别React项目中的逻辑重复,ESLint/SonarLint等工具因非结构比对型而无法检测此类重复。

VSCode 原生不检测 React 项目中的语义重复代码,Ctrl+Shift+F 只能搜固定字符串,对变量名不同、缩进不一致、JSX 拆行、模板字符串包裹等情况完全失效——真要查逻辑重复,必须用插件,且得调对参数。
CodeMirror Duplicate Finder 配置不对就等于没装
它默认只扫「连续 8 行以上 + 相似度 ≥ 85%」的块,但 React 函数组件、自定义 Hook、错误处理逻辑常不到 8 行,变量名一换相似度就掉到 70% 以下:
- 把
duplicate-finder.minLines改成5(小钩子、useEffect 块通常就 4–6 行) - 把
duplicate-finder.similarityThreshold调到75(容忍参数名、空格、注释位置差异) - 若重复藏在 JSX 或
const tmpl = `...`里,必须开启duplicate-finder.includeStrings: true - 检查
.gitignore或files.exclude是否误排除了src/下目录(比如写了"**/src/**"却没注意通配符层级)
为什么 ESLint / SonarLint 查不出这类重复
它们是规则驱动型工具,不是结构比对型工具:
构建 Shopify 嵌入式应用(Embedded App)的开发技能:基于 @shopify/shopify-app-react-router + React Router v7 + Admin API 2026-04。覆盖 shopifyApp 配置、authenticate.admin 的 GraphQL/REST 调用、Webhook 校验、Session 存储、订阅计费、App Bridge 导航、部署,并新增:适用场景判断、安全最佳实践、错误处理与容错、最佳实践、常见问题 FAQ、高级场景。G
-
eslint-plugin-react能报jsx-key、no-unused-prop-types,但不会说「src/user/Profile.tsx和src/order/Detail.tsx里这两段 fetch + loading + error 处理长得一模一样」 - SonarLint 默认跳过未编译的 TSX 文件,且需完整项目构建上下文,轻量扫描时响应慢、漏 JS/TSX 混合目录
- 所有 lint 工具都不做跨文件文本相似度计算,这是静态分析和重复检测的根本分工差异
查到“疑似重复”后怎么判断该不该合并
插件只负责高亮分组,是否真该抽成公共函数,得看业务演化路径:
- 两处都调
axios.post('/api/login'),但一处校验手机号、另一处校验邮箱——别硬抽,未来字段校验逻辑大概率分叉 - 都用了
useState+useEffect管理弹窗开关,且 props 结构一致({ visible, onClose })——这就是典型可提取场景 - 如果插件标出的“重复块”里包含
localStorage.setItem('theme', ...)和localStorage.setItem('lang', ...),那是关键词巧合,不是逻辑重复,别动
真正容易被忽略的是:插件永远找不到「结构错位」的重复——比如同一段表单校验逻辑,一处写在 handleSubmit 里,另一处拆成 validateEmail + validatePassword 两个函数。这时候得靠 Ctrl+Shift+F 搜 localStorage、setError、toast.error 这类共性标识符,再人工比对上下文。工具只压缩搜索范围,不替代判断。

















