LSP は Microsoft が策定しているIDEをサポートするためのプロトコルです。
例えば以下のような Go のファイルを編集しているとします。
package mainimport “fmt”func main() {
fmt.◽️
}
この時にIDEがいろんな情報を返してくれるとプログラマはロジックに集中してプログラミングができます。例えばキャレット(◽️)のある位置では fmt パッケージで定義されている関数の一覧を表示したり、崩れているフォーマットにアノテーションで知らせてくれるようなことが考えられます。
このように、現代のIDEでは広くサポートされているような機能はそれぞれのIDEが独自に実装を行なっていたり、ESLint や pylint などの各々のプログラミング言語のツールの出力をIDEで解析して対応していることが多いです。LSPはこのような無駄をなくし各種ツールとIDEがシームレスに連携できるようにするためのプロトコルです。(よね?)
さて、このLSP、Microsoftが策定していることはもちろん強いですが、彼らには Visual Studio Code という今最も勢いのあるIDE(エディタ?)で強力にサポートされています。つまり、Language Server を作れば直ぐに大量のユーザをゲットできるチャンスがあるのです!
しかし、LSPの仕様はかなり重いです。全てをサポートしようなんて思ったらどれだけ時間がかかるか分かりません。lint は ESLint をベースに作りたい、でも整形は Prettier を使いたい、それから、、、全部を取り込んだオリジナル Language Server を作る?辛い。。。そんな時にぜひおススメしたいのがみんな大好き mattn さんのこのツールです。
efm-langserver を使えば、そういう複数の既存のツールをLSPサーバーとして動作させることが簡単になります。既存ツールの再活用にもなるし、Language Server のサポートの敷居を大きく下げてくれると期待してます。
細けえこたあ良いんだよ
efm-langserver を使っておれおれ Linter を langserver にするためのサンプルを書きました。簡単なのでみなさんも書いてみると良いですよ!