Dart-code: LSPを調査する

作成日 2018年01月27日  ·  4コメント  ·  ソース: Dart-Code/Dart-Code

現在、Dart Codeには、分析サーバーAPIからVS CodeAPIにマップする多くのコードが含まれています。 VS CodeのAPIはCodeに固有であるため、このコードは非常に固有であり、再利用できません。 このコードをLSP実装にプッシュすると、LSPを実装する他のエディターで共有できる可能性があります(たとえば、Visual Studioではプレビューがサポートされています)。

LSPの消費

VSコード

VS CodeでLSPを使用するには、通常どおり拡張機能を作成してから、 vscode-languageclientパッケージを使用して、サーバーとの通信に使用するVSCode用のアダプターを作成します。 クライアントは、プロセスを生成するか、プロセスまたはセットまたは入力/出力ストリームを返す関数を提供できます(ここを参照)。

Dartコードの場合、カスタムメッセージで実行できるLSPのサポートに加えて、カスタムリクエストについてサーバーと通信できる必要があります。

Visual Studio

注:「VisualStudio LSP拡張機能は、VisualStudioのプレビューチャネルにのみインストールできます。本番環境でプレビューを使用しないでください。」

Visual StudioでLSPを使用するには、通常どおり拡張機能を作成し(現在、依存関係としてLSPプレビュー拡張機能があります)、 Microsoft.VisualStudio.LanguageServer.Client NuGetパッケージを使用して、サーバーと通信するためのVisualStudio用のアダプターを作成します。

実装

上記に基づいて、LSP実装に接続するためにVS Codeを取得するために少量のTypeScriptが必要になります(Visual Studioで同じことを行う場合は少量のC#が必要になります)。 このコードは比較的マイナーであり、サーバーを生成してIDEに渡すだけです。 IDE自体がその機能をサーバーにアドバタイズし、直接通信する必要があります。

これを行うには、いくつかの可能な方法があります。

  1. SDKの分析サーバー内にLSPプロトコルを送信します
    これは、SDK検出ロジックをLSPサーバーではなく拡張機能に配置し、SDKのリリーススケジュールに関連付けることを意味します。
  2. LSPサーバーを、分析サーバーを生成し、STDIOを介して通信するプロキシとして記述します。
    これは、途中で追加プロセスを追加していることを意味しますが、現在と同じ方法で分析サーバーと通信しています(このようにすると、必要に応じてサーバーを別のテクノロジーで作成できます- Dartは良い候補のようですが、仕様からプロトコルAPIをコード化する必要があります)
  3. 拡張機能内に分析サーバーを出荷し、LSPサーバー内で直接ホストします
    これにより、余分なプロセスは不要になりますが、ディストリビューションが肥大化し、特定のSDKバージョンにユーザーが結び付けられます。
  4. 拡張機能で分析サーバーを出荷するのではなく、SDKから直接インプロセスでロードします
    これが機能するかどうかはわかりません-不明なパスからモジュールを動的にロードできますか?
    ここでインプロセスサーバーを作成するために使用するAPIが安定していることを確認する必要があります。これは、実行時のバージョンが、拡張機能内にLSPサーバーを出荷したときよりも新しい可能性があるためです。

関連リンク

VSコード

Visual Studio

最も参考になるコメント

また、AtomやEclipseなどの他のIDEはLSPをサポートしています。

標準のLSPサポートを提供する場合、私のチームはFlutterをEclipseIDEに統合しようとする可能性があります。 多様なツールのサポートは、Flutterの適応に非常に役立つと思います。

全てのコメント4件

また、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プロトコルに移行する可能性があります。

このページは役に立ちましたか?
0 / 5 - 0 評価