Chapter 05

初期化

takl
takl
2020.12.22に更新

メッセージの送受信方法がわかったので、初期化を作っていきましょう。

初期化関連の仕様はここにあります。

細々した話が色々ありますが、大雑把には

  1. Language Client が initialize request を送る
  2. Language Server が response を返す
  3. Language Client が initialized notification を送る

という感じで初期化が行われます。

initialize に対する response の result には capabilities というメンバが必要ですが、仕様書をよく読むとこれは空のオブジェクトでも valid です。というわけでとりあえず初期化を完了させるには次のようにすれば良いです。

requestTable["initialize"] = (msg) => {
    sendMessage({ jsonrpc: "2.0", id: msg.id, result: { capabilities: {} } });
}

notificationTable["initialized"] = (msg) => {
    logMessage("initialized!");
}

initialized notification が飛んできて "initialized!" と表示されると思います。これで初期化は終了です。

が、この後ファイルを操作したりしても Language Client はメッセージを出してくれません[1]capabilities は「Language Server はこんなことができるよ」という情報なので、これが空だと何もできない Language Server だと思われてしまいます。

というわけで以降、少しずつ扱えるメッセージを増やしていきましょう。

* ここまでのソースコード *

脚注
  1. shutdown メッセージなどは飛んできますが…。 ↩︎