2017-02-08 34 views
1

Я работаю с пользовательской фреймворк PHP и хотел бы сгенерировать для него файл .phpstorm.meta.php.Синтаксис метафайла PhpStorm для статических методов с несколькими аргументами

Методы фабричные У меня есть имеют следующий синтаксис:

<?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, но они, похоже, не очень углублены.

ответ

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