matarilloの雑記

GitHubに公開したソフトウェアなどについて書きます。

Language Server Protocolのサーバー側ライブラリを書きました

.NETの話です。タイトルには書かずに本文の一番上に書きました。

Language Server Protocolについての説明はatsushienoさんの記事1vvakameさんのセッションスライドを読んでもらうことにして、ここでは省略します。

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()メソッドを呼び出します。

  1. https://atsushieno.github.io/exqiita/2016/08/19/ にもありますが、本文には一応Qiitaの方を載せました。