具有多个参数的静态方法的PhpStorm元文件语法

时间:2017-02-08 03:35:30

标签: phpstorm metadata factory type-hinting

我正在使用自定义PHP框架,并希望为其生成.phpstorm.meta.php文件。

我的工厂方法具有以下语法:

<?php

// Models
$project = Loader::model('Transform', 'Project'); 
    // returns instance of \Framework\Base\Model
$user = Loader::model('Base', 'User'); 
    // returns instance of \Framework\Base\Model
$asset = Loader::model('Transform', 'Asset'); 
    // returns instance of \Framework\Hunk\Transform\Model\Asset

// Helpers
$router = Loader::service('Router', 'Router'); 
    // returns instance of \Framework\Hunk\Router\Service\Router
$helper = Loader::service('Transform', 'Helper');
    // returns instance of \Framework\Hunk\Transform\Service\Helper

到目前为止我没有运气的尝试:

<?php
namespace PHPSTORM_META {
    /** @noinspection PhpUnusedLocalVariableInspection */
    /** @noinspection PhpIllegalArrayKeyTypeInspection */
    /** @noinspection PhpLanguageLevelInspection */
    $STATIC_METHOD_TYPES = [
        \Framework\Loader::model('Transform', '') => [
            '' = '@',
            'Product' instanceof \Framework\Base\Model,
            'Asset' instanceof \Framework\Hunk\Transform\Model\Asset,
            'Step' instanceof \Framework\Base\Model,
            'Stage' instanceof \Framework\Base\Model,
        ],
        \Framework\Loader::model('Hansel', '') => [
            '' = '@',
            'User' instanceof \Framework\Base\Model,
        ],
        \Framework\Loader::service('Transform', '') => [
            '' = '@',
            'Helper' instanceof \Framework\Hunk\Transform\Service\Helper,
        ],
        \Framework\Loader::service('Router', '') => [
            '' = '@',
            'Router' instanceof \Framework\Hunk\Router\Service\Router,
        ],
    ];

}

如何让PhpStorm识别元文件中工厂的多个参数,以便它可以正确地进行自动完成和声明查找?

我查看了phpstorm meta docs,但它们似乎并不是非常深入。

1 个答案:

答案 0 :(得分:2)

好吧,作为一个说.phpstorm.meta.php的作者,我可以快速给你一个明确的答案。

截至2016.3,PhpStorm只匹配FIRST参数值,这是硬编码的。

你知道,整个功能已经从非常特殊的功能请求演变而且不断得到增强,但这部分仍然只能按照我的描述进行。

有一个稍微相关的请求https://youtrack.jetbrains.com/issue/WI-27832

随意https://youtrack.jetbrains.com/issues/WI,我们可以讨论可能的方法。

此外,您现在使用的语法已过时,请参阅https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata - sample.meta.php