PhpStorm 2016.x 顶级命名空间中对象的提示行为

PhpStorm 2016.x hinting behavior for objects in the top level namespace

我有一个个人 PHP 框架,我维护并在我所做的大部分工作中使用该框架。目前在主 index.php 文件中,我有以下代码可以从项目的任何地方访问核心应用程序 class:

/**
 * @return App
 */
function app() {
    // Returns the main App class instance.
}

它使用 PHPDoc 进行了正确注释,因此在使用时,任何 @property-read 声明或 App 的其他 public 成员都将在代码提示中可用:

在新版本发布之前,PhpStorm 总是 知道 App 的内容并提供此代码提示。但是,现在代码提示不起作用,除非您与 App(顶级名称空间)位于同一名称空间或明确地 use App 或将所有对 app() 的调用作为 [=20] 的前缀=].

更奇怪的是,尽管代码提示在顶层之外不可用,但快速文档实用程序完全知道 app() returns 和 App 和链接App:

的正确定义

我尝试将 public 标记为 "Sources Root" 并更新我的 composer.json 以将 public 包含在 [=28= 的 autoload/psr4 块中] 没有变化:

"autoload": {
    "psr-4" : {
        "": ["public/", "app/src/"]
    }
}

现阶段我不确定是否:

  1. 这是 PhpStorm 的一个错误,我应该向他们提出。
  2. 这是预期的行为,幸运的是,它以我一直努力实现的方式工作(use App 应该 实际上存在以便检查员了解它是什么)。
  3. 在文件结构、命名空间使用甚至 PhpStorm 设置中有一个简单的方法可以让它像以前一样工作。

看起来该行为已在最近的版本中得到纠正(我刚刚升级到 2016.1.2 Build #PS-154.1616)。