Анализатор Сложности Кода

Оценивает цикломатическую и когнитивную сложность, вложенность и дубли

Выполняет эвристический анализ качества кода для 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

Показывает повторяющиеся helper-функции и подтверждает дубли по похожим блокам кода.

{
  "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. Он автоматически вычисляет цикломатическую и когнитивную сложность, выявляет глубокую вложенность, слишком длинные функции и дублирующиеся участки логики, помогая разработчикам поддерживать чистоту, тестируемость и читаемость кодовой базы.

Когда использовать

  • Перед отправкой кода на ревью (Pull Request), чтобы убедиться в отсутствии переусложненной логики и глубокой вложенности.
  • При рефакторинге старых проектов для выявления «горячих точек», длинных функций и дублирующегося кода.
  • Для контроля качества кода в команде и соблюдения стандартов длины функций.

Как это работает

  • Вставьте исходный код в текстовое поле и выберите язык программирования (или оставьте автоопределение).
  • Настройте пороги для длинных функций, уровня вложенности и окна поиска дубликатов в зависимости от ваших стандартов.
  • Запустите анализ, чтобы инструмент разобрал синтаксис и вычислил метрики сложности.
  • Получите подробный JSON-отчет со статистикой по функциям, цикломатической сложности и найденным дублям.

Сценарии использования

Оценка технического долга в унаследованных (legacy) проектах на Java или Python.
Оптимизация производительности и читаемости сложных алгоритмов на TypeScript.
Аудит кодовой базы для выявления антипаттернов, таких как «спагетти-код» или чрезмерное копирование логики.

Примеры

1. Анализ ветвистой функции расчета

Frontend-разработчик
Контекст
Разработчик написал функцию расчета стоимости заказа с множеством условий для скидок и VIP-клиентов.
Проблема
Нужно проверить, не стала ли функция слишком сложной для понимания и тестирования.
Как использовать
Вставить код функции в поле «Исходный код», выбрать язык JavaScript и установить порог вложенности на 2.
Пример конфигурации
Язык: javascript, Порог длинной функции: 8, Порог вложенности: 2
Результат
Анализатор показывает цикломатическую сложность 5 и предупреждает о глубокой вложенности, что сигнализирует о необходимости рефакторинга.

2. Поиск дублирующейся логики

Backend-разработчик
Контекст
В скрипте обработки данных есть несколько функций для нормализации пользователей и администраторов.
Проблема
Подозрение на дублирование кода (Copy-Paste), которое усложняет поддержку и внесение изменений.
Как использовать
Вставить Python-скрипт, установить окно дублирования на 3 строки и запустить анализ.
Пример конфигурации
Язык: python, Окно дублирования: 3
Результат
Инструмент находит кластер дубликатов из двух вхождений, указывая точные строки, где логика повторяется, что позволяет вынести ее в общую функцию.

Проверить на примерах

development

Связанные хабы

FAQ

Какие языки программирования поддерживаются?

Инструмент поддерживает эвристический анализ кода на JavaScript, TypeScript, Python, Java и Go. Также доступна функция автоопределения языка.

Что такое цикломатическая сложность?

Это метрика, которая оценивает количество линейно независимых маршрутов через программный код. Чем больше ветвлений (if, for, while), тем выше сложность и тем больше тестов требуется для покрытия.

Чем когнитивная сложность отличается от цикломатической?

Когнитивная сложность оценивает, насколько трудно человеку прочитать и понять код, учитывая вложенность и логические разрывы, а не просто математическое количество путей выполнения.

Как работает поиск дубликатов?

Инструмент ищет повторяющиеся блоки кода, сравнивая их структуру. Вы можете настроить параметр «Окно дублирования», чтобы указать минимальное количество строк для фиксации совпадения.

В каком формате выдаются результаты?

Результаты анализа предоставляются в структурированном формате JSON, который содержит общую сводку по файлу, метрики каждой отдельной функции и список найденных дубликатов.

Документация API

Конечная точка запроса

POST /ru/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

Документация 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]