thibaud-dauce/phpstan-blade

PHPStan 扩展,用于分析 Laravel Blade 视图。

0.5.0 2023-02-17 14:28 UTC

This package is auto-updated.

Last update: 2024-09-17 17:59:39 UTC


README

此 PHPStan 扩展用于分析 Blade 视图中的错误。

Result example

安装

使用 Composer 安装扩展。

composer require thibaud-dauce/phpstan-blade

将扩展配置文件添加到您的 phpstan.neon

includes:
    - ./phpstan-baseline.neon
    - ./vendor/nunomaduro/larastan/extension.neon
    - ./vendor/thibaud-dauce/phpstan-blade/extension.neon

parameters:
    

将此 Composer 脚本添加到您的 composer.json

{
    "scripts": {
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate"
        ],
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover"
        ],
        "phpstan": [
            "@php artisan phpstan-blade:touch-cache",
            "./vendor/bin/phpstan analyse --error-format blade"
        ]
    },
}

然后,您可以通过运行 composer phpstan 来更新缓存(如果您想了解更多关于为什么需要它,请参阅 TouchCacheCommand 注释),并使用 Blade 格式化程序运行分析(Blade 格式化程序是必需的,以允许显示视图包含的堆栈跟踪)。

功能

  • 分析 view() 调用
  • 支持 Blade 指令
  • 支持视图命名空间
  • 支持 Livewire 组件
  • 支持 @include,并显示完整的堆栈跟踪,精确显示错误的位置和上下文
  • 支持可邮寄的视图
  • 支持 compact() 函数用于视图参数

局限性

Blade 视图中的 @var docblocks

如果您想在视图中添加 docblocks 以添加类型信息,如

@php
    /** @var string */
    $name = config('app.name');
@endphp

{{ $name }}

您需要在 docblock 内指定变量名称,因为我们也会在行间添加 docblocks,所以您的 docblocks 不会直接位于分配之上。

@php
    /** @var string $name */
    $name = config('app.name');
@endphp

{{ $name }}

常量类型 (:ConstantTypes)

目前,如果您将 true 传递给视图,类型将被泛化为 bool 以避免诸如 "If 条件始终为真。" 的错误。如果所有 view() 调用都传递 true 而条件始终为真,那么有一种方式可以引发错误可能会很好。但我认为这很难实现。

如果您将 ['something' => null] 传递给视图,我将类型转换为 mixed,因此您可能会遇到一些错误。您应该指定空值的类型,这样我就可以提供正确的类型信息。

/** @var ?User */
$user = null;

return view('user', [
    'user' => $user,
]);

开发

扩展代码中有许多注释来解释它正在做什么。主入口点是 ViewFunctionRule 类。