我有一个在 CakePHP 4.4.4 上运行的 Web 应用程序
我最近开始使用 PHPStan,代码库运行在 level 1。这个级别是在我们的配置文件中指定的,
phpstan.neon
使用生成基线
后vendor/bin/phpstan analyse --configuration phpstan.neon src/ tests/ --generate-baseline
这给
phpstan-baseline.neon
添加了大约 80 个错误。有一条消息说某些错误无法建立基线,建议重新运行 PHPStan。
运行
vendor/bin/phpstan analyse src/ --memory-limit=1G
时,它报告了有关 CakePHP 类的 6 个错误,该类在 src/Command/
内的几个不同文件中使用。其中一个例子是:
类
扩展了未知类App\Command\AlertsCommand
。Cake\Console\Command
如果我打开它所指的文件,
src/Command/AlertsCommand.php
,我们有这个:
<?php
namespace App\Command;
use Cake\Console\Command;
class AlertsCommand extends Command
{
public function initialize(): void
{
parent::initialize();
// ...
}
// Other functions for this command defined here onwards
}
VSCode 红色下划线“命令”(如
extends Command
)和工具提示显示
未定义类型'Cake\Console\Command'
在此处参考 CakePHP 4 文档时 https://book.cakephp.org/4/en/console-commands/commands.html 我注意到它有
use Cake\Command\Command;
而不是 use Cake\Console\Command;
。我更新了这个并重新运行 PHPStan。
错误数量从 6 个增加到 7 个,并有一条专门关于此更改的消息,其中表示:
忽略错误模式#^App\Command\AlertsCommand::initialize() 调用parent::initialize() 但App\Command\AlertsCommand 不扩展任何类。路径 src/Command/AlertsCommand.php 中的$# 不匹配报告错误。
这没有任何意义。它说 - 引用 - “AlertsCommand 不会扩展任何类”,但显然它会扩展:
class AlertsCommand **extends Command**
应用程序本身可以工作,因此在进行
use
修改之前,原始代码都不会停止任何工作。
对此的建议将不胜感激。
PHPStan告诉你:
忽略的错误模式...与报告的错误不匹配。
这意味着您忽略了不再发生的事情。您可以从配置/基线中删除这个被忽略的错误。
您还可以设置
reportUnmatchedIgnoredErrors: false
,这不会被报告。请参阅文档:https://phpstan.org/user-guide/ignoring-errors#reporting-unused-ignores