Чистая реализация PHP открытого протокола языкового сервера. Обеспечивает статический анализ кода PHP для любой IDE.
Использует великолепный PHP-парсер Tolerant, отражение DocBlock phpDocumentor и цикл событий для параллелизма.
Оглавление
Запрос при наведении возвращает строку объявления (отмеченную языком php
) и сводку докблока. Для параметров он вернет тег @param
.
Запрос сопоставляется с полным именем символа без учета регистра.
Нестандартный: пустой запрос вернет все символы, найденные в рабочей области.
Ошибки синтаксического анализа PHP отображаются как ошибки, ошибки синтаксического анализа докблоков отображаются как предупреждения. Ошибки/предупреждения из каталога vendor
игнорируются.
Для завершения, разрешения типов и т. д. будут использоваться стандартная библиотека PHP и общие расширения.
Определения, доступные для глобального поиска:
const
Определения решаются точно в срок, когда это необходимо:
use
замыканияЕще не поддерживается:
define()
Пространства имен не считаются декларацией по своей сути, поскольку они составляют только часть полного имени и не сопоставляются с одним уникальным объявлением.
Определения/ссылки/наведение в настоящее время работают для
use
)use
операторы для классов, констант и функцийimplements
/ extends
instanceof
Этот языковой сервер реализует расширение протокола файлов. Если клиент выражает поддержку через ClientCapabilities.xfilesProvider
и ClientCapabilities.xcontentProvider
, сервер будет запрашивать файлы в рабочей области и содержимое файла через запросы от клиента и никогда не будет обращаться к файловой системе напрямую. Это позволяет серверу работать в изолированной среде, такой как контейнер, в удаленной рабочей области или по любому протоколу, отличному от file://
.
После инициализации сервер рекурсивно сканирует каталог проекта на наличие файлов PHP, анализирует их и добавляет все определения и ссылки в индекс в памяти. Время, которое это займет, зависит от размера проекта. На момент написания этот проект содержал 78 файлов + 1560 файлов в зависимостях, анализ которых занимает 97 секунд и занимает 76 МБ на Surface Pro 3. Языковой сервер полностью работоспособен во время индексации и может отвечать на запросы с уже проиндексированными определениями. Последующие запросы будут практически мгновенными, поскольку индекс хранится в памяти.
Включение XDebug сильно влияет на производительность и может даже привести к сбою сервера, если параметр max_nesting_level
слишком низкий.
Этот проект следует за semver для протокола связи и параметров командной строки, например, увеличение основной версии LSP приведет к увеличению основной версии PHP LS. Новые функции, такие как реализация запросов, приведут к появлению новой дополнительной версии. Все остальное будет патч-релизом. Все занятия считаются внутренними и не подлежат семверу.
Рекомендуемый метод установки — через Composer. Просто запустите
composer require felixfbecker/language-server
и вы получите последнюю стабильную версию и все зависимости.
Запуск composer update
обновит сервер до последней работоспособной версии.
После установки языкового сервера и его зависимостей необходимо проанализировать заглушки на наличие стандартных символов PHP и сохранить индекс для быстрой инициализации.
composer run-script --working-dir=vendor/felixfbecker/language-server parse-stubs
Запустите языковой сервер с помощью
php vendor/felixfbecker/language-server/bin/php-language-server.php
--tcp=host:port
(необязательно)Заставляет сервер использовать TCP-соединение для связи с языковым клиентом вместо использования STDIN/STDOUT. Сервер попытается подключиться к указанному адресу. Настоятельно рекомендуется для Windows из-за блокировки STDIO.
Пример:
php bin/php-language-server.php --tcp=127.0.0.1:12345
--tcp-server=host:port
(необязательно)Заставляет сервер использовать TCP-соединение для связи с языковым клиентом вместо использования STDIN/STDOUT. Сервер будет прослушивать указанный адрес на наличие соединения. Если PCNTL доступен, будет создавать дочерний процесс для каждого соединения. В противном случае будет принято только одно соединение, и соединение не может быть восстановлено после закрытия, вместо этого создайте новый процесс.
Пример:
php bin/php-language-server.php --tcp-server=127.0.0.1:12345
--memory-limit=integer
(необязательно)Устанавливает ограничение памяти для языкового сервера. Эквивалент директивы ограничения памяти php.ini. По умолчанию установлено 4 ГБ (что намного больше, чем необходимо).
Пример:
php bin/php-language-server.php --memory-limit=256M
Вам необходимо установить как минимум PHP 7.0 и Composer. Клонируйте репозиторий и запустите
composer install
для установки зависимостей.
Запустите тесты с помощью
composer test
Ворс с
composer lint
Проект анализирует PHP-заглушки PHPStorm, чтобы получить поддержку встроенных функций PHP. Он повторно анализирует их по мере необходимости после обработки Composer, но после некоторых изменений кода (например, связанных с индексом или синтаксическим анализом) вам, возможно, придется явно повторно анализировать их:
composer run-script parse-stubs
Для отладки с помощью xDebug убедитесь, что это установлено как переменная среды.
PHPLS_ALLOW_XDEBUG=1
Это указывает языковому серверу не перезапускаться без XDebug, если он обнаруживает, что XDebug включен (XDebug оказывает большое влияние на производительность).