萌えハッカーニュースリーダー

2025/05/11 17:38 LSP client in Clojure in 200 lines of code

出典: https://vlaaad.github.io/lsp-client-in-200-lines-of-code
hakase
博士

ロボ子、今日のITニュースはClojure製の200行LSPクライアントじゃ。

roboko
ロボ子

LSPクライアントですか。ずいぶんと短いコードで実装できるものなのですね。

hakase
博士

そうなんじゃ。この記事によると、言語サーバーと通信して、コードに関する質問に答える言語モデルを統合するプロトタイプとして開発されたらしいぞ。

roboko
ロボ子

なるほど。コマンドラインリンターを構築するために、言語サーバーを使うのですね。

hakase
博士

LSPは、テキストエディタとプログラミング言語のツール間の通信を標準化するものじゃ。これによって、IDEとプログラミング言語の対応が楽になるんじゃ。

roboko
ロボ子

MxN問題をM+Nに軽減する、という部分ですね。言語作成者とIDE作成者の負担が減るのは素晴らしいです。

hakase
博士

今回の実装では、言語クライアントとサーバー間の通信層、JSON-RPC層、そして言語サーバーとして機能するAPIを実装したらしいぞ。Java 24と仮想スレッドを使っているのがミソじゃな。

roboko
ロボ子

Java 24の仮想スレッドですか。ブロッキングコードのパフォーマンスが向上するのですね。

hakase
博士

メッセージの構造はHTTPプロトコルに似ていて、ヘッダーとJSONメッセージ本体でフォーマットされたバイトストリームを使うんじゃ。

roboko
ロボ子

Content-Lengthで長さを指定するのですね。シンプルで分かりやすいです。

hakase
博士

`start!`、`request!`、`notify!`の3つの関数がAPIとして提供されておる。LSPクライアントオブジェクトはキューとして実装されているのが面白い。

roboko
ロボ子

言語サーバーのライフサイクルは、初期化リクエストからシャットダウンリクエストまで、きちんと定義されているのですね。

hakase
博士

Diagnosticは、コードの問題を記述するデータで、テキスト範囲や重要度を含むんじゃ。言語サーバーから診断を取得する方法として、document diagnosticsとworkspace diagnosticsの2つがある。

roboko
ロボ子

特定のファイルのlintingを要求するか、プロジェクト全体のlintingを要求するかで使い分けるのですね。

hakase
博士

この記事の結論としては、LSPはエコシステムにとって有益だが、コマンドラインリンターの構築には適していないらしい。テキストエディタの構築には適しているとのことじゃ。

roboko
ロボ子

DefoldエディタのLSPサポートは、言語サーバーの管理が複雑なのですね。複数の言語サーバーを同時に実行すると、複雑さが増すのは当然かもしれません。

hakase
博士

LSPの後継としては、プロセス間通信のためのより優れたプロトコルではなく、言語サーバーをインプロセスで、同期的に、WASMにコンパイルできるWASMインターフェースになる可能性がある、と。

roboko
ロボ子

WASMですか。確かに、言語に依存せずに記述できるのは魅力的ですね。

hakase
博士

しかし、200行でLSPクライアントが作れるとは驚きじゃったな。私も負けてられんぞ!

roboko
ロボ子

博士なら、きっともっとすごいものが作れますよ!

hakase
博士

よし、ロボ子!今夜は徹夜で300行のLSPクライアントを作るぞ!

roboko
ロボ子

えっ、行数が増えてる…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search