tomaskvotruba/cognitive-complexity

PHPStan 规则用于衡量您的类和方法的心理复杂性

0.2.3 2024-01-03 13:13 UTC

This package is auto-updated.

Last update: 2024-09-03 14:53:47 UTC


README


心理复杂性告诉我们,代码对读者来说有多难理解。

心理复杂性是如何衡量的?

function get_words_from_number(int $number): string
{
    $amountInWords = '';

    if ($number === 1) {            // + 1
        $amountInWords = 'one';
    } elseif ($number === 2) {      // + 1
        $amountInWords = 'couple';
    } elseif ($number === 3) {      // + 1
        $amountInWords = 'a few';
    } else {                        // + 1
        $amountInWords = 'a lot';
    }

    return $amountInWords;
}

这个函数使用了嵌套、条件和往返。它很难阅读,导致心理复杂性为4。

如何保持心理复杂性为1?阅读使用 PHPStan 保持心理复杂性低文章以了解。


安装

composer require tomasvotruba/cognitive-complexity --dev

该软件包在标记版本中可在 PHP 7.2-8.1 版本中找到。


使用方法

使用PHPStan 扩展安装程序,一切准备就绪,可以运行。

通过简单的配置分别启用每个项目

# phpstan.neon
parameters:
    cognitive_complexity:
        class: 50
        function: 8

检测复杂的类依赖树

在控制器、Rector 规则、PHPStan 规则或其他特定类型的服务等类中,复杂性可能隐藏在构造函数的依赖关系中。具有10个依赖项的简单类比具有2个依赖项的复杂类更复杂。

这就是为什么有规则来检测这些依赖树。它会检查

  • 当前类的复杂性
  • 构造函数依赖关系及其类复杂性一起

最终数字将进行比较并用作最终复杂性

# phpstan.neon
parameters:
    cognitive_complexity:
        dependency_tree: 150
        dependency_tree_types:
            # only these explicit types are checked, nothing else
            - Rector\Contract\Rector\RectorInterface

编码愉快!