Skip to content

Цикломатическая сложность (Cyclomatic Complexity) ​

ID: cyclomatic_complexity | Степень критичности: Средняя (по умолчанию)

Этот детектор находит функции с высокой цикломатической сложностью.

Почему это «запах» ​

  • Трудность понимания: Слишком много путей ветвления делают код сложным для восприятия.
  • Склонность к ошибкам: Выше вероятность упустить граничные случаи при тестировании.
  • Кошмар поддержки: Небольшие изменения могут иметь непредсказуемые последствия из-за сложной логики.

Как исправить ​

  1. Extract Method: Разбейте сложную логику на более мелкие именованные функции.
  2. Guard Clauses: Используйте ранние возвраты (early returns), чтобы уменьшить уровень вложенности.
  3. Replace Conditional with Polymorphism: Используйте объекты или стратегии вместо огромных блоков switch или if/else.

Конфигурация ​

yaml
rules:
  cyclomatic_complexity:
    severity: medium
    max_complexity: 15

ESLint правило ​

Этот детектор доступен как правило ESLint для получения обратной связи в реальном времени.

javascript
// eslint.config.js
export default [
  {
    rules: {
      '@archlinter/no-high-cyclomatic-complexity': 'warn',
    },
  },
];

Смотрите Интеграция с ESLint для инструкций по настройке.

Параметры по умолчанию ​

  • function_threshold: 10 - максимальная цикломатическая сложность функции
  • file_threshold: 50 - максимальная цикломатическая сложность файла

Released under the MIT License.