Skip to content

oxc_language_server の役割と、CLI との違いの要点をまとめます。 言語サーバとエディタのやりとりをさらに知りたい場合は、公式の LSP / LSIF ドキュメントが出発点になります。言語サーバ本体の概要はリポジトリ内の README.md にあります。

なおこの文書では oxlintoxfmt の中核ロジックを抽象的に「ツール」と呼びます。

ツールを言語サーバ化するという考え方

oxc_language_server を使うと、手元のスクリプトを言語サーバとして動かす能力を足せます。サーバ単体ではファイルを書き換えたり提案を作ったりしません。それはツール側の責務です。サーバはワークスペースフォルダの管理と、正しい設定を読み込むための通信を担います。ツールとの連携には ToolBuilderTool トレイト を使います。

言語サーバと CLI の違い

ファイルを書き換えるのはエディタ側

ファイルと修正の関係で大事なのは、CLI はファイルシステムに変更を書き込む一方、(oxc の) 言語サーバは決して直接ファイルに書き込まず、エディタへ変更内容を伝えるだけ、という点です。

ワークスペースフォルダ

エディタで Git プロジェクトを開くと、それがワークスペースフォルダになります。LSP では複数の (Git) プロジェクトを同時に開けます。それぞれ別設定を持てます(次節)。重要なのは、ワークスペース URI ごとに文脈が分かれることです。ワークスペース URI は、CLI におけるカレントディレクトリのようなものと考えてよいです。エディタによってワークスペースフォルダの追加・削除があります。

フォルダ単位の設定

言語サーバは CLI のフラグ同様に設定できますが、oxc の言語サーバでは「ワークスペースフォルダごとに設定が分かれる」というモデルに従います。例: Git プロジェクト A は型情報を使ったリント、プロジェクト B は自動保存で危険な修正まで適用する、といった使い分けが可能です。

設定変更

ユーザーは実行中に言語サーバの設定を変えられます。エディタが更新後の設定を送ります。現在の実装では、サーバは各ツールに古い設定と新しい設定の両方を渡し、ツール側で必要な処理を選べます。設定次第でツールの再起動や再ビルドが要る場合もあります。

監視パターンと監視ファイルの変更

ツールはエディタに「特定の glob に合うファイルの変更・作成・削除を通知してほしい」と伝えられます。主に .ox**rc.json やその中の extends で参照されるファイル(oxlint の例)向けです。ワークスペースとツールの状態に応じて、再ビルドや再起動が必要になることもあります。