我正在使用ALE开发我的PHP。有可能使用phpstan作为linters之一,但无论我做什么,都会通知phpstan不能加载类/方法定义:
Function foo not found while trying to analyse it - autoloading is probably not configured properly.不幸的是,ALE的默认配置无济于事,因为它希望phpstan在$PATH中,即使它在那里,它仍然会抱怨缺少自动加载。
发布于 2018-11-16 04:31:04
此解决方案是特定于git和composer的。
我没有找到好的解决方案,没有任何vcs或composer。
因此,首先我们假设项目中使用了composer,因此生成了autoload.php文件。如果您不使用此功能,您可能应该使用它,因为它将类映射到文件,并使自动加载变得简单。
不幸的是,使用全局phpstan二进制是徒劳的。这是因为phpstan会在当前目录中查找自动加载或霓虹灯配置文件,这些配置文件会告诉它在哪里查找类定义。因此,如果您不想被强制从根项目的目录中打开项目中的每个文件,那么应该有另一个解决方案。
在您的项目中(在vendor/bin/phpstan中)使用composer安装的phpstan二进制文件可以解决此问题。本地二进制文件使用相同的autoload.php并正确地找到每个类定义。所以我们需要告诉ale phpstan二进制文件在哪里。
在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')它告诉ALE到phpstan可执行文件的路径,这是由运行shell命令确定的。
if ! type git部件检查系统中是否有git命令。如果不是,则将默认phpstan文本返回到变量。
git rev-parse --show-toplevel正在尝试找出我们是否在git存储库中,以及它的顶级目录是什么。如果找到正确的路径,它会通过将/vendor/bin/phpstan添加到顶级目录来确定phpstan的路径。这是本地安装的phpstan应该驻留的位置。如果没有这样的文件或它不可执行,则返回默认的phpstan变量值。
https://stackoverflow.com/questions/53327471
复制相似问题