オープンな言語サーバー プロトコルの純粋な PHP 実装。あらゆる IDE で PHP の静的コード分析を提供します。
優れた Tolerant PHP パーサー、phpDocumentor の DocBlock リフレクション、および同時実行のためのイベント ループを使用します。
目次
ホバー リクエストは、宣言行 (言語php
でマークされている) と docblock の概要を返します。パラメータの場合、 @param
タグが返されます。
クエリは、大文字と小文字を区別せずにシンボルの完全修飾名と照合されます。
非標準: 空のクエリは、ワークスペース内で見つかったすべてのシンボルを返します。
PHP 解析エラーはエラーとして報告され、docblock の解析エラーは警告として報告されます。 vendor
ディレクトリからのエラー/警告は無視されます。
補完、型解決などには、標準の PHP ライブラリと共通の拡張機能が使用されます。
グローバルに検索可能な定義は次のとおりです。
const
キーワードを使用した定数定義は必要に応じてジャストインタイムで解決されます。
use
ステートメントまだサポートされていません:
define()
名前空間は完全修飾名の一部を構成するだけであり、1 つの一意の宣言にマップされないため、設計上は宣言とみなされません。
定義/参照/ホバーは現在機能します
use
)use
implements
/ extends
後のクラスのようなものinstanceof
この言語サーバーは、ファイル プロトコル拡張機能を実装します。クライアントがClientCapabilities.xfilesProvider
およびClientCapabilities.xcontentProvider
を通じてサポートを表明した場合、サーバーはクライアントからのリクエストを通じてワークスペース内のファイルとファイル コンテンツをリクエストし、ファイル システムに直接アクセスすることはありません。これにより、サーバーは、コンテナーのような隔離された環境、リモート ワークスペース、またはfile://
以外の任意のプロトコルで動作できるようになります。
初期化時に、サーバーはプロジェクト ディレクトリで PHP ファイルを再帰的にスキャンし、それらを解析して、すべての定義と参照をメモリ内のインデックスに追加します。これにかかる時間はプロジェクトのサイズによって異なります。執筆時点では、このプロジェクトには 78 個のファイルと 1560 個のファイルが依存関係に含まれており、解析に 97 秒かかり、Surface Pro 3 で 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
(オプション)サーバーが言語クライアントとの通信に STDIN/STDOUT を使用する代わりに tcp 接続を使用するようにします。サーバーは指定されたアドレスへの接続を試みます。 STDIO がブロックされるため、Windows では強く推奨されます。
例:
php bin/php-language-server.php --tcp=127.0.0.1:12345
--tcp-server=host:port
(オプション)サーバーが言語クライアントとの通信に STDIN/STDOUT を使用する代わりに tcp 接続を使用するようにします。サーバーは、指定されたアドレスで接続を待機します。 PCNTL が使用可能な場合は、接続ごとに子プロセスをフォークします。そうでない場合、接続は 1 つだけ受け入れられ、接続は一度閉じられると再確立できなくなり、代わりに新しいプロセスが生成されます。
例:
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 なしでは再起動しないように Language Server に指示します (XDebug はパフォーマンスに大きな影響を与えます)。