如何在 PHPDoc 中声明常量已定义(用于 intelephense)?

4

简述

如何使用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 语言服务)。我已经安装了所有必要的依赖项,包括在 VSCode 设置中将 "wordpress" 列为存根。总的来说,Intelephense 工作得非常好,并且在显示有关我的代码以及 WordPress 库代码的信息方面做得非常好。
然而,Intelephense 显示一个错误:"Undefined constant '...\ABSPATH' (1011)"(其中点是我为简洁起见省略的命名空间)。
因此,看起来 Intelephense 没有注意到第一行所暗示的条件 - 即如果未定义 `ABSPATH`,则不会执行后面引用它的代码。 (这完全可以接受,程序流分析可能要求太高)。无论如何,我认为我应该能够添加某种类型的 PhpDoc(或另一种被注释的注释)来指示代码分析器变量被定义。像这样:
/**
 * @var string ABSPATH
 */

或者这样:
/**
 * @global string ABSPATH
 */

但是这些方法都不能消除错误。(我还尝试了@const,但似乎它不是一个真正的标签。它也没有起作用。)
在代码中是否有一种方式可以表明 ABSPATH 是在外部代码或外部范围中定义的?在函数顶部添加像 global ABSPATH; 这样的行似乎也不正确,因为 ABSPATH 不是一个变量,而是通过 define 创建的常量。
谢谢!
1个回答

2

类似于你启用的WordPress存根以提供wp智能感知,您需要为您的常量创建一个存根文件并将其添加到工作区,以便进行索引。

<?php

const ABSPATH = '';


1
谢谢。我还要提醒其他有兴趣的人,本地文件夹路径可以添加到存根列表中,因此这个自定义存根文件不需要放置在实际的工作区代码中。例如,请参见此处的问题 - drwatsoncode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接