ReSharper C++ 2024.1 の新機能

ReSharper C++ 2024.1 では C++20 モジュールのサポートが改善され、Call Tracking(呼び出しトラッキング)に外向きの呼び出しが実装されています。 コーディング支援の強化により、Change Signature(シグネチャーの変更)リファクタリングが改善され、ドキュメントコメントのサポートの更新などが行われています。 ReSharper C++ 2024.1 では Unreal Engine 開発者向けに Slate UI フレームワークのサポートと C++ コードでのアセットパスの補完が提供されています。

ダウンロード

無料 30 日間体験版をご利用可能です

C++20 モジュールのサポート

モジュール検出のプロセスが更新されたことで、ReSharper C++ が内部パーティションユニットをサポートするようになりました。これはモジュールの外部インターフェースに貢献しないモジュールパーティションユニットですが、 export module 宣言が関連付けられていないモジュールパーティションであるとも言えます。

エクスポートされた C++20 モジュールの内部表現を改良し、他のモジュールからインポートされたエンティティへの推移的な参照を容易にしました。 従来、これらのエンティティはインポート元のモジュールから再エクスポートされていました。 この変更によってエクスポートされるモジュールのフットプリントが大幅に減少し、C++20 モジュールを利用するプロジェクトのパフォーマンスが改善されることを期待しています。

Unreal Engine

ReSharper C++ 2024.1 では Unreal Engine の Slate UI フレームワークがサポートされるようになりました。 ReSharper のコードフォーマッターと入力支援を使用することで、Unreal Engine の規則に従って Slate コードを整形できます。 Go to declaration(宣言に移動)、Find Usages(使用箇所の検索)、Rename(名前の変更)などの機能も Slate の宣言構文を理解するように更新されています。

ReSharper C++ はブループリント機能との統合により、UENUM インスタンスの名前を変更する際の Core Redirects の追加や C++ コードのリソース名に対するアセットパスの補完を引き続きサポートしています。

シェーダーコードで動的シェーダーのリンクに使用される HLSL インターフェースがサポートされるようになりました。

Unreal Engine 開発向けのスタンドアロン型クロスプラットフォーム IDE にご興味がありましたら、Rider をぜひご検討ください。 Rider と ReSharper C++ での Unreal Engine のサポートは同等であるため、Rider 2024.1 アップデートと同じ改善を期待できます。

Call Tracking(呼び出しトラッキング)の外向きの呼び出し

ReSharper の Call Tracking(呼び出しトラッキング)が従来の内向きの呼び出しのトラッキングだけでなく、外向きの C++ 呼び出しチェーン内の移動操作をサポートするようになりました。 外向きの呼び出しを調べるには、任意の関数にキャレットを置き、コンテキストメニューから Inspect(検査)| Outgoing calls(外向きの呼び出し)を選択します。 または、Ctrl+Shift+Alt+A を押して Inspect This(検査)メニューから呼び出すことも可能です。

Change Signature(シグネチャーの変更)の改善

Change Signature(シグネチャーの変更)で関数パラメーターの型をポインター、参照、または値に簡単に変更できるようになりました。 ReSharper は関数本体内のパラメーターの使用箇所の更新と関数呼び出しサイトでの関数引数の調整を自動的に行い、必要に応じて逆参照または address-of 演算子を追加します。

依存するコードで使用されている可能性のある関数で Change Signature(シグネチャーの変更)を呼び出した際、リファクタリング中に変更内容を確認し、更新が必要な使用箇所を確定できるようになりました。

Change Signature(シグネチャーの変更)を使って追加された新しい関数パラメーターのデフォルトの引数を指定することも可能です。

Change Signature(シグネチャーの変更)には他にも以下のような重要な更新があります。

  • 可変引数関数テンプレートの処理を改善しました。
  • マクロ呼び出し内での呼び出しサイトの関数引数を正しく更新するようにしました。
  • Change Signature(シグネチャーの変更)で配列型と unsigned int 型の int 型指定子が保持されるようになりました。

ドキュメントコメント

生成されたドキュメントコメントのスタイルをライブテンプレートを編集せずにカスタマイズできるようになりました。 ドキュメントコメントのスタイルを構成するには、ReSharper の Settings(設定)| Code editing(コード編集)| C++ | Code generation(コード生成)に移動します。

JetBrains Grazie は ReSharper 2023.3 で ReSharper に組み込まれた新しい文法およびスペルチェッカーです。 2024.1 リリースでは、Grazie を使った文法インスペクションを C++ ドキュメントコメント内でも使用できるようになりました。

Change Signature(シグネチャーの変更)リファクタリングで @param コマンドが関数パラメーターのリストに同期されるようになりました。 このリファクタリングは、除去されたパラメーターの @param コマンドを削除し、新しいパラメーターのコマンドを追加し、含まれるパラメーターの新しい順序に合わせて既存のコマンドを再整理します。

コード解析

Richard Thomson 氏が整備している C++ リファクタリングツールに対する広範なテストスイートの最新結果によると、ReSharper C++ はほとんどのテストケースに合格しており、他のツールを圧倒し続けています。 JetBrains は ReSharper の補完品質を継続的に改善する取り組みの中で、Richard 氏のテストスイートで発見されたいくつかの問題を ReSharper C++ 2024.1 で解決しました。 たとえば、Create constructor from usage(使用箇所からコンストラクターを作成)クイックフィックスでは必要に応じてデフォルトのコンストラクターが追加されるようになっています。

ReSharper C++ 2024.1 では、集計の初期化で重複する慣用的なゼロイニシャライザーを除去することが提案されるようになりました。 いくつかの新しいインスペクションでは、static constexpr データメンバーに対する冗長な inline 指定子など、static データメンバーに関する複数の問題が検出されます。

コードのクリーンアップには、冗長なアクセシビリティ指定子を除去する項目と継承のないクラスを final にする項目が新たに追加されています。 Apply ‘auto’ style('auto' スタイルの適用)でローカル変数だけでなく、グローバル変数とクラスメンバーも処理されるようになりました。

これまでは特定のスコープでインスペクションを抑止する場合、ReSharper 固有の // ReSharper disable コマンドを使用することができました。 ReSharper C++ 2024.1 では clang-tidy が使用する NOLINTNOLINTNEXTLINE、および NOLINTBEGIN ... NOLINTEND コメントも認識されるようになりました。

コードの整形

ReSharper C++ 2024.1 ではいくつかの新しい整形オプションが導入されています。

  • Break line after goto labels(goto ラベルの後で改行する)および Indent goto labels(goto ラベルをインデントする)により、ラベル付きステートメントの整形が強化されています。
  • 列挙内の折り返しを制御する設定が Arrangement of enumerations(列挙の配置)に追加されました。
  • Empty braces formatting(空波括弧の整形)に、Do not change(変更しない)オプションが追加されました。

.clang-format 構成を使用する際、ReSharper のフォーマッターが DisableFormat および IndentAccessModifiers 設定を考慮するようになりました。 GNU の組み込み clang-format スタイルもサポートされるようになりました。

このリリースで導入されたその他の変更点については ReSharper の新機能をご覧ください。

ダウンロード

無料 30 日間体験版をご利用可能です