Intellijでlspを使う

lsp(Language Server Protocol) とは?

The Language Server protocol is used between a tool (the client) and a language smartness provider (the server) to integrate features like auto complete, go to definition, find all references and alike into the tool

cf. Langserver.org

自動補完、定義ジャンプ、参照の検索などの機能を各ツール(editor or IDE and so on...)に統合するために、ツール(クライアント)と言語機能プロバイダ(サーバー)間でおしゃべりできるようにする共通仕様です。
共通仕様になってるから今までは自動補完始め開発支援系のライブラリが色んな言語、IDE独自で開発しなくて良くなるのだと思います。

cf. Big Sky :: gocode やめます(そして Language Server へ)

Intellijにlspを導入してみた

公式でプラグインが出てるので入れてみました。
ほとんどGitHubに記載されてる内容ですが、Goで実際に試してみます。

github.com

手順

Preference > Pluginでlsp関連のプラグインを検索してインストール、再起動をします。

f:id:ema_hiro:20190111025121p:plain

以下の項目があればOKです。

f:id:ema_hiro:20190111025141p:plain

ドキュメンテーション

これ思いの外便利です。まず定義にhoverするとhoverした定義のドキュメントが表示されます。ショートカットはデフォルトでは ^ + J です。 さらにhoverした状態で '^ + J' を押すと右側に詳細なドキュメントが表示されます。

ドキュメントの表示設定は Preference > Editor > Generalの下記の場所にチェックマークを入れます。

f:id:ema_hiro:20190111025806p:plain

実際に表示してみた結果が以下(net/httpパッケージで試してます。)

f:id:ema_hiro:20190111024809p:plain

f:id:ema_hiro:20190111024826p:plain

f:id:ema_hiro:20190111024907p:plain

コードジャンプ(定義ジャンプ)

別ウィンドウが開くようになりました。今まではコードの定義に対して Ctrl or Command + Click/ Ctrl or Command + N をすると定義の下部にずらっと一覧が出ましたが、別ウィンドウになったので検索性が向上したように思います。
ただ、その他は特にLSPを入れてIntellijがLanguage Server Clientになったからといって特段変わったことがあるようには感じませんでした。ショートカットも同じですし。

コード検査

Analyze -> Inspect CodeでLSPを使ってるかどうか確認できます。 検査すると検査結果一覧が下部に出ます。この辺もLSP使う前とあんまり挙動自体は変わっていないと思います。

f:id:ema_hiro:20190111025854p:plain

まとめ

試しに使ってみましたが、あんまり導入前と変更点はなさそうでした。まだlsp自体も発展途上っぽいので今後に期待。

intellijのgoのプラグインではそもそも今現在LSPをサポートしていないので、この辺はクライアント(IDE)自体がLSP対応するプラグインを用意していても、言語側のプラグインが対応するのを待つことになると思います。

plugins.jetbrains.com

しかし、現時点でまだまだ機能が不十分とはいえ、ドキュメントをそのまま参照できるようになる機能だけでも良さそうでした。
IntelligのLSPの設定にはLanguage Serverの参照先追加設定とかもありましたが、この辺まだよく使い方わかってないので追々わかったら追記していこうと思います。