stickee/larastan-config

stickee的Larastan配置

v2.3.0 2024-08-02 12:29 UTC

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配置文件。

为什么我们要将PHPStan安装到自己的目录中?

使用

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"
    }
}