Phan静态分析报未声明JetBrains PhpStorm注解类如何解决?
问题复现
- 开发场景使用PhpStorm 2020.3 EAP 4版本的内置注解语法
- 业务代码中使用注解的示例片段:
use JetBrains\PhpStorm\NoReturn; #[NoReturn] public function __construct() {}
- 执行Phan静态分析时输出报错:
PhanUndeclaredClassAttribute Reference to undeclared class \JetBrains\PhpStorm\NoReturn in an attribute
核心疑问
- 如何修复上述Phan静态分析报错
- 是否需要安装JetBrains官方提供的对应依赖,才能让这类内置注解被代码库的静态分析工具正常识别
修复方案
这类注解本身不属于PHP原生内置语法,是JetBrains为IDE代码提示、静态校验自定义的存根类,默认不会被第三方静态分析工具识别,有两种可选修复方式:
- 安装官方存根依赖(推荐方案)
通过Composer安装JetBrains官方提供的PHP存根库,执行命令:composer require --dev jetbrains/phpstorm-stubs
安装后所有PhpStorm内置的注解类(包括本次用到的NoReturn)都会被预定义在依赖中,Phan、PHPStan等静态分析工具会自动识别类声明,报错会直接消失。该依赖仅作为开发环境校验使用,不会被打包到生产运行环境,不会影响业务代码执行逻辑。 - 手动声明注解类(轻量替代方案)
如果不想引入额外依赖,可在项目中手动定义当前用到的注解类,示例代码:
该方案需要自行维护所有用到的JetBrains注解类声明,适合仅使用少量内置注解、不想引入额外依赖的场景。namespace JetBrains\PhpStorm; #[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_FUNCTION)] class NoReturn {}
内容的提问来源于stack exchange,提问作者grubolsch
相关产品推荐
相关产品推荐

