2.8. 存根文件

未匹配的标注

存根文件

PHPStan 在分析和使用代码时依赖 PHPDocs 。你可能在 vendor/ 目录遇到一个不准确的 PHPDoc,从而在你的项目里引发一个误报。

为了减少这种情况,你可以用正确的 PHPDoc 语法编写一个存根文件。就像源码一样,但是 PHPStan 只从中读取 PHPDocs。 因此命名空间(namespace) 和 class/interface/trait/method/function 的名字必须匹配你描述的源码。但是方法(method)体可以为空,PHPStan 只对 PHPDocs 感兴趣。可以参考 PHPStan 的存根文件 或者 phpstan-doctrine 拓展的存根文件.

存根文件不能代替 定位符号 因此如果你想修复 “Function not found” 或 “Class not found” 这种报错,可以看看 定位符号 手册。

关于存根文件的分析

存根文件不需要被被添加到分析路径。它们被你选的规则级别独立分析,这套规则主要评估 PHPDoc 的良好格式性。

存根文件中的报错也不能被忽略,所有的报错都必须解决。

存根文件需要被添加在 配置文件stubFiles 键:

parameters:
    stubFiles:
        - stubs/Foo.stub
        - stubs/Bar.stub

它支持任何你喜欢的文件拓展名,但是为了不困扰你的 IDE,建议使用 .stub 而不是 .php

stubFiles 键指定的相对路径会基于配置文件所在位置解析。

为什么 PHPStan 会在存根文件报 “Class not found”

存根文件的分析独立于你代码库的其他部分。这意味着它们引用的任何类型也必须作为存根存在,即使您不想覆盖它的任何 PHPDocs。

这是解决可选依赖性问题的一种方式。我们想要报告存根文件的任何未定义名字以防止拼写错误,但同时我们需要支持 PHPStan 拓展的可选依赖。这就是所有的符号必须在存根中再次定义的原因,哪怕是一个 空壳

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~