Как я могу объявить, что константа определена в PhpDoc (для intelephense)?
TL;DR
Как я могу задокументировать константу, которая определена во внешнем коде с помощью PhpDoc/DocBlocks, чтобы она не отображалась как неопределенная переменная при статическом анализе кода?
Детали:
Я пытаюсь написать небольшой плагин для WordPress. У меня есть код PHP, как показано ниже.
defined('ABSPATH') or die('Access denied!'); // Avoid direct file request
function getPluginInfo($key) {
require_once ABSPATH . '/wp-admin/includes/plugin.php';
$data = get_plugin_data(MY_PLUGIN_FILE, true, false);
return $data[$key];
}
Я использую плагин VSCode vscode-intelephense (который предоставляет языковую службу PHP). У меня установлены все необходимые зависимости, включая указание wordpress в качестве заглушки в настройках VSCode. В целом, intelephense работает достаточно хорошо и отлично показывает информацию о моем коде, а также код библиотеки WordPress.
Однако intelephense показывает ошибку: "Неопределенная константа '... \ ABSPATH' (1011)" (где точки - это пространство имен, которое я пропустил для краткости).
Таким образом, похоже, что intelephense не улавливает условие, подразумеваемое первой строкой, а именно то, что если ABSPATH
не определен, выполнение не достигнет более позднего кода, который на него ссылается. (Что совершенно нормально, анализ потока программы может потребовать слишком многого). Во всяком случае, я думаю, что я должен быть в состоянии добавить какой - то PHPDoc (или другой комментировал аннотацию), чтобы указать на анализаторы кода, что переменная будет определена. Что-то вроде этого:
/**
* @var string ABSPATH
*/
или это:
/**
* @global string ABSPATH
*/
Но ни один из них не устраняет ошибку. (Я тоже пробовал@const
что не похоже на настоящий тег. Это тоже не сработало.)
Есть ли способ указать в коде, что ABSPATH определен во внешнем коде или вне области? Добавление строки вверху функции, напримерglobal ABSPATH;
тоже не кажется правильным, потому что ABSPATH
не переменная. Этоdefine
-созданная константа.
Спасибо!
1 ответ
Подобно заглушке wordpress, которую вы включили для предоставления wp intellisense, вам нужно будет создать файл-заглушку для ваших констант и добавить его в рабочее пространство, чтобы его можно было проиндексировать.
<?php
const ABSPATH = '';