用途
code-dedup 是一个面向 AI 的代码分析平台,用于检测重复代码、识别死代码,并给出结构改进建议。它适合在代码审查、重构、质量门禁、技术债跟踪和代码审计等场景中使用。
主要能力
重复代码检测
采用 O(n) 的 MinHash LSH 算法进行快速近似重复检测:
- 精确匹配:使用 MD5 哈希识别完全相同的代码块
- 近似匹配:使用 MinHash + LSH 识别相似代码(Type-2 克隆)
- 可扩展性:可在数秒内分析 1000+ 文件
基于 AST 的死代码检测
通过静态分析查找未使用的代码:
- 检测未使用的函数、变量和导入
- 构建引用图以跟踪符号使用情况
- 支持可配置的白名单模式
- 智能过滤导出符号与测试文件
结构度量
分析代码复杂度与可维护性:
- 圈复杂度:每个函数的决策点数量
- 函数长度:每个函数的代码行数
- 嵌套深度:最大缩进层级
- 参数数量:函数参数个数
使用方式
安装
npm install
CLI 使用
分析整个项目:
# 运行所有分析
node src/cli.js analyze ./src
# 运行特定分析
node src/cli.js analyze ./src --analyses dedup,deadCode
# 生成供 AI 处理的 JSON 报告
node src/cli.js analyze ./src --format json --output report.json
使用自定义选项分析:
node src/cli.js analyze ./src \
--min-similarity 0.9 \
--max-complexity 8 \
--format json \
--output report.json
快速检查命令:
# 快速重复检查
node src/cli.js check-dup ./src
# 快速死代码检查
node src/cli.js check-dead ./src
# 快速结构检查
node src/cli.js check-struct ./src
# 格式化代码
node src/cli.js format ./src --output formatted.md
编程 API
import { analyzeCode, checkDuplicates, checkDeadCode, checkStructure } from './index.js';
// 综合分析
const result = await analyzeCode('./src', {
analyses: ['dedup', 'deadCode', 'structure'],
format: 'json'
});
console.log(result.summary);
// { status: 'success', filesAnalyzed: 42, issuesFound: 15, durationMs: 234 }
// 单项检查
const duplicates = await checkDuplicates('./src', {
minSimilarity: 0.85
});
const deadCode = await checkDeadCode('./src', {
ignoreExports: true,
ignoreTestFiles: true
});
const structure = await checkStructure('./src', {
maxComplexity: 10,
maxFunctionLength: 50
});
输出格式
JSON 输出包含 summary、results(duplicates、deadCode、structure)和 recommendations 三部分。示例:
{
"summary": {
"status": "success",
"filesAnalyzed": 42,
"issuesFound": 15,
"durationMs": 234
},
"results": {
"duplicates": [
{
"file1": "src/auth.js",
"file2": "src/user.js",
"similarity": 0.92,
"type": "approximate",
"lines": 45
}
],
"deadCode": [
{
"symbol": "unusedFunction",
"file": "src/utils.js",
"line": 23,
"type": "function"
}
],
"structure": {
"complexFunctions": [
{
"name": "processData",
"file": "src/api.js",
"complexity": 15,
"line": 45
}
]
}
},
"recommendations": [
{
"type": "refactor",
"priority": "high",
"description": "Extract duplicate validation logic",
"files": ["src/auth.js", "src/user.js"]
}
]
}
配置项
重复检测
- minLines:重复检测的最小行数(默认:5)
- minSimilarity:相似度阈值 0-1(默认:0.85)
- ignoreWhitespace:忽略空白差异(默认:true)
- ignoreComments:忽略注释(默认:true)
死代码检测
- ignoreExports:忽略导出符号(默认:true)
- ignoreTestFiles:忽略测试文件(默认:true)
- testPatterns:自定义测试文件模式(默认:['/.test.js', '/.spec.js'])
- whitelistPatterns:要忽略的符号模式(默认:[])
结构分析
- maxComplexity:最大圈复杂度(默认:10)
- maxFunctionLength:最大函数行数(默认:50)
- maxParameters:最大函数参数数(默认:5)
- maxNestingDepth:最大嵌套深度(默认:4)
适用场景
- 代码审查:在 PR 审查中自动发现重复代码模式
- 重构:在清理前识别未使用的函数和变量
- 质量门禁:集成到 CI/CD 以强制执行代码质量标准
- 技术债:跟踪并优先处理代码质量改进
- 代码审计:分析大型代码库的可维护性问题
集成示例
CI/CD 流水线
# .github/workflows/code-quality.yml
- name: Check code quality
run: |
node src/cli.js analyze ./src --format json --output report.json
if [ $(jq '.issuesFound' report.json) -gt 0 ]; then
echo "Code quality issues found"
exit 1
fi
Pre-commit 钩子
// package.json
{
"husky": {
"hooks": {
"pre-commit": "node src/cli.js analyze ./src --format json"
}
}
}
性能
| 项目规模 | 文件数 | 耗时 |
|---|---|---|
| 小型 | <100 | <2s |
| 中型 | 100-1K | <10s |
| 大型 | >1K | <30s |
支持语言
- JavaScript (ES6+)
- TypeScript
- JSX/TSX
- Python(实验性)
使用建议
- 从默认设置开始:默认设置适用于大多数项目
- 调整阈值:收紧相似度阈值以减少误报
- 使用白名单:添加框架模式以避免误报
- 定期分析:每周运行以跟踪技术债
- 结合格式化工具:与 Prettier/ESLint 配合使用效果最佳
限制
- 静态分析:可能遗漏动态访问的代码
- 尽力而为:死代码检测准确率约 90%
- 语言支持:目前针对 JavaScript/TypeScript 优化
- 大文件:超过 10MB 的文件会被跳过以保证性能