咨询:PhpStan与Psalm是否检测圈复杂度及能否按级别自定义规则
PhpStan/Psalm圈复杂度检测与自定义规则指南
一、圈复杂度检测配置
PhpStan和Psalm都支持圈复杂度检测,只是默认启用方式或配置入口不同:
PhpStan
- 先安装包含圈复杂度规则的严格扩展包:
composer require --dev phpstan/phpstan-strict-rules - 在
phpstan.neon配置文件中启用规则并自定义阈值:rules: - PHPStan\Rules\Strict\CyclomaticComplexityRule parameters: strictRules: cyclomaticComplexity: 10 # 设置允许的最大圈复杂度值
Psalm
Psalm内置圈复杂度检测,直接在psalm.xml中配置阈值和错误级别:
<psalm> <issueHandlers> <!-- 类方法的圈复杂度检查 --> <TooManyComplexMethods errorLevel="error"> <minComplexity>10</minComplexity> </TooManyComplexMethods> <!-- 全局函数的圈复杂度检查 --> <TooManyComplexFunctions errorLevel="error"> <minComplexity>10</minComplexity> </TooManyComplexFunctions> </issueHandlers> </psalm>
二、按不同级别自定义规则
两者都支持全局、路径级别的规则定制,以及单个规则的严格度调整:
PhpStan
- 单个规则级别调整:给特定规则指定严格程度(级别范围0-9,数字越高规则越严格):
rules: - rule: PHPStan\Rules\Strict\CyclomaticComplexityRule level: 5 - 路径级规则覆盖:针对不同目录/文件设置差异化规则:
parameters: rulesLevel: 7 # 全局默认严格级别 # 给核心业务目录提升规则严格度 pathsWithIncreasedStrictness: src/Core/: rulesLevel: 9 # 给遗留代码目录禁用圈复杂度检查 pathsWithExcludedRules: src/Legacy/: - PHPStan\Rules\Strict\CyclomaticComplexityRule - 参考资料:PhpStan官方配置文档(核心配置、规则定制章节)
Psalm
- 规则级别与范围定制:给规则设置错误级别,同时指定排除的文件/目录:
<psalm> <issueHandlers> <TooManyComplexMethods errorLevel="warning"> <minComplexity>12</minComplexity> <excludeFiles> <directory name="src/Legacy"/> </excludeFiles> </TooManyComplexMethods> </issueHandlers> </psalm> - 路径级单独配置:针对特定目录单独定义规则:
<psalm> <files> <directory name="src"/> <directory name="src/Legacy"> <issueHandlers> <TooManyComplexMethods errorLevel="suppress"/> </issueHandlers> </directory> </files> </psalm> - 参考资料:Psalm官方配置文档(Issue Handlers、自定义规则章节)
内容的提问来源于stack exchange,提问作者Mali C.
相关产品推荐
相关产品推荐

