マクロ置換プレビュー

マクロにカーソルを合わせると、ツールチップに完全な構文ハイライトと適切なコード書式が適用された状態で、マクロ展開のプレビューが表示されるようになりました。 Substitute macro call(マクロ呼び出しの置き換え)コンテキストアクションを使用してエディターに直接展開することもできますが、即時プレビューであればマクロの扱いがより楽になります。

Quick Documentation(クイックドキュメント)ポップアップ(Ctrl+Shift+F1)では、置換プレビューからエンティティをクリックして対応するドキュメントを確認することもできます。 マクロ展開に不明な識別子が含まれている場合は、ホバー時のツールチップと Quick Documentation(クイックドキュメント)ポップアップの両方の置換プレビューでその識別子が強調表示されるため、問題を発見しやすくなっています。

C++20 モジュール

ReSharper C++ 2022.3 では C++20 モジュールの初期サポートを導入しました。 このアップデートでは、より多くのコーナーケースを処理し、モジュールを使用する実際のプロジェクトを適切にサポートするための実装をさらに強化しています。 モジュール化されているコードの記述に役立つ ReSharper C++ の機能も拡充しました。

Find usages(使用箇所の検索)では、指定したモジュールがインポートされているすべての場所を検出できるようになりました。

Rename(名前の変更)リファクタリングにより、モジュールとモジュールパーティションの名前を安全に変更し、コード内のすべての関連する宣言とインポートを更新できます。

コード補完による C++20 モジュール構文のサポートが改善されています。 モジュールを import しようとすると既知のモジュール名が提案され、補完リストに使用可能なモジュール関連のキーワードも表示されます。

C++20 モジュールをサポートするいくつかのコーディング支援機能も更新しました。 コードフォーマッターと Rearrange code(コードの再配置)が export ブロックとエクスポートされたエンティティを処理するようになりました。 コード要素を並べ替えるには、コード要素にキャレットを置くか、コードを選択して Ctrl+Shift+Alt を押してから対応する方向キーを押します。

C++23 のサポート

ISO C++ 標準化委員会は C++23 に関する技術的な取り組みを最近完了しました。 多くの C++23 の機能はすでに主要なコンパイラーで使用可能ですので、ReSharper C++ 2023.1 でぜひお試しください。

Deducing this は重要な C++23 の機能で、新しいメンバー関数の指定方法を導入するものです。 this キーワードを使用してオブジェクトパラメーターを明示的にして、いくつかの C++ イディオムの実装を単純化できるようになりました。 たとえば、const と参照修飾子のみが異なる同じ関数オーバーロードをオブジェクトパラメーターの型と値カテゴリを推論する 1 つの関数に置換できるようになりました。

C++23 では auto を使用する方法の選択肢が増えました。 auto(x)auto{x} を使用すると、引数を関数の引数として値渡しされたかのようにコピーできます。

ReSharper C++ は既存の言語構文を合理化する次の C++23 の更新もサポートします。

  • ラムダ式の空の丸括弧 () が多くの場合にオプションになりました。
  • エイリアス宣言を init ステートメントで宣言できるようになりました。
  • ラベルを複合ステートメントの終わりで使用できるようになりました。

Unreal Engine

新しいビルトインファイルテンプレートを使用して、単純または複雑な Unreal Engine テストをすばやく追加できるようになりました。 Solution Explorer(ソリューションエクスプローラー)に移動し、希望するプロジェクトフォルダーを右クリックして Add(追加)メニューを開きます(または Ctrl+Alt+Insert を使用します)。

ReSharper C++ は新しい UINTERFACE ライブテンプレートも提供しており、既存の UCLASSUSTRUCT、および UENUM テンプレートを補完します。 Unreal Engine プロジェクトで作業する際に新しいインターフェースクラスを追加するには、コード補完リストで対応する項目を選択するだけです。

シェーダーファイルの #include ディレクティブを解決するために使用されるソースディレクトリマッピングを指定できるようになりました。 ゲームまたはエンジンプロジェクトに RiderLink がインストールされている場合、Unreal Engine から直接シェーダーマッピングをロードすることもできます。

新しい補完項目では、デリゲート、TFunction、または TFunctionRef 引数が必要なラムダ式を生成できます。

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

呼び出しトラッキング

ReSharper の Call tracking(呼び出しトラッキング)がついに ReSharper C++ に登場しました! 内向きの呼び出しの階層で呼び出しチェーンを表示したり、複数の呼び出しチェーンの間を移動したりできるようになりました。 関数にキャレットを配置してコンテキストメニューから Inspect | Incoming calls(内向きの呼び出し) を選択するか、Ctrl+Shift+Alt+A を押して Inspect This(インスペクション)メニューから呼び出します。

呼び出しトラッキングの結果ウィンドウでは、階層エントリをダブルクリックしてエディター内の対応する呼び出しに移動したり、ノードを展開して内向きの呼び出しをチェックしたりできます。

外向きの呼び出しトラッキングは現時点ではサポートされていません。

コード解析

値で渡されているコピーコストが高い型の関数パラメーターを警告するインスペクションを導入しました。 このような場合、ReSharper C++const 参照でパラメーターを渡すことを代わりに提案します。 一方、Create function from usage(使用箇所から関数を作成)クイックフィックスは、コピーコストの低い型のパラメーターを値で渡すことを優先します。

次の新しいコードインスペクションは潜在的なコードの臭いについて警告します。

  • あるインスペクションは、ローカルスコープにある未使用のテンプレートパラメーターと型エイリアスに加えて、冗長な基底クラスイニシャライザーを発見します。
  • 別のインスペクションは HRESULT または NTSTATUS エラーコードを返す関数の未使用の戻り値を警告します。

もう 1 つのインスペクションは C++17 クラスのテンプレート引数推論がテンプレート引数の推論に失敗した場合に報告するものです。これにより、クイックフィックスで必要な引数をすばやく追加することができます。

ReSharper C++ 2023.1 には、ループの範囲ベースの評価や共用体のサポート強化など、コンパイル時の評価エンジンへの改善も数多く含まれています。

リファクタリング

専用の Refactor This(リファクタリング)ポップアップ(Ctrl+Shift+R)に加えて、Alt+Enter メニューからほとんどのリファクタリングに簡単にアクセスできるようになりました。

新しい Create parameter(パラメーターの作成)クイックフィックスは Change signature(シグネチャーの変更)リファクタリングへの便利なショートカットを提供します。 含んでいる関数に新しいパラメーターを追加する必要がある場合は、クイックフィックスを呼び出して新しいパラメーターの型を入力するだけです。 リファクタリングによってすべての関数宣言と使用箇所が更新され、競合に関する通知が表示されます。

Extract method(メソッドの抽出)および Change signature(シグネチャーの変更)リファクタリングをより単純明快に呼び出せるようになりました。

  • 1 行の関数を抽出する必要がある場合、リファクタリングが有効な選択範囲がない場合に現在の行を抽出するようになったため、行全体を選択する必要がなくなりました。
  • キャレットが関数のシグネチャーのどこかにあれば Change signature(シグネチャーの変更)を呼び出せるようになりました。これまではキャレットが関数の名前にある場合にしか呼び出せませんでした。

その他の機能強化

ReSharper C++__VA_OPT__ マクロをサポートするようになりました。これは C++20 で導入されたマクロで、可変個引数のマクロを定義するのに役立ちます。 この特殊な機能を持つマクロは変数引数リストが空ではない場合は引数に、それ以外の場合は空に展開されます。

デフォルトでは、 #include ディレクティブを並べ替える際にはファイルパスがフォルダーの前に配置されます。 すべてのインクルードをアルファベット順にしたい場合、新しい Put files before folders(フォルダーの前にファイルを置く)オプションを無効にできるようになりました。

新しい後置テンプレートを使用すると、Unreal Engine プロジェクトで std::as_const または AsConst による const 参照をすばやく作成できます。

/* で始まるコメントがデフォルトで */ により自動的に閉じられなくなりました。 新しい Insert */ after /*(/* の後に */ を挿入)入力支援オプションを使用すると、コメント終了の自動挿入を有効にできます。

このリリースで導入されたその他の変更点については、「ReSharper の新機能」をご覧ください。 たとえば、CSS のサポートがデフォルトで無効になりました。