Complexidade Cognitiva
ID: cognitive_complexity | Gravidade: Média (padrão)
Este detector identifica funções com alta Complexidade Cognitiva. A Complexidade Cognitiva mede o quão difícil é entender o código, em vez de apenas quantos caminhos ele possui.
Por que isso é um problema
- Alta Carga Mental: Lógica profundamente aninhada e expressões booleanas complexas tornam difícil para os desenvolvedores manterem o estado em suas cabeças.
- Risco de Manutenção: Código difícil de entender é propenso a erros durante a modificação.
- Bugs Ocultos: Erros de lógica frequentemente se escondem em estruturas profundamente aninhadas.
Como é calculado
A Complexidade Cognitiva é calculada com base em:
- Incrementos Estruturais:
if,else,switch,for,while,do-while,catch, operadores ternários e sequências lógicas. - Penalidade de Aninhamento: Os incrementos para estruturas de controle aumentam com base em seu nível de aninhamento.
- Casos Especiais:
switchconta apenas uma vez para todo o bloco, independentemente do número de casos.
Como corrigir
- Achatar a Lógica: Use guard clauses (retornos antecipados) para reduzir o aninhamento.
- Extrair Método: Mova blocos aninhados ou condições complexas para funções pequenas e focadas.
- Simplificar Expressões: Divida condições booleanas complexas em variáveis ou funções intermediárias.
- Substituir Ifs Aninhados: Considere usar uma tabela de busca ou o padrão Strategy.
Configuração
yaml
rules:
cognitive_complexity:
severity: medium
max_complexity: 15Regra ESLint
Este detector está disponível como uma regra ESLint para feedback em tempo real no seu editor.
javascript
// eslint.config.js
export default [
{
rules: {
'@archlinter/no-high-cognitive-complexity': 'warn',
},
},
];