Как я могу объявить, что константа определена в 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 = '';

Другие вопросы по тегам