Синтаксис метафайла PhpStorm для статических методов с несколькими аргументами

Я работаю с пользовательской инфраструктурой 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, но они не кажутся очень глубокими.


person Benjam    schedule 08.02.2017    source источник


Ответы (1)


Что ж, как автор упомянутого .phpstorm.meta.php, я могу быстро дать вам окончательный ответ.

Начиная с версии 2016.3, PhpStorm соответствует только ПЕРВОМУ значению аргумента, и это жестко запрограммировано.

Видите ли, вся эта функциональность развилась из очень конкретного запроса на функцию и постоянно совершенствуется, но сама эта часть по-прежнему работает только так, как я описал.

Есть немного связанный запрос 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

person Alexey Gopachenko    schedule 10.02.2017