Language Server Protocolのサーバー側ライブラリを書きました
.NETの話です。タイトルには書かずに本文の一番上に書きました。
Language Server Protocolについての説明はatsushienoさんの記事1やvvakameさんのセッションスライドを読んでもらうことにして、ここでは省略します。
language serverとは、IDEが必要とするプログラムのプロジェクト ソースを解析して情報を提供する機能を、サービスとして実現するものです。
ほんとに作りたいのはNemerleの言語サービスなんですが、そこに行く前に準備として.NETのライブラリをでっち上げました。
https://github.com/matarillo/LanguageServerProtocol
Nugetにも登録しました。 https://www.nuget.org/packages/LanguageServerProtocol/
使い方
Microsoftが公開している、nodeによる実装サンプル https://github.com/Microsoft/vscode-languageserver-node-example をフォークして、 サーバー側を拙作LanguageServerProtocolに置き換えたもの https://github.com/matarillo/vscode-languageserver-csharp-example を見たほうがいいと思います。
概要だけ書くとこんな感じです。
LanguageServer.ServiceConnection
クラスを継承したクラスを作ります。- クライアント(≒エディタやIDE)からサーバーに送られてくるメッセージを処理するには、virtualメソッドをオーバーライドします。
- サーバーからクライアントにメッセージを送るには、
ServiceConnection.Proxy
プロパティからたどることができる各種メソッドを呼び出します。 - クライアントからの通信を待ち受けるには、
ServiceConnection.Listen()
メソッドを呼び出します。
-
https://atsushieno.github.io/exqiita/2016/08/19/ にもありますが、本文には一応Qiitaの方を載せました。↩