Как я могу объявить, что константа определена в PhpDo c (для целого числа)? - PullRequest
2 голосов
/ 10 января 2020

TL; DR

Как документировать константу, определенную во внешнем коде, с использованием PhpDoc / DocBlocks, чтобы она не отображалась как неопределенная переменная при анализе кода stati c?

Подробности:

Я пытаюсь написать небольшой плагин для 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 выдает ошибку: "Undefined constant" ... \ ABSPATH '(1011) " (где точки - это пространство имен, которое я для краткости опускаю).

Похоже, что intelephense не принимает условие, подразумеваемое первой строкой - а именно: если ABSPATH не определено, выполнение не достигнет более позднего кода, который ссылается на него. (Что совершенно нормально, анализ программного потока может потребовать слишком много). В любом случае, я думаю, что я должен иметь возможность добавить какой-нибудь PhpDo c (или другую закомментированную аннотацию), чтобы указать анализаторам кода, что переменная определена . Примерно так:

/**
 * @var string ABSPATH
 */

или вот так:

/**
 * @global string ABSPATH
 */

Но ни один из них не вызывает ошибку на go. (Я также попробовал @const, который не является реальным тегом. Он тоже не работал.)

Есть ли какой-то способ в коде, который я могу указать, что ABSPATH определен во внешнем коде или в выходной области? Добавление строки в верхней части функции, такой как global ABSPATH;, также кажется неправильным, потому что ABSPATH не является переменной. Это define -созданная константа.

Спасибо!

1 Ответ

2 голосов
/ 11 января 2020

Подобно заглушке WordPress, которую вы включили, чтобы дать вам wp intellisense, вам придется создать файл заглушки для ваших констант и добавить его в рабочее пространство, чтобы его можно было проиндексировать.

<?php

const ABSPATH = '';

...