Skip to content

このページでは、oxc_language_server の主要な概念と、CLI との違いについて説明します。
言語サーバーとエディタの間の通信についてさらに学びたい場合は、公式の LSP/LSIF ドキュメント が最良の出発点です。
言語サーバーの README.md には、関連する仕様の概要がすぐに確認できます。

注:このドキュメントでは「ツール」という抽象的概念について多く言及します。これは oxlint および oxfmt のコアロジックを指すものです。

oxc_language_server におけるツールの実装概念

oxc_language_server は、独自スクリプトに言語サーバーとして機能する能力を追加するために使用できます。
サーバー自体はファイルを変更したり、提案を作成したりすることはありません。これはツールの責任です。
代わりに、ワークスペースフォルダを管理し、正しい設定を読み込むためのすべての通信を担当します。
提供されたツールと通信するため、サーバーは ToolBuilderTool トレイト を提供しています。

言語サーバーと CLI との違い

エディタがファイルを変更し、サーバーは変更を伝える

ファイルの通信と修正に関する小さなですが重要な点です。
CLI ツールは変更をファイルシステムに書き込みます。
一方、(oxc) 言語サーバーは絶対にファイルシステムに書き込みてはいけません。代わりに、変更内容をエディタに通知するのみです。

ワークスペースフォルダ

エディタで Git プロジェクトを開いたとき、それがワークスペースフォルダです。
LSP は複数の (Git) プロジェクトを同時に開くという概念を持っています。
各プロジェクトは独自の設定(次のセクション参照)を持つことができますが、最も重要なのは各プロジェクトごとに独自の「コンテキスト」(ワークスペース URI)を持つ点です。
ワークスペース URI を、CLI ツールの「現在の作業ディレクトリ」と同じものと考えることができます。
ワークスペースフォルダはエディタによって追加/削除される可能性があることに注意してください。

設定(フォルダ付き)

言語サーバーは、CLI フラグと同様に設定可能であり、oxc 言語サーバーは以下の概念に従います:
各ワークスペースフォルダは独自の設定を持つことができます。たとえば、プロジェクト A は型意識的な静的解析を使用し、プロジェクト B は自動保存時に危険な修正を有効にするといった具合です。

設定の変更

驚きかもしれませんが、ユーザーはリアルタイムで言語サーバーの設定を変更できます。エディタは更新された設定をサーバーに送信します。
現在のところ、サーバーは古い設定と新しい設定の両方を各ツールに送信しており、さまざまな処理に対応できるようにしています。
設定に応じて、ツールは再起動または再構築を行うことがあります。

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

あなたのツールは、特定のファイル(グロブパターン)の監視をエディタに依頼し、ファイルが変更/作成/削除されたときにサーバーに通知できます。
これは主に .ox**rc.json という設定ファイルや、その中で参照されるファイル(例:oxlint での extends)に対して使用されます。
ワークスペースおよびツールの設定に応じて、ツールは再度再起動または再構築が必要になる場合があります。