stickee / larastan-config
stickee的Larastan配置
Requires
- php: ^8.1
- ekino/phpstan-banned-code: ^1.0
- larastan/larastan: ^2.9.6
- phpstan/phpstan-mockery: ^1.1
This package is auto-updated.
Last update: 2024-09-02 12:53:42 UTC
README
为stickee项目提供Larastan配置。
Larastan是PHPStan的Laravel包装器。
它通过使用phpstan
命令运行,因此从现在起将被称为PHPStan。
注意
此版本的配置仅适用于Larastan v2,它是针对Laravel版本9及以上的。
安装
mkdir -p tools/phpstan composer require --working-dir=tools/phpstan stickee/larastan-config cp tools/phpstan/vendor/stickee/larastan-config/dist/phpstan.dist.neon phpstan.dist.neon
您必须提交此新目录和phpstan.dist.neon
配置文件。
使用
tools/phpstan/bin/phpstan analyse -c phpstan.dist.neon
覆盖
您可以通过编辑phpstan.dist.neon
文件来覆盖任何设置。
选项可在https://phpstan.org/config-reference找到。
基线
在将PHPStan添加到项目中并修复所有现有错误之前使用它会很痛苦。为此,您可以使用此命令生成“基线”
tools/phpstan/vendor/bin/phpstan analyse -c phpstan.dist.neon --generate-baseline
并提交新的phpstan-baseline.neon
文件。
这意味着PHPStan将忽略此文件中的任何错误,这样您就可以使用PHPStan检查您添加的任何新代码中的错误。
如果您有空闲时间,您可以参考此文件以修复代码,并在之后使用相同的命令重新生成基线。
预提交钩子
您可以使用PHPStan与Husky一起在预提交阶段运行。
安装
- 将Husky安装到您的项目中
cp tools/php-cs-fixer/vendor/stickee/php-cs-fixer-config/dist/.husky/pre-commit .husky/pre-commit
CI
在/dist/.github/workflows/phpstan.yaml
中包含了一个GitHub actions工作流程的示例。
它将PHPStan作为“检查”与PR一起运行,并输出它发现的任何错误。
操作首先检查是否有任何PHP文件已更改,以及是否需要运行。这是因为PHPStan必须一次性分析所有应用程序代码,因此需要一些时间,所以如果可以跳过它,那是很好的。
操作引用了位于/dist/.github/workflows/phpstan.ci.neon
的CI配置(您可以将其复制到项目的根目录),它包括原始配置,并忽略不匹配的忽略错误,以保持检查不受这些错误的影响。
运行PHPStan时出现的问题
以下是在使用PHPStan和Larastan时可能遇到的某些容易解决的问题
访问未定义属性
例如,错误“访问未定义属性 Illuminate\Database\Eloquent\Model::$subscriber_id”表示PHPStan没有正确理解它读取的变量的类。
如果您在变量上悬停,您的编辑器可能也无法理解它是什么。
在此示例中,您必须提供内联类型提示
+ /** @var Customer $customer */
$customer = $request->user();
$customerService = CustomerService::make($customer->subscriber_id);
包冲突
PHPStan期望安装到项目的根目录而不是子目录,就像我们在这里做的那样。
虽然这意味着应该有更少的包冲突机会,但如果发生冲突,诊断可能会更困难。
例如,如果您收到此错误
PHP Fatal error: Declaration of Maatwebsite\Excel\Cache\MemoryCache::get($key, $default = null) must be compatible with Psr\SimpleCache\CacheInterface::get(string $key, mixed $default = null): mixed in /home/paul/projects/asda/vendor/maatwebsite/excel/src/Cache/MemoryCache.php on line 62
Symfony\Component\ErrorHandler\Error\FatalError
Declaration of Maatwebsite\Excel\Cache\MemoryCache::get($key, $default = null) must be compatible with Psr\SimpleCache\CacheInterface::get(string $key, mixed $default = null): mixed
at vendor/maatwebsite/excel/src/Cache/MemoryCache.php:62
58▕
59▕ /**
60▕ * {@inheritdoc}
61▕ */
➜ 62▕ public function get($key, $default = null)
63▕ {
64▕ if ($this->has($key)) {
65▕ return $this->cache[$key];
66▕ }
然后您可以通过强制将 psr/simple-cache
更新到版本 2 来修复它,具体操作请参考 这里。
但是 您需要在 tools/phpstan/composer.json
文件中而不是项目根目录的 composer 文件中进行此操作。
{ "require": { "psr/simple-cache": "^2.0", "stickee/larastan-config": "^1.0" } }