Настройка плагина VIM ALE с помощью PHPSTAN - PullRequest
0 голосов
/ 15 ноября 2018

Я использую ALE для разработки PHP. Существует возможность использовать phpstan в качестве одного из линтеров, но независимо от того, что я делаю, есть уведомление, что phpstan не может загрузить определения класса / метода:

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

Конфигурация по умолчанию ALE, к сожалению, не помогает, поскольку она ожидает, что phpstan будет в $PATH, и даже если она там есть, она все равно жалуется на отсутствие автозагрузки.

1 Ответ

0 голосов
/ 15 ноября 2018

Это решение является 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.

...