我正在使用自定义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,但它们似乎并不是非常深入。
答案 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