DecSec2030/eslint-plugin-find-duplicates
GitHub: DecSec2030/eslint-plugin-find-duplicates
一个 ESLint 插件,通过底层 Go 二进制对代码结构进行规范化与哈希比对,检测 TypeScript、React、Vue 和 Svelte 项目中的结构化重复代码块。
Stars: 0 | Forks: 0
# eslint-plugin-find-duplicates
[](https://github.com/DecSec2030/eslint-plugin-find-duplicates/actions/workflows/ci.yml)
[](https://github.com/DecSec2030/eslint-plugin-find-duplicates/actions/workflows/release.yml)
[](https://github.com/DecSec2030/eslint-plugin-find-duplicates/releases/latest)
[](https://opensource.org/licenses/MIT)
**ESLint plugin** 用于检测 TypeScript、React、Vue 和 Svelte 项目中的**结构化代码重复**。
由 [find-duplicates](https://github.com/DecSec2030/find-duplicates) 提供支持 —— 这是一个 Go 二进制程序,会在比较代码结构之前对标识符、字符串和空白字符进行规范化处理。
## 安装
### 下载 .tgz(推荐)
```
# 从 GitHub Releases 下载
curl -L -o eslint-plugin-find-duplicates.tgz \
https://github.com/DecSec2030/eslint-plugin-find-duplicates/releases/latest/download/eslint-plugin-find-duplicates-*.tgz
npm install ./eslint-plugin-find-duplicates.tgz
```
### 从 GitHub 克隆
```
git clone https://github.com/DecSec2030/eslint-plugin-find-duplicates.git
cd eslint-plugin-find-duplicates
npm install
```
`postinstall` 脚本会自动为您的平台(Linux/macOS/Windows,amd64/arm64)下载匹配的 `find-dups` 二进制文件。如果下载失败,请从 Releases 中获取二进制文件:
```
curl -L -o /usr/local/bin/find-dups \
https://github.com/DecSec2030/eslint-plugin-find-duplicates/releases/latest/download/find-dups-linux-amd64
chmod +x /usr/local/bin/find-dups
```
然后在您的 ESLint 配置中链接或引用该插件。
## 用法
### ESLint 8(旧版配置)
```
// .eslintrc.js
module.exports = {
plugins: ['find-duplicates'],
rules: {
'find-duplicates/no-duplicates': ['warn', {
minOccurrences: 2,
minLines: 5,
ignorePatterns: ['__DEV__'],
}],
},
};
```
### ESLint 9(扁平化配置)
```
// eslint.config.js
import findDuplicates from 'eslint-plugin-find-duplicates';
export default [
{
plugins: { 'find-duplicates': findDuplicates },
rules: {
'find-duplicates/no-duplicates': ['warn', {
minOccurrences: 2,
minLines: 5,
ignorePatterns: ['__DEV__'],
}],
},
},
];
```
## 选项
| 选项 | 类型 | 默认值 | 描述 |
|--------|------|---------|-------------|
| `minOccurrences` | number | `2` | 报告所需的最小出现次数 |
| `minLines` | number | `5` | 代码块的最小行数 |
| `ignorePatterns` | string[] | `[]` | 要忽略的模式(可重复) |
## 工作原理
1. 当 ESLint 启动时,该规则会在您的项目根目录运行一次 `find-dups --json`
2. 该二进制程序会扫描所有 `.ts`、`.tsx`、`.vue`、`.svelte` 文件
3. 代码块会被规范化(剥离标识符、字符串和空白字符)并进行哈希处理
4. 相同的哈希值将被分组为结构化重复
5. 结果会在整个 ESLint 会话期间进行缓存
6. ESLint 处理的每个文件都会与结果进行比对检查
## 二进制文件回退
如果自动下载失败,请确保 `find-dups` 可在您的 `PATH` 中找到:
```
# 手动下载
curl -L -o /usr/local/bin/find-dups \
https://github.com/DecSec2030/find-duplicates/releases/latest/download/find-dups-linux-amd64
chmod +x /usr/local/bin/find-dups
```
## 生态系统
| 包名 | 安装方式 |
|---------|---------|
| `eslint-plugin-find-duplicates` | 从 [GitHub Releases](https://github.com/DecSec2030/eslint-plugin-find-duplicates/releases/latest) 下载 `.tgz` |
| `code-analytics` | 从 [GitHub Releases](https://github.com/DecSec2030/code-analytics/releases/latest) 下载二进制文件 |
| `find-duplicates` | 从 [GitHub Releases](https://github.com/DecSec2030/find-duplicates/releases/latest) 下载二进制文件 |
| `find-dead-code` | 从 [GitHub Releases](https://github.com/DecSec2030/find-dead-code/releases/latest) 下载源码 |
## 许可证
MIT
标签:ESLint插件, SOC Prime, 云安全监控, 代码查重, 前端, 开发工具, 日志审计, 自定义脚本, 静态分析