首页 > 解决方案 > PHPStan 忽略错误正则表达式

问题描述

问题

我最近开始使用 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是通过运行Laravel IDE-helperphp artisan ide-helper:models -M 所需的命令添加的,顾名思义,该命令将 IDE 的 docblocks 添加到 Laravel 的typehint魔术方法中。

因此,我尝试使用以下代码通过忽略错误来解决此问题:

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扩展。

标签: phplaravelphpstan

解决方案


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 的分析。


推荐阅读