NeovimでのUE開発をさらに快適に!LSPを補うblink.cmp用Unreal Engine補完ソースを作ったお話し
相も変わらず、neovimでUEの開発を楽にするためにプラグインを作っています。(そろそろ本来の目的である「UEで何かを作る」ことから離れている気もしますが…)
今回は、強力な補完プラグイン blink.cmp で利用できる、Unreal Engine専用のカスタム補完ソース blink-cmp-unreal を作成しましたので、ご紹介します。
LSPだけでは補完しきれないUEマクロの壁
Unreal Engineには、UCLASS, UPROPERTY, UFUNCTIONといった特殊なマクロや、その中で使われるBlueprintReadWrite, Blueprintable, metaなどの無数の指定子が存在します。
通常、.hファイルの先頭で#include "CoreMinimal.h"などを書いておけば、LSPがある程度これらを解釈してくれますが、どうしても定義までは追い切れず、補完候補として表示されないケースが多々あります。
この「あと一歩」を埋め、LSPでは補完が難しいUE固有のキーワードを快適に入力できるようにするのが、今回作成したblink-cmp-unrealです。
インストールと基本的な使い方
lazy.nvim をお使いの場合、以下のように設定します。
return {
{
"Saghen/blink.cmp",
dependencies = {
-- 依存関係に blink-cmp-unreal を追加
{ "taku25/blink-cmp-unreal" },
},
opts = {
sources = {
-- "unreal" ソースを有効化
default = { "lsp", "buffer", "path", "unreal" },
providers = {
unreal = {
module = "blink-cmp-unreal",
name = "unreal",
-- 必要に応じてスコアを調整し、LSPより優先的に表示させる
score_offset = 15,
},
},
},
--... その他の blink.cmp の設定
},
},
}
基本的にはこれだけで、UCLASS()の中などでUEマクロの指定子が補完されるようになります。
柔軟なカスタマイズオプション
LSPによる補完と重複する場合など、不要な補完グループは個別に無効化できます。
providers.unrealのoptsに以下のようなオプションを設定してください。
| オプション | デフォルト値 | 説明 |
|---|---|---|
enable_uclass |
true |
UCLASS 指定子の補完を有効にします。 |
enable_uproperty |
true |
UPROPERTY 指定子の補完を有効にします。 |
enable_ufunction |
true |
UFUNCTION 指定子の補完を有効にします。 |
enable_ustruct |
true |
USTRUCT 指定子の補完を有効にします。 |
enable_uenum |
true |
UENUM 指定子の補完を有効にします。 |
enable_uinterface |
true |
UINTERFACE 指定子の補完を有効にします。 |
enable_meta_specifiers |
true |
meta 指定子内で使われるキーワード (DisplayNameなど) の補完を有効にします。 |
enable_delegate_macros |
true |
DECLARE_DELEGATE などのデリゲート関連マクロの補完を有効にします。 |
enable_module_macros |
true |
IMPLEMENT_MODULE などのモジュール関連マクロの補完を有効にします。 |
enable_log_levels |
true |
UE_LOG で使用されるログレベル (Log, Warningなど) の補完を有効にします。 |
enable_slate_macros |
true |
Slate UIフレームワーク関連のマクロ (SLATE_BEGIN_ARGSなど) の補完を有効にします。 |
まとめと今後の展望
これで、これまで作ってきたプラグインと合わせて、UEの開発に必要な ビルド、クラス作成、ファイル検索、ログ、補完、ハイライト といった要素が一通りNeovim上で揃ってきたように思います。
もちろん、Riderなどの高機能なIDEにある「特定のC++クラスがどのBlueprintで親として使われているか」といった高度な情報を表示する機能はまだありません。ただ、そのあたりはバイナリ解析などが必要になる予感がしており、実現のハードルはかなり高そうです。
それよりも、現状は手元にWindows環境しかないので、まずはMacとLinuxでもこれらのプラグインがきちんと動作するように対応を進めていきたいという気持ちの方が強いです。
この記事が、NeovimでUnreal Engine開発に挑む方々の助けになれば幸いです。
