LSP(Language Server Protocol)のsignatureHelpと閉括弧の自動補完

LSP(Language Server Protocol)にsignatureHelpというのがありまして、メソッドの引数情報なんかを表示するのなんかに使えそうなもの。

rubyのLSPサーバであるsolargraph(バージョン0.39.8)を使ってみたら、 例えば、

puts(

と"("が入力された段階で、サーバにリクエスト出しても返ってこない。

puts()

となっているとこで"("の位置を指定して、リクエストすると、

{
  "signatures"=>[
  {
    "label"=>"puts(*args)",
    "documentation"=>"Invoke method +puts+ on STDOUT and passing +_args_+\n\nISO 15.3.1.2.11\n\n\n\nVisibility: public"
  },
  {
    "label"=>"puts(obj, ...)",
    "documentation"=>"Returns:\n* [nil] \n\nVisibility: public"
  },
  {
    "label"=>"puts(*)",
    "documentation"=>"Equivalent to\n\n    $stdout.puts(obj, ...)\n\n\n\nReturns:\n* [nil] \n\nVisibility: public"
  },
  {"label"=>"puts(*args)", "documentation"=>"Visibility: public"
  }]
}

という応答が返ってきた。素晴しい。

これって、文法エラーになるような不完全な状況だとsignatureHelpが使えないということでは? 入力途中に使えないと意味ないじゃん、と思って、Visual Stdio Codeでも試してみたら、 なんのことは無い、デフォルトで閉括弧が勝手に入力されるので、何の問題もない。

ふむ。 まずは、閉括弧の自動補完機能を作ってみるか・・・