Это решение является git
и composer
специфичным.
Я не нашел хорошего решения без каких-либо 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
, который определяется при запуске команды оболочки.
if ! type git
part проверяет, есть ли в системе команда git
.Если нет, то текст phpstan
по умолчанию возвращается в переменную.
git rev-parse --show-toplevel
пытается выяснить, находимся ли мы в репозитории git
и каков его каталог верхнего уровня.Если он найден правильно, он определяет путь к phpstan
, добавляя /vendor/bin/phpstan
в каталог верхнего уровня.Это где локально установлен phpstan
должен находиться.Если такого файла нет или он не является исполняемым, возвращается значение переменной по умолчанию phpstan
.