提问人:beeftony 提问时间:11/15/2023 最后编辑:beeftony 更新时间:11/20/2023 访问量:33
在 PhpStorm 中从 JSON 文件自定义建议/完成 PHP 函数
Custom suggestions/completion in PHP function from JSON file in PhpStorm
问:
我有一个函数,我希望 PhpStorm 在我开始在引号之间键入时开始从 JSON 文件中建议值。translate("")
这个想法是,我有一个带有翻译字符串的 JSON 文件,当我开始输入时,它应该根据我已经输入的字符建议该 json 文件中已经包含的翻译。
经过一些研究,我认为这目前在 PhpStorm 中是不可能的,但也许这里有人有一个想法或替代方案。
谢谢!
答:
1赞
beeftony
11/20/2023
#1
我使用 PhpStorm 高级元数据使它工作。
我在项目根目录中创建了一个文件,这将为方法的第一个 () 参数添加自动完成/建议:.phpstorm.meta.php
0
translate
<?php
namespace PHPSTORM_META {
expectedArguments(
\App\Helper\TranslationHelper::translate(),
0,
/* Generated */
"Auto completion result",
"This is also a suggested result",
"Give me more suggestions PhpStorm",
/* Generated */
);
}
然后写了一个 Symfony 命令,从我的翻译文件中获取字符串并将它们包含在两个注释之间:/* Generated */
$translations = json_decode(file_get_contents($this->parameterBag->get('app.project.path') . '/resources/translations/de.json'), true);
$metadataPath = $this->parameterBag->get('app.project.path') . '/.phpstorm.meta.php';
$identifier = "/* Generated */";
$regexIdentifier = $this->escape($identifier);
$regex = "/$regexIdentifier(.*?)$regexIdentifier/s";
// Build the arguments string that will be written into the metadata file
$translationsAsArguments = "$identifier\n";
foreach ($translations as $translation) {
$translationsAsArguments .= "\t\t\"$translation\",\n";
}
$translationsAsArguments .= "\t\t$identifier";
// Write to disk
$translationsMetadata = preg_replace($regex, $translationsAsArguments, file_get_contents($metadataPath));
file_put_contents($metadataPath, $translationsMetadata);
该解决方案是使用 Symfony 6.3 用 PHP 编写的
评论
translate()