CodeMirror Duplicate Finder不能查多端重复逻辑,它仅基于连续文本块结构相似度比对,无法识别Web/小程序/RN中等价业务逻辑;需通过统一契约、行为锚点(如请求配置、事件追踪、状态写入)人工比对。

CodeMirror Duplicate Finder 能不能直接查多端重复逻辑
不能。它只比对连续文本块的结构相似度,不理解“同一业务在 Web / MiniApp / React Native 中的等价实现”这种跨平台语义。比如 Web 里用 fetch、小程序里用 wx.request、RN 里用 axios 的三段登录请求逻辑,即使参数、错误处理、状态更新完全一致,插件也只会当成三个独立代码块。
真正有效的检测路径:先收敛调用契约,再搜共性特征
多端重复的本质不是代码长得像,而是“干同一件事、输入输出一致、副作用相同”。所以得绕过语法表层,从行为锚点切入:
- 统一提取各端共用的请求配置项(如
timeout、baseURL、authHeader),在各自网络封装层里搜timeout:或baseURL: - 锁定关键副作用函数名,比如都调了
trackEvent('login_success')或都写了setStorage('user_token', ...),用Ctrl+Shift+F搜这些字符串 - 检查状态管理部分:如果都用了 Redux Toolkit,搜
createAsyncThunk('login/;如果都用 Zustand,搜useStore.setState后紧跟的字段名(如user、token) - 注意路径差异:Web 端可能在
src/api/login.ts,小程序在miniprogram/api/login.js,RN 在app/src/services/login.ts——确保files.exclude和.gitignore没把它们全挡掉
为什么相似度阈值调低也没用
把 duplicate-finder.similarityThreshold 从 85 改成 60,顶多让两段 JS 写法稍不同的 Web 逻辑被标出来,但对跨端场景毫无帮助。因为:
- 各端 API 调用签名不同:
fetch(url, options)vswx.request({ url, data })vsaxios.post(url, data),参数位置、对象键名、错误结构全不一样 - 生命周期钩子不一致:Web 用
useEffect,小程序用onLoad,RN 可能用componentDidMount,插件根本没法归一化 - 模板层差异更大:JSX、WXML、JSX for RN 的结构完全不同,插件默认跳过 JSX 内容,更别说 WXML 了
人工比对时该盯住哪几行
当搜索定位到疑似重复的三处代码后,别通读整段,直接聚焦这四行:
- 输入来源:是否都从
getAuthCode()、this.data.code、useRoute().params.code取初始参数? - 核心转换逻辑:是否都有
code → token → user三步链路?每步的if分支和catch处理是否一致? - 状态写入点:是否都调了
setUser(...)、updateUserInfo(...)、store.dispatch(setUser(...))这类最终落库动作? - 错误兜底:是否都触发了
showToast('登录失败')、Alert.alert('Login failed')、wx.showToast?文案和延迟时间是否相同?
跨端重复最难缠的不是结构雷同,而是某一处悄悄加了 if (isWeb) {...} 分支或改了超时时间——这些细微偏差,工具永远扫不到,必须你逐行对照业务意图。











