leovie / clover-crap-check
Requires
- php: >=8.1
- symfony/console: ^6.2
- symfony/css-selector: ^6.2
- symfony/dom-crawler: ^6.2
- symfony/filesystem: ^6.2
- thecodingmachine/safe: ^2.4
Requires (Dev)
- ergebnis/composer-normalize: ^2.30
- infection/infection: ^0.26.19
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
- psalm/plugin-phpunit: ^0.18.4
- rregeer/phpunit-coverage-check: ^0.3.1
- symfony/var-dumper: ^6.2
- vimeo/psalm: ^5.7
README
此工具读取phpunit生成的clover.xml报告,并检查所有文件是否有一个CRAP索引低于指定的阈值。
安装
PHAR(推荐)
您可以从https://github.com/LeoVie/clover-crap-check/releases/latest下载最新的PHAR。
Composer
作为开发依赖项通过composer安装
composer require --dev leovie/clover-crap-check
使用
此工具有两个必需的参数
- clover.xml文件的路由,由phpunit生成。路径可以是绝对路径或相对于当前工作目录的相对路径。
- 可接受的CRAP索引阈值(最小
1
)
使用phpunit生成clover.xml文件,然后运行clover-crap-check
vendor/bin/phpunit --coverage-clover clover.xml vendor/bin/clover-crap-check clover.xml 50
这将生成如下所示的输出
[ERROR] The following methods are crappier than allowed
------------ -------- ------
Class method CRAP
------------ -------- ------
ClassA m1 100
Foo\ClassB m2 60
------------ -------- ------
基线功能
当与遗留代码一起使用clover-crap-check
时,可能您不想将所有文件重构成低CRAP索引。同时,您希望新代码尽可能少地包含CRAP。
要使用clover-crap检查实现这一点,有一个基线功能。
1. 生成基线
除了必需的参数外,请通过选项--generate-baseline
传递一个路径,指定基线文件应该存储的位置。路径可以是绝对路径或相对于当前工作目录的相对路径。
vendor/bin/clover-crap-check clover.xml 50 \ --generate-baseline=baseline.json
这将运行clover-crap-check
并生成一个基线文件,其中包含所有CRAP索引超过定义阈值(本例中为50)的文件。
基线文件如下所示
[ { "classFQN": "ClassA", "name": "m1", "crap": 100 }, { "classFQN": "Foo\\ClassB", "name": "m2", "crap": 60 } ]
2. 使用基线
生成基线后,您可以在下一次运行中使用它。为此,只需通过选项--baseline
将基线文件的路径传递给工具。路径可以是绝对路径或相对于当前工作目录的相对路径。
vendor/bin/clover-crap-check clover.xml 50 \ --baseline=baseline.json
在这种情况下,clover-crap-check
不应报告任何内容。
现在,当您添加CRAP索引超过定义阈值(本例中为50)的新文件时,您将收到通知。同样,当基线文件中的文件比生成基线时的CRAP索引更高时,也会发生这种情况。
这将生成如下所示的输出
[ERROR] The baseline is not up to date
[ERROR] The following methods are newly occurring
-------- -------- ------
Class method CRAP
-------- -------- ------
ClassC m3 70
-------- -------- ------
[ERROR] The following methods got crappier
-------- -------- ------
Class method CRAP
-------- -------- ------
ClassA m1 65
-------- -------- ------
3. 保持基线更新
您可以选择一次性生成基线,然后不再修改它。这非常有用,当基线中有非常多的文件,并且您不想在一段时间内担心改进遗留代码时。
但是,您也可以选择在文件变得更少CRAP时得到通知。为此,您可以向clover-crap-check
传递选项--report-less-crappy-methods
vendor/bin/clover-crap-check clover.xml 50 \ --baseline=baseline.json \ --report-less-crappy-methods
这将为您提供提示,例如,当基线生成时CRAP索引为100的文件现在CRAP索引为60时。
[ERROR] The baseline is not up to date
[INFO] The following methods got less crappy
-------- -------- ------
Class method CRAP
-------- -------- ------
ClassA m1 60
-------- -------- ------
然后您可以手动更新基线文件中的CRAP值(本例中为60)。
还有一个选项--report-vanished-methods
。当启用时,clover-crap-check
将通知您基线中不再出现的方法或CRAP索引现在低于您的阈值的方法。
[ERROR] The baseline is not up to date
[INFO] The following methods vanished
-------- -------- ------
Class method CRAP
-------- -------- ------
ClassA m1 100
-------- -------- ------