0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rubyで簡単な言語サーバーを書いてみた(VSCode版)

Last updated at Posted at 2025-03-30

言語サーバー(language server)を自作できるようにしておくと何かと便利そうなので、自分用の最低限の叩き台みたいなものを書いてみました。

前回の記事↓ ではクライアントとして Emacs + Eglot を使いましたが、VSCode でも試してみました。

今回作ったものの概要

  • 言語サーバーを子プロセスとして起動して標準入力・標準出力で通信する一般的な方式
  • 例として test という文字列を含む行に警告を表示する機能だけ
    • textDocument/publishDiagnostics を使う
  • なくても動く部分は省略、エラーハンドリングは適当

動作イメージはこんな感じ:

Peek 2025-03-30 11-52.gif

準備

VSCode 側の設定

Language Client を作る|Language Server Protocol に対応したミニ言語処理系を作る (zenn.dev / takl)を参考にさせてもらいました。 :pray:

言語サーバーとして langserver.rb を使いたいので以下の箇所だけ修正しました。

 function activate(context) {
     try {
         const serverOptions = {
-            command: "node",
+            command: "ruby",
             args: [
-                context.extensionPath + "/oreore.js",
-                "--language-server"
+                context.extensionPath + "/langserver.rb"
             ]
         };
         const clientOptions = {

langserver.rb

同じく Language Server Protocol に対応したミニ言語処理系を作る (zenn.dev / takl) を参考にさせてもらいました。クライアントのファイルと同じフォルダに置きます。

動かす

  • VSCode でクライアントのファイルを置いているフォルダを開く
  • F5 を押す
    • 別ウィンドウが開く
  • 開いたウィンドウの方で sample.ore を開く
    • 自動で oreore モードになり、言語サーバーが起動する
  • sample.ore を編集すると VSCode + クライアントが言語サーバーとやりとりして画面上にフィードバックが表示される
    • 保存は不要。編集された現在のバッファの内容を元にフィードバックが表示される

編集時の挙動はこんな感じです:

Peek 2025-03-30 11-52.gif

  • test という文字列を含む行に赤い下線が表示される
  • test という文字列を含まなくなった行の赤い下線が消える
  • マウスカーソルのホバーでもメッセージが表示される

メモ

バージョン

Ruby 3.2.3 ... Ubuntu 24.04 のデフォルト
node.js 7.3.0 ... Ubuntu 24.04 のデフォルト? でインストールされているが使われているかは不明
VSCode 1.98.2

npm install 実行時に使ったのは以下
node.js 22.14.0
npm 11.2.0
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?