SuperAPI AI 工具集

code-dedup

编程与开发

查看项目

更新于 10-16 06:00

技能介绍

用途

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 的文件会被跳过以保证性能