【问题标题】:PHPStan ignore errors regexPHPStan 忽略错误正则表达式
【发布时间】:2021-09-16 08:09:38
【问题描述】:

问题

我最近开始使用 PHPStan 来分析我的 Laravel 项目的代码,但我的所有 models 一直收到以下错误:

 ------ --------------------------------------------------------------------
  Line   Models/Fund.php
 ------ --------------------------------------------------------------------
  14     PHPDoc tag @mixin contains unknown class App\Models\IdeHelperFund.
         ???? Learn more at https://phpstan.org/user-guide/discovering-symbols
 ------ --------------------------------------------------------------------

代码

这是触发错误的代码:

<?php

namespace App\Models;

/**
 * Class Fund
 *
 * @package App\Models
 * @mixin IdeHelperFund
 */
class Fund extends Model
{
    //...
}

这个mixin是通过运行php artisan ide-helper:models -M命令添加的 这是 Laravel IDE-helper 包所必需的,顾名思义,它为 IDE 添加了 docblocks 以输入 Laravel 的魔法方法。

所以我尝试使用以下代码通过Ignore errors 解决这个问题:

includes:
    - ./vendor/nunomaduro/larastan/extension.neon

parameters:

    paths:
        - app

    # The level 8 is the highest level
    level: 5

    ignoreErrors:
        -
            message: '#PHPDoc tag @mixin contains unknown class App\\Models\\IdeHelper(.*)+\.#'
            path: Models/*

    excludePaths:

    checkMissingIterableValueType: false

但是在 Regexr 测试正则表达式时,错误不匹配。

任何建议我做错了什么?我在忽略错误文档中注意到他们在正则表达式的开头和结尾添加了#,所以我已将其添加到我的 phpstan 配置中,但我不确定这是否是必需的,但没有它们我得到以下错误(所以我把它们留在里面):

 -- ------------------------------------------------------------------------------------------------------------------------------------
     Error
 -- ------------------------------------------------------------------------------------------------------------------------------------
     Delimiter must not be alphanumeric or backslash in pattern: PHPDoc tag @mixin contains unknown class App\\Models\\IdeHelper(.*)+\.
 -- ------------------------------------------------------------------------------------------------------------------------------------

附加信息

我正在使用默认的larastan 版本0.7.12 扩展。

【问题讨论】:

    标签: php laravel phpstan


    【解决方案1】:

    PHPStan 就在这里。 IdeHelperFund 类不在 App\Models 命名空间中。

    你需要让 PHPStan 知道文件在哪里。您可以通过扫描额外的文件来做到这一点。在这里阅读:https://phpstan.org/user-guide/discovering-symbols#third-party-code-outside-of-composer-dependencies

    作为 Larastan 的维护者,我建议您将所有 ide-helper 内容写入文件。像_ide_helper.php_ide_helper_models.php.phpstorm.meta.php 这样的 ide-helper 的 mixin 标签会干扰 PHPStan 的分析。

    【讨论】:

    • 所以我应该将它们添加到各种文件中,然后从类中删除@mixin?
    • 您无需手动添加任何内容。你可以运行php artisan ide-helper:models -N,它会创建一个文件来帮助你自动完成。
    • php artisan ide-helper:models -N 的问题并将其添加到我的 php stan 配置中,它会报告如下错误:Providers/TelescopeServiceProvider.php Reflection error: Eloquent not found. 因此需要包含_ide_helper.php,这会引发很多相关的错误到Illuminate\Http\Request 喜欢$request-&gt;input('...') 和许多其他人喜欢$request-&gt;user()-&gt;can('...')
    • 到目前为止,唯一好的结果是当我通过 php artisan ide-helper:models -W 直接在模型中编写 ide 助手时,但这会给我的模型开头增加很多臃肿,这在我们的模型中也不是首选意见。
    • 您不需要将生成的文件添加到 PHPStan 配置中。生成的文件仅用于 IDE 自动完成。 PHPStan/Larastan 已经足够聪明,可以分析你的代码了。
    【解决方案2】:

    为了获得良好的正则表达式,您可以生成带有标志--generate-baseline 的基线文件 将生成一个带有实际错误的文件。

    您可以复制图案并将其添加到您的霓虹灯配置中。

    在再次运行phpstan之前不要忘记删除基线文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-13
      • 2020-08-06
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多