使用PHPSTAN配置VIM ALE插件

时间:2018-11-15 20:31:04

标签: php vim vim-plugin phpstan

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

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

不幸的是,ALE的默认配置无济于事,因为它期望phpstan位于$PATH中,即使存在,它仍然会抱怨缺少自动加载功能。

1 个答案:

答案 0 :(得分:0)

此解决方案特定于gitcomposer

没有任何vcs或composer,我找不到很好的解决方案。

因此,我们首先假定项目中使用了composer,因此生成了autoload.php文件。如果您不使用此功能,则可能应该使用,因为它将类映射到文件并使自动加载变得简单。

不幸的是,使用全局phpstan二进制是徒劳的。这是因为phpstan在当前目录中查找自动加载或霓虹灯配置文件,该文件告诉它在哪里查找类定义。因此,如果您不想被迫从根项目的目录中打开项目中的每个文件,那么应该有另一个解决方案。

使用phpstan在项目(composer中)中安装的vendor/bin/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 comand确定。

if ! type git部分检查系统中是否有git命令。如果不是,则将默认的phpstan文本返回给变量。

git rev-parse --show-toplevel试图找出我们是否在git资源库中,以及它是什么顶级目录。如果找到正确,它将通过将phpstan添加到顶级目录来确定/vendor/bin/phpstan的路径。这是本地安装的phpstan所在的位置。 如果没有这样的文件或它不是可执行文件,那么将返回默认的phpstan变量值。