代码复杂度分析器

分析圈复杂度、认知复杂度、深层嵌套和重复代码

对 JavaScript、TypeScript、Python、Java、Go 代码进行复杂度与质量启发式分析。

示例结果

2 个示例

分析分支较多的 JavaScript 函数

用较严格阈值评估一个嵌套定价函数的圈复杂度和认知复杂度。

{
  "summary": {
    "language": "javascript",
    "functionCount": 1,
    "averageCyclomaticComplexity": 5,
    "averageCognitiveComplexity": 4,
    "hotspotCount": 0,
    "longFunctionCount": 0,
    "deepNestingCount": 1,
    "duplicateClusters": 0
  },
  "functions": [
    {
      "name": "score",
      "cyclomaticComplexity": 5,
      "deepNesting": true
    }
  ]
}
查看输入参数
{ "sourceCode": "function score(order) {\n if (!order) return 0;\n let total = 0;\n for (const item of order.items) {\n if (item.discount) {\n total += item.price * 0.8;\n } else if (item.vip) {\n total += item.price * 0.9;\n } else {\n total += item.price;\n }\n }\n return total;\n}", "language": "javascript", "longFunctionThreshold": 8, "nestingThreshold": 2, "duplicateWindow": 4 }

识别 Python 中重复的归一化逻辑

检测重复的辅助函数风格逻辑,并确认相似代码块中的重复窗口。

{
  "summary": {
    "language": "python",
    "functionCount": 2,
    "duplicateClusters": 1
  },
  "duplicates": [
    {
      "occurrences": 2,
      "lines": [
        1,
        6
      ]
    }
  ]
}
查看输入参数
{ "sourceCode": "def normalize_user(row):\n email = row[\"email\"].strip().lower()\n if not email:\n return None\n return {\"email\": email, \"team\": row.get(\"team\", \"general\")}\n\ndef normalize_admin(row):\n email = row[\"email\"].strip().lower()\n if not email:\n return None\n return {\"email\": email, \"team\": row.get(\"team\", \"general\")}", "language": "python", "longFunctionThreshold": 20, "nestingThreshold": 3, "duplicateWindow": 3 }

关键信息

分类
开发与 Web
输入类型
textarea, select, number
输出类型
json
样本覆盖
4
支持 API
Yes

概览

代码复杂度分析器是一款专为开发者设计的静态分析工具,支持 JavaScript、TypeScript、Python、Java 和 Go 语言。它通过启发式算法快速评估代码的圈复杂度、认知复杂度、深层嵌套以及重复代码块,帮助团队在代码审查阶段发现潜在的维护热点,量化代码可读性,从而有效提升整体代码质量与系统的可维护性。

适用场景

  • 在代码审查(Code Review)前,需要客观量化评估代码可读性和后续维护成本时。
  • 重构遗留系统时,用于快速定位深层嵌套、超长函数等高风险的“代码坏味道”。
  • 团队需要统一代码质量标准,检测并消除项目中冗余的重复代码逻辑时。

工作原理

  • 将需要分析的源代码粘贴到输入框中,并选择对应的编程语言(或保留自动识别)。
  • 根据项目规范,自定义长函数阈值、嵌套深度阈值以及重复代码检测的窗口大小。
  • 工具会解析代码结构,计算每个函数的圈复杂度和认知复杂度,并扫描符合条件的重复片段。
  • 最终生成结构化的 JSON 报告,详细列出全局复杂度指标、热点函数及重复代码的具体位置。

使用场景

前端开发者分析复杂的 React 或 Vue 组件逻辑,排查过多的条件分支,降低状态管理的认知复杂度。
后端工程师在重构 Python 或 Go 微服务时,扫描并提取多个接口中重复的业务处理函数。
技术负责人定期抽查核心模块的 Java 代码,确保函数的嵌套深度和长度符合团队的编码规范。

用户案例

1. 评估复杂分支函数的维护成本

前端开发工程师
背景原因
在处理电商订单的计价逻辑时,代码中堆砌了大量的 if-else 分支,导致后续修改极易出错。
解决问题
需要量化该计价函数的复杂程度,并检查是否存在过深的条件嵌套。
如何使用
将计价函数的 JavaScript 代码粘贴到输入框,将嵌套阈值调低至 2,以执行更严格的检查。
示例配置
语言: JavaScript, 长函数阈值: 8, 嵌套阈值: 2
效果
分析报告输出该函数的圈复杂度为 5,并标记了深层嵌套警告(deepNesting: true),提示开发者考虑使用策略模式进行重构。

2. 排查数据清洗脚本中的重复逻辑

数据工程师
背景原因
团队接手了一个包含多个辅助函数的 Python 数据处理脚本,怀疑其中存在大量复制粘贴的代码。
解决问题
快速找出脚本中结构相似或完全重复的代码块,以便提取为公共函数。
如何使用
粘贴 Python 脚本代码,将“重复窗口大小”调整为 3,以捕捉较短的重复逻辑块。
示例配置
语言: Python, 重复窗口大小: 3
效果
工具成功检测到 1 个重复集群,指出 normalize_user 和 normalize_admin 函数存在高度重复,并输出了具体的行号范围供开发者合并。

用 Samples 测试

development

相关专题

常见问题

支持分析哪些编程语言?

目前支持 JavaScript、TypeScript、Python、Java 和 Go 语言的源代码分析。

圈复杂度和认知复杂度有什么区别?

圈复杂度主要衡量代码中线性独立路径的数量,反映测试的难度;认知复杂度则侧重于评估人类阅读和理解代码逻辑的困难程度。

如何调整重复代码的检测灵敏度?

可以通过修改“重复窗口大小”参数来调整。数值越小,检测越严格,能捕捉到更短的重复代码块;默认值为 5 行。

分析器会保存我的源代码吗?

不会。所有代码分析均在工具中实时处理,系统不会永久存储或收集您的源代码数据。

分析结果中的“热点(hotspot)”代表什么?

热点通常指圈复杂度或认知复杂度远超常规标准,且包含深层嵌套或过长逻辑的函数,建议在重构时优先处理这些代码。

API 文档

请求端点

POST /zh/api/tools/code-complexity-analyzer

请求参数

参数名 类型 必填 描述
sourceCode textarea -
language select -
longFunctionThreshold number -
nestingThreshold number -
duplicateWindow number -

响应格式

{
  "key": {...},
  "metadata": {
    "key": "value"
  },
  "error": "Error message (optional)",
  "message": "Notification message (optional)"
}
JSON数据: JSON数据

AI MCP 文档

将此工具添加到您的 MCP 服务器配置中:

{
  "mcpServers": {
    "elysiatools-code-complexity-analyzer": {
      "name": "code-complexity-analyzer",
      "description": "分析圈复杂度、认知复杂度、深层嵌套和重复代码",
      "baseUrl": "https://elysiatools.com/mcp/sse?toolId=code-complexity-analyzer",
      "command": "",
      "args": [],
      "env": {},
      "isActive": true,
      "type": "sse"
    }
  }
}

你可以串联多个工具,比如:`https://elysiatools.com/mcp/sse?toolId=png-to-webp,jpg-to-webp,gif-to-webp`,最多20个。

如果遇见问题,请联系我们:[email protected]