機能概要¶
ReScript IntelliJ Plugin は、2 つのレイヤーに整理された 90 以上の機能を提供します:
ネイティブ機能 はプラグインに組み込まれており、外部依存なしで動作します。即座に利用でき、オフラインでも機能します。
LSP 機能 は ReScript Language Server を必要とし、コードのセマンティックな理解を提供します。
機能は 8 つのカテゴリに分類されています: シンタックスハイライト、コード補完、ナビゲーション、コード編集、実行とビルド、テスト、コード分析、高度な機能。各カテゴリの詳細は下記のカードを参照するか、どの機能が Language Server を必要とするかの概要については「ネイティブ機能と LSP 機能」の表を参照してください。
機能カテゴリ¶
JFlex レキサー + LSP セマンティックトークンによる正確な色分けです。
インテリジェントな補完、ポストフィックステンプレート、ライブテンプレートです。
定義へのジャンプ、シンボル検索、関連ファイルなどです。
折りたたみ、フォーマット、インテンション、囲み、スマート編集です。
実行構成、ガターアイコン、ビルドステータスです。
テストツリー UI を備えた Jest/Vitest 統合です。
インスペクション、デッドコード分析、インポートの最適化です。
Code Lens、コンパイル済み JS プレビュー、モジュール階層、.d.ts バインディング生成、プロジェクトウィザードなどです。
ネイティブ機能と LSP 機能¶
機能 |
ネイティブ |
LSP |
詳細 |
|---|---|---|---|
シンタックスハイライト |
あり |
あり (セマンティックオーバーレイ) |
ネイティブレキサーがキーワード、文字列、演算子、句読点の色分けを処理します。LSP は変数、型、名前空間、バリアントコンストラクタに対するセマンティックな精度を追加します。 |
コード折りたたみ |
あり |
PSI ツリーを使用して、複数行の宣言、ブロックコメント、リージョンマーカーを折りたたみます。セマンティック分析は不要です。 |
|
括弧のマッチング |
あり |
レキサーからのトークンレベルの情報を使用して |
|
コメントの切り替え |
あり |
カーソル位置に基づいて |
|
ストラクチャービュー |
あり |
軽量パーサーからのトップレベル宣言 ( |
|
ライブテンプレート |
あり |
コードスニペット (例: |
|
ポストフィックステンプレート |
あり |
サフィックス ( |
|
ファイル切り替え (Alt+O) |
あり |
ファイル名に基づいて |
|
コード補完 |
あり |
型システムを使用して、識別子、レコードフィールド、モジュールメンバー、バリアントコンストラクタに対するコンテキスト依存の補完を提供します。 |
|
定義へのジャンプ |
あり |
任意のシンボルの定義場所を解決します。モジュールパスとエイリアスを追跡するために型分析が必要です。 |
|
ホバードキュメント |
あり |
マウスホバー時に推論された型とドキュメントコメントを表示します。コンパイラの型情報に依存しています。 |
|
参照の検索 |
あり |
プロジェクト全体でシンボルの全使用箇所を検索します。ファイル横断的なセマンティック分析が必要です。 |
|
診断 |
あり |
型エラー、構文エラー、警告をインラインで報告します。Language Server を経由した ReScript コンパイラによって提供されます。 |
|
インレイヒント |
あり |
|
|
リネーム |
あり |
シンボルの名前を変更し、プロジェクト全体のすべての参照を更新します。完全なセマンティック理解が必要です。 |
|
コードフォーマット |
あり (CLI 経由) |
Language Server を通じて |
|
シグネチャヘルプ |
あり |
関数の引数を入力する際にパラメータ情報を表示します。型分析が必要です。 |
|
Code Lens |
あり |
CodeVision API を通じて関数の上に型注釈を表示します。型推論が必要です。 |
|
プロジェクトウィザード |
あり |
事前設定済みの 16 テンプレートから新しいプロジェクトを作成します。すべてのビルドファイルとスターターコードをローカルに生成します。 |
ネイティブ機能について
ネイティブ機能は、プラグインに同梱された JFlex レキサーと軽量パーサーによって完全に駆動されます。ReScript コードの 構文構造 に基づいて動作し、キーワードのトークン化、括弧のマッチング、トップレベル宣言の認識を行いますが、型やセマンティクスは理解しません。
これは、ネイティブ機能が以下の特徴を持つことを意味します:
外部プロセスを起動する必要がないため、起動遅延なしで即座に動作します。
プラグイン自体にのみ依存するため、オフラインや
node_modulesのないプロジェクトでも機能します。@rescript/language-serverや Node.js のインストールも必要ありません。
純粋に構文的な操作の例としては、module ブロックの折りたたみ (パーサーが module キーワードと対応する括弧を認識)、行コメントの切り替え (行頭への // の挿入)、ライブテンプレートの展開 (テキスト略語を事前定義されたスニペットに置換) などがあります。
LSP 機能について
LSP 機能は stdio 接続を通じて @rescript/language-server と通信します。Language Server は内部で ReScript コンパイラを実行し、以下へのアクセスを提供します:
型推論 ---
xがintであることやuser.nameがstringであることを認識します。ファイル横断的な解決 ---
open BeltをたどってBelt.Array.mapを見つけます。エラー検出 --- 型の不一致、フィールドの欠落、網羅性の警告を報告します。
Language Server は完全なコンパイルを実行するため、LSP 機能は構文分析だけでは不可能な、豊富で正確な情報を提供できます。例えば、Go to Definition は複数のモジュールエイリアスを介してインポートされた関数を解決でき、コード補完は推論された型コンテキストに一致するレコードフィールドを提案できます。
LSP 切断時のグレースフルデグラデーション
このプラグインは、Language Server がなくても基本的な編集が妨げられないように設計されています。LSP 接続が利用できない場合 --- 例えば、@rescript/language-server がインストールされていない、Node.js が見つからない、サーバープロセスがクラッシュした場合など --- 以下の動作が適用されます:
通常どおり動作し続ける機能:
シンタックスハイライト (レキサーベースのキーワード、文字列、数値、演算子、句読点、モジュール名、JSX タグ、デコレータの色分け)
すべての認識された宣言のコード折りたたみ
括弧のマッチングと自動閉じ括弧
行コメントとブロックコメントの切り替え
トップレベル宣言のアウトラインを含むストラクチャービュー
ライブテンプレートとポストフィックステンプレート
.resと.resi間のファイル切り替えSmart Enter と宣言の上下移動
Surround With テンプレート
利用できなくなる機能:
コード補完は候補を表示しません (ReScript ファイルに対して補完ポップアップが表示されません)。
Go to Definition、Find Usages、Hover は呼び出しても何も行いません。
エディタガターや Problems パネルに診断エラーや警告が表示されません。
インレイヒントと Code Lens アノテーションは表示されません。
リネームリファクタリングは利用できません。
Cmd+Option+Lによるコードフォーマットはファイルを変更しません。関数の引数を入力する際にシグネチャヘルプが表示されません。
視覚的なインジケータ: Language Server が見つからない場合、プラグインは ReScript ファイルの上部にエディタ通知バーを表示し、LSP 機能が利用できない旨と @rescript/language-server のインストール手順を説明するメッセージを表示します。
復旧: Language Server がインストールされるか、Settings > Languages & Frameworks > ReScript でパスが設定されると、.res または .resi ファイルを開いた際に LSP 接続が自動的に確立されます。IDE を再起動せずにすべての LSP 機能が利用可能になります。