こんにちは!UnrealDev.nvim スイートを開発している作者です。
unl-server(Rust製サーバー)への移行に伴う不具合修正も落ち着き、今週はいよいよ「Neovimを簡易IDE化する」ための大きな一歩として、独自の補完機能の強化を行いました。
🛠 なぜ「脱LSP」の補完を目指したのか
これまで補完はLSP(clangd等)に任せる方針でしたが、UE開発において以下の課題に直面していました。
-
Windows環境での不安定さ:
.rspファイルの再生成とプロジェクトビルドの兼ね合いが煩わしく、環境構築のハードルが高い。 - LSPの重さ: ファイルを開いた直後のインデックス作成やコンパイル待ちが長く、結局「IDE(Riderなど)の方がサクサク動く」という、Neovim派としては非常に悔しい現実に直面。
そこで、「軽量なNeovimの利点を活かすため、LSPに依存せず、独自DBを使って爆速で補完を出す」仕組みの構築をスタートしました。
🚀 独自DBによる補完の実装
まずは、実際に動作している様子をご覧ください。
LSPを介さず、unl-server とデータベースのみで補完候補が表示されています。現在は以下の型推論に対応しています。
- シンプルな変数宣言
autoを使った宣言の解決TObjectPtr<T>などのテンプレート(T)の解釈- 'Get/Set' などの関数の戻り値
仕組みの裏側
補完が呼ばれた際、現在のバッファとカーソル位置を unl-server に送信します。サーバー側が「どのクラスのメンバを表示すべきか」を推論し、その候補を MessagePack-RPC でNeovimへ投げ返します。
現在は自作の taku25/blink-cmp-unreal で動作を確認していますが、主要ロジックはすべてサーバー側にあるため、他の補完プラグインへの対応も容易な設計にしています。
❤️ コミュニティへの感謝
最近ではプルリクエストをいただく機会も増え、開発者として本当に嬉しい限りです。
特に、notfound4 さん、素晴らしいコントリビュートをありがとうございます!
スターや追加機能の提案は、開発の大きな励みになります。これからも「UE開発をNeovimで完結させる」夢に向かって突き進みます。
