介绍
在最近的PHP系统开发中,感觉故事在理所当然包含静态分析工具的前提下进行。
我的周围现有代码很脏,我很久以前安装了工具,但几乎没有检查已经观察到许多这样的案例。 (这是小说。
而不是像 0 或 100 这样不允许单行错误的静态分析,一点一点,逐渐我想介绍静态分析。
我找到了一个解决这种想法的神器。
从这里开始,我将介绍 PHP Insights,同时将其与 PHPStan 等其他工具进行比较。
如何使用
环境信息
这一次,我们将假设使用 Laravel 进行开发。
$ php -v
PHP 8.1.12 (cli) (built: Oct 28 2022 18:32:20) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.12, Copyright (c) Zend Technologies
$ php artisan -V
Laravel Framework 9.37.0
安装程序
这次我运行了以下命令:
$ composer require nunomaduro/phpinsights --dev
$ php artisan vendor:publish
$ provider="NunoMaduroPhpInsightsApplicationAdaptersLaravelInsightsServiceProvider"
PHPStan 的优点
易于引入,因为代码质量是通过分数来衡量的
用于常规静态分析
尝试运行 PHPStan 进行比较。
root@53c6b058d528:/workspace# vendor/bin/phpstan analyze ./app --level=2
23/23 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
------ -------------------------------------------------------------------------------------------------------------
Line Http/Controllers/GenerateQuestionAction.php
------ -------------------------------------------------------------------------------------------------------------
29 PHPDoc tag @return with type IlluminateHttpResponse is incompatible with native type AppModelsQuestion.
------ -------------------------------------------------------------------------------------------------------------
------ ------------------------------------------------------------------------------------------------------------------
Line Http/Middleware/Authenticate.php
------ ------------------------------------------------------------------------------------------------------------------
17 Method AppHttpMiddlewareAuthenticate::redirectTo() should return string|null but return statement is missing.
------ ------------------------------------------------------------------------------------------------------------------
[ERROR] Found 2 errors
这样,它检测到错误代码,但是当检测到错误时,返回错误代码并且CI下降。
因此,试图对一个巨大的遗留项目实施静态分析会导致大量错误和大量代码需要修复才能通过 CI。
是因为在遗留项目中,在开发过程中引入静态分析的成本往往很高。
对于 PHP 见解
当我运行 PHP Insights分数格式衡量代码质量。
另外,除非用--min=quality
等设置分数的下限,否则即使分数低也认为命令已正常完成。
违反了规则即使存在大量错误,也易于在 CI 中部署这是可以想象的。
当然,违反规则的代码很可能会导致错误和可读性差,因此需要在未来进行修复。
另外,如果将介绍时计算的分数设置为前面提到的--min=quality
选项等作为下限,使用 CI 确保代码质量不会从引入时下降也能
使用一种工具可以从各种角度分析代码
常规案例
代码质量衡量的观点有很多种,比如风格、循环复杂度、容易出bug的写作风格等等,但是如果你尝试一一分析,PHP 斯坦,PhpMetrics,PHP CS 修复程序,通常需要使用多种工具。
此外,在初次导入时,写入每个设置文件将花费一定的费用。
对于 PHP 见解
PHP Insights 可以一次性分析圈复杂度、风格和容易出错的写作风格。
此外,设置被合并到一个文件中,因此如果您只是安装它,调整的地方很少,因此很容易立即将其合并到 CI 中。
如果您想尝试更严格的设置,请将insights.php
的remove
参数中设置的规则注释掉。
'remove' => [
AlphabeticallySortedUsesSniff::class,
DeclareStrictTypesSniff::class,
...
如果您想进一步自定义设置,请参考官方文档的说明。
概括
到目前为止,我已经讨论了如何使用 PHP Insights 并从中受益。
当然,PHP Insights 也有其弱点,对于“我想快速适应更严格的规则集”等用例,我认为最好单独引入 PHPStan 之类的工具。
因此,在引入静态分析时,请根据您要解决的问题和项目的特点选择最合适的工具,并考虑将 PHP Insights 作为选项之一。
就这样。
宣传
本文是结合以下事件编写的:
请喜欢
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308632572.html