我正在使用ALE进行 PHP 开发。有可能phpstan
用作 linter 之一,但无论我做什么,都会有phpstan
无法加载类/方法定义的通知:
Function foo not found while trying to analyse it - autoloading is probably not configured properly.
不幸的是,默认配置ALE
没有帮助,因为它希望phpstan
在 中$PATH
,即使它在那里,它仍然抱怨缺少自动加载。
我正在使用ALE进行 PHP 开发。有可能phpstan
用作 linter 之一,但无论我做什么,都会有phpstan
无法加载类/方法定义的通知:
Function foo not found while trying to analyse it - autoloading is probably not configured properly.
不幸的是,默认配置ALE
没有帮助,因为它希望phpstan
在 中$PATH
,即使它在那里,它仍然抱怨缺少自动加载。
这个解决方案是具体的git
。composer
没有任何 vcs 或composer
.
所以首先我们假设composer
项目中正在使用,所以有autoload.php
文件生成。如果您不使用此功能,您可能应该这样做,因为它将类映射到文件并使自动加载变得简单。
不幸的是,使用全局phpstan
二进制是徒劳的。这是因为phpstan
在当前目录中查找 autoload 或 neon 配置文件,告诉它在哪里查找类定义。因此,如果您不想被迫从根项目目录打开项目中的每个文件,那么应该有另一种解决方案。
使用在您的项目中phpstan
安装的二进制文件composer
(in vendor/bin/phpstan
) 解决了这个问题。本地二进制文件使用相同autoload.php
并正确找到每个类定义。所以我们需要告诉 alephpstan
二进制文件在哪里。
插入vimrc
文件(或更好.vim/ftplugin/php.vim
)以下行:
let g:ale_php_phpstan_executable = system('if ! type git &> /dev/null; then echo phpstan; else PSE=`git rev-parse --show-toplevel 2> /dev/null`/vendor/bin/phpstan; if [ -x "$PSE" ]; then echo -n $PSE; else echo phpstan; fi; fi')
它告诉 ALEphpstan
可执行文件的路径,该路径由运行 shell 命令确定。
if ! type git
部分检查系统中是否有git
命令。如果不是,则默认phpstan
文本将返回给变量。
git rev-parse --show-toplevel
试图找出我们是否在git
存储库中以及它的顶级目录是什么。如果找到正确,它会phpstan
通过添加/vendor/bin/phpstan
到顶级目录来确定路径。这是本地安装的位置phpstan
。如果没有这样的文件或它不可执行,则phpstan
返回默认变量值。