現在、Dart Codeには、分析サーバーAPIからVS CodeAPIにマップする多くのコードが含まれています。 VS CodeのAPIはCodeに固有であるため、このコードは非常に固有であり、再利用できません。 このコードをLSP実装にプッシュすると、LSPを実装する他のエディターで共有できる可能性があります(たとえば、Visual Studioではプレビューがサポートされています)。
VS CodeでLSPを使用するには、通常どおり拡張機能を作成してから、 vscode-languageclient
パッケージを使用して、サーバーとの通信に使用するVSCode用のアダプターを作成します。 クライアントは、プロセスを生成するか、プロセスまたはセットまたは入力/出力ストリームを返す関数を提供できます(ここを参照)。
Dartコードの場合、カスタムメッセージで実行できるLSPのサポートに加えて、カスタムリクエストについてサーバーと通信できる必要があります。
注:「VisualStudio LSP拡張機能は、VisualStudioのプレビューチャネルにのみインストールできます。本番環境でプレビューを使用しないでください。」
Visual StudioでLSPを使用するには、通常どおり拡張機能を作成し(現在、依存関係としてLSPプレビュー拡張機能があります)、 Microsoft.VisualStudio.LanguageServer.Client
NuGetパッケージを使用して、サーバーと通信するためのVisualStudio用のアダプターを作成します。
上記に基づいて、LSP実装に接続するためにVS Codeを取得するために少量のTypeScriptが必要になります(Visual Studioで同じことを行う場合は少量のC#が必要になります)。 このコードは比較的マイナーであり、サーバーを生成してIDEに渡すだけです。 IDE自体がその機能をサーバーにアドバタイズし、直接通信する必要があります。
これを行うには、いくつかの可能な方法があります。
また、AtomやEclipseなどの他のIDEはLSPをサポートしています。
標準のLSPサポートを提供する場合、私のチームはFlutterをEclipseIDEに統合しようとする可能性があります。 多様なツールのサポートは、Flutterの適応に非常に役立つと思います。
ちなみに、GitHubには@nateboschによって管理されているnatebosch / dart_language_serverリポジトリがあります。 かなりアクティブなようです。
@rcjsuenええ、それは私が実験に使用しているものです(今週いくつかのPRを送信しました):-)
調査が完了し、Dart分析サーバーにLSPを追加することから始めました。 進捗状況はここで追跡されます:
https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/tool/lsp_spec/README.md
この問題はもう必要ないと思います。 VS Codeプラグインは、サーバーの2つのコピーの起動を回避するために、必要なものすべてをサポートすると(公式リクエストまたはカスタムリクエストのいずれかで)、将来的にLSPプロトコルに移行する可能性があります。
最も参考になるコメント
また、AtomやEclipseなどの他のIDEはLSPをサポートしています。
標準のLSPサポートを提供する場合、私のチームはFlutterをEclipseIDEに統合しようとする可能性があります。 多様なツールのサポートは、Flutterの適応に非常に役立つと思います。