0

我正在使用ALE进行 PHP 开发。有可能phpstan用作 linter 之一,但无论我做什么,都会有phpstan无法加载类/方法定义的通知:

Function foo not found while trying to analyse it - autoloading is probably not configured properly.

不幸的是,默认配置ALE没有帮助,因为它希望phpstan在 中$PATH,即使它在那里,它仍然抱怨缺少自动加载。

4

1 回答 1

2

这个解决方案是具体的gitcomposer

没有任何 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返回默认变量值。

于 2018-11-15T20:31:03.700 回答