Когнитивная сложность
ID: cognitive_complexity | Степень критичности: Средняя (по умолчанию)
Этот детектор выявляет функции с высокой когнитивной сложностью. Когнитивная сложность измеряет, насколько трудно понять код, а не просто количество путей в нем.
Почему это «запах»
- Высокая ментальная нагрузка: Глубокая вложенность и сложные логические выражения затрудняют понимание кода разработчиками.
- Риски при обслуживании: Код, который трудно понять, более подвержен ошибкам при внесении изменений.
- Скрытые баги: Логические ошибки часто прячутся в глубоко вложенных структурах.
Как она рассчитывается
Когнитивная сложность рассчитывается на основе:
- Структурные приращения:
if,else,switch,for,while,do-while,catch, тернарные операторы и логические последовательности. - Штраф за вложенность: Приращения для структур управления увеличиваются в зависимости от уровня их вложенности.
- Особые случаи:
switchсчитается только один раз для всего блока, независимо от количестваcase.
Как исправить
- Упростите логику: Используйте guard clauses (ранние возвраты), чтобы уменьшить вложенность.
- Выделение метода: Перенесите вложенные блоки или сложные условия в небольшие, сфокусированные функции.
- Упростите выражения: Разбейте сложные логические условия на промежуточные переменные или функции.
- Замените вложенные If: Рассмотрите возможность использования таблицы поиска или паттерна «Стратегия».
Конфигурация
yaml
rules:
cognitive_complexity:
severity: medium
max_complexity: 15Правило ESLint
Этот детектор доступен, как правило, ESLint для получения обратной связи в реальном времени прямо в редакторе.
javascript
// eslint.config.js
export default [
{
rules: {
'@archlinter/no-high-cognitive-complexity': 'warn',
},
},
];