開放語言伺服器協定的純 PHP 實作。為任何 IDE 提供 PHP 靜態程式碼分析。
使用出色的 Tolerant PHP 解析器、phpDocumentor 的 DocBlock 反射和並發事件循環。
目錄
懸停請求傳回聲明行(用語言php
標記)和文件區塊的摘要。對於參數,它將返回@param
標記。
查詢與符號的完全限定名稱進行匹配,不區分大小寫。
非標準:空查詢將傳回工作區中找到的所有符號。
PHP 解析錯誤被報告為錯誤,文檔區塊的解析錯誤被報告為警告。來自vendor
目錄的錯誤/警告將被忽略。
補全、類型解析等將使用標準 PHP 函式庫和通用擴充。
全域可搜尋的定義是:
const
關鍵字的常數在需要時及時解決定義:
use
語句尚不支持:
define()
常數命名空間在設計上不被視為聲明,因為它們僅構成完全限定名稱的一部分,並且不會對應到一個唯一的聲明。
定義/參考/懸停目前適用於
use
)use
語句implements
/ extends
後類似類instanceof
此語言伺服器實作文件協定擴充。如果客戶端透過ClientCapabilities.xfilesProvider
和ClientCapabilities.xcontentProvider
表示支持,伺服器將透過客戶端的請求來請求工作區中的檔案和檔案內容,而不會直接存取檔案系統。這允許伺服器在隔離環境(如容器)、遠端工作空間或任何不同於file://
協定中運作。
初始化後,伺服器將遞歸掃描專案目錄中的 PHP 文件,解析它們並將所有定義和引用添加到記憶體索引中。這所需的時間取決於專案的規模。在撰寫本文時,該專案包含 78 個文件 + 1560 個依賴文件,在 Surface Pro 3 上解析需要 97 秒並消耗 76 MB。後續請求幾乎是即時的,因為索引保存在記憶體中。
啟用 XDebug 會嚴重影響效能,如果max_nesting_level
設定太低,甚至可能導致伺服器崩潰。
該專案在協定通訊和命令列參數方面遵循semver,例如LSP的主要版本增加將導致PHP LS的主要版本增加。請求實作等新功能將產生新的次要版本。其他一切都將是補丁版本。所有類別都被視為內部類別,並且不受 semver 的約束。
建議的安裝方法是透過 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 指令。預設值為 4GB(遠遠超出所需)。
例子:
php bin/php-language-server.php --memory-limit=256M
您至少需要安裝 PHP 7.0 和 Composer。克隆存儲庫並運行
composer install
安裝依賴項。
運行測試
composer test
棉絨與
composer lint
此專案解析 PHPStorm 的 PHP 存根以獲得對 PHP 內建函數的支援。它會在 Composer 處理後根據需要重新解析它們,但是在進行一些程式碼變更(例如涉及索引或解析的程式碼變更)後,您可能必須明確地重新解析它們:
composer run-script parse-stubs
若要使用 xDebug 進行偵錯,請確保將此設定為環境變量
PHPLS_ALLOW_XDEBUG=1
這會告訴語言伺服器如果偵測到 XDebug 已啟用(XDebug 對效能影響很大),則不要在沒有 XDebug 的情況下重新啟動。