ReSharper C++ 2023.2 の新機能

ReSharper C++ 2023.2 にはソースコードからシンボルを安全に除去できる Safe Delete(安全な削除)リファクタリングが導入されています。 モダンな C++ プロジェクトに対応できるよう、C++23 の標準ライブラリモジュールを含む複数の C++20 と C++23 の新機能がサポートされています。 このバージョンにはプログラミング業務を支援するように特別に設計された ReSharper AI Assistant も搭載されています。

ダウンロード

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

AI Assistant 限定アクセス

AI Assistant は ReSharper にバンドルされていないため、別途インストールする必要があります。 当面の間、AI Assistant 機能を利用するには順番待ちリストに登録する必要があります。

AI Assistant に関する詳細と Toolbox App または dotUltimate インストーラーを使用したインストール方法については、ウェブヘルプをご覧ください。

ReSharper C++ 2023.2 では ReSharper AI Assistant が導入されています。この AI が搭載されたチャットは、プログラミングの質問に回答し、トラブルシューティング、リファクタリング、ドキュメント作成、およびその他の開発ワークフローを支援するように特別に設計されています。

ReSharper の AI Assistant はプロジェクトで使用されている言語とテクノロジーを考慮します。 コンテキストを認識してすぐに回答を調整するため、時間と労力を節約できます。

質問にはソースコードの一部を自由に含めることができます。 ReSharper が送信またはチャットに貼り付けたコードを検出して適切に整形する一方で、AI モデルはコードのロジックを説明してリファクタリング、問題の発見、またはドキュメント作成を支援します。

C++23 のサポート

if consteval ステートメントは C++23 の新しい定数評価機能で、C++20 の constevalstd::is_constant_evaluated() のアイデアをさらに発展させたものです。 if consteval ステートメントの評価が定数の評価中に発生する場合は後続の複合ステートメントが実行されます。 そうでない場合は else 分岐が実行されます。

ReSharper C++if consteval がサポートされるようになり、以下の関連するインスペクション一式が追加されています。

  • consteval if は常に定数です。
  • std::is_constant_evaluated は常に定数に評価されます。
  • ifif consteval に置換できます。

ReSharper C++ が C++23 の標準ライブラリで導入された名前付きモジュールの std および std.compat をサポートするようになりました。 Visual Studio 17.6 以降を使用している場合、プリコンパイル済みヘッダーを使用するか、特定の標準ライブラリヘッダーを含める代わりに import std または import std.compat を使用して標準ライブラリ全体をインポートできるようになりました。

C++23 より前のバージョンでは、すべての演算子を非 static メンバー関数にする必要がありました。 しかし、呼び出し演算子はメンバーのない関数オブジェクトと一緒に使用されることが多く、演算子を static にできるとコードの効率が高まる可能性があります。 C++23 では operator()operator[] の両方を static にできます。

C++20のサポート

JetBrains は継続的に C++ 20 モジュールのサポートを改善しており、モジュールを使用する実際のプロジェクトで発生する各種の厄介な問題を解決しています。 ReSharper C++ では、モジュールを内部的に処理する際に到達不可能な宣言の破棄が実装され、グローバルモジュールフラグメントに大量のヘッダーを含むモジュールでのパフォーマンスが大幅に改善しています。

さらに、CMake プロジェクトでのモジュールのサポートを改善するためにいくつかの変更を加えています。 ReSharper C++.cppm ファイルをモジュールインターフェースとして認識し、プロジェクトフォルダーの外側にあるモジュールを実験的にサポートするようになりました。

C++20 の新しい [[no_unique_address]] 属性は、一意のアドレスがクラスの非 static データメンバーに不要であることを示し、コンパイラーがより効率的な方法でクラスのメンバーを配置できるようにするものです。 ReSharper C++ がオブジェクトのサイズを計算する際に [[no_unique_address]] を考慮するようになりました。

ReSharper C++ 2023.2 は最近受理された C++20 の不具合報告にも対応しており、UTF-8 文字列リテラルを使用して char または unsigned char 配列を初期化できます。

Safe Delete(安全な削除)リファクタリング

ReSharper C++ にはソースコードからシンボルを安全に除去できる Safe Delete(安全な削除)リファクタリングが導入されています。 このリファクタリングはクラス、関数、変数、列挙子、名前空間に加えて、概念にも使用できます。

このリファクタリングを呼び出すには、削除するシンボルにキャレットを合わせて Alt+Del を押すか、Refactor This(リファクタリング)メニューから Safe Delete(安全な削除)を選択します。

ReSharper C++ ではシンボルを削除する前にそのシンボルの使用箇所を検索してソースコードへの変更をプレビューできるため、意図したとおりに確実にすべてを除去できます。 クラスや名前空間などの複雑なエンティティを削除しようとする場合、ReSharper C++ はそのすべてのメンバーの使用箇所を再帰的に確認します。

Unreal Engine

このリリースでは、ブループリントのインデックス作成パフォーマンスが改善されています。 初めてプロジェクトを開く際、ReSharper C++Find Usages(使用箇所の検索)などの機能を使用できるようにすべてのブループリントアセットに対してインデックスを作成し、シリアル化されたデータ値をテキストエディターに直接表示します。

これまでの ReSharper C++ は C++ コードと同じ優先順位でこれらのアセットのインデックスを作成していたため、プロジェクトの準備が完了するまでにより多くの時間がかかっていました。 ReSharper C++ 2023.2 は C++ コードのインデックスを作成した後、作業の妨げにならないようにバックグラウンドでアセットのインデックスを作成します。

標準の代入セマンティクスを使用したラッパー型のスマート補完を改善しました。 たとえば TEnumAsByte 型の変数に割り当てる場合、補完は基になる列挙型の列挙子を提案します。

Unreal Engine 5.1 プロジェクトに対応するため、UE_INLINE_GENERATED_CPP_BY_NAME マクロをサポートするようにしました。これにより、生成ファイルをモジュールにインライン化してコンパイル時間を改善できます。

コーディング支援

依存コードの補完が改善されたため、概念またはトレイトによって型が制限されている場合に補完項目を取得できるようになります。 ReSharper C++ が標準の std::is_same/std::is_base_of 型特性、その値のエイリアスである _v、対応する std::same_as/std::derived_from 概念、Unreal Engine の TIsSame トレイトを考慮するようになりました。

より効果的なコード補完を提案できるよう、ReSharper C++requires 句、if constexpr、および SFINAE からも型と値の要件を抽出するようになりました。

テンプレートパラメーター制約を requires 句に移動させ、requires 句をテンプレートパラメーター制約に変換できる 2 つの補完的なコンテキストアクションが追加されています。

再帰呼び出しがある場合、ReSharper C++ はガターでそれをマークしてより分かりやすくします。

コード補完リストで予約された識別子を除外し、_ の後でのみ提案するようにしました。 そのため、必要でない限りは標準ライブラリからの候補をスクロールする必要がなくなりました。

ReSharper C++ 2023.1 では、ホバー時の Quick Documentation(クイックドキュメント)ポップアップとツールチップのマクロ置換に適切なハイライトと整形が導入されました。 2023.2 のリリースでは、これらの改善がコード補完内のマクロ定義と Parameter Info(パラメーター情報)にも反映されます。

評価エンジンを改善し、constexpr 配列の集約初期化をサポートするようにしました。

GCC および Clang コンパイラーと libc++/libstdc++ 標準ライブラリとの互換性を改善しました。 この改善には __integer_pack__is_convertible/__is_nothrow_convertible などのより多くの組み込み関数に対するサポートのほか、以前にサポートされていた組み込み関数向けの更新が含まれます。

Doxygen param コマンドの [in][in,out]、または [out] 属性を使用してパラメーターの方向を指定する際、ツールチップがコメントからそれらを取得するようになりました。

コード解析

ReSharper C++ 2023.2 には演算子の冗長な逆参照とアドレスを検出する新しいインスペクションが追加されています。 メンバーアクセスを単純化して冗長な演算子を除去するいくつかのクイックフィックスが提供されています。

もう 1 つの新しいインスペクションは、対応するデフォルトのテンプレート引数に一致しているために省略できる冗長なテンプレート引数をハイライトするものです。

新しい互換性インスペクションは、基になる型がない C 形式の列挙型の事前宣言について警告します。このような宣言は C++ 標準によって禁止されているにもかかわらず MSVC では許容されているため、コードが移植できない可能性があります。

ReSharper C++ が重要度レベルに応じて #error および #warning 診断プリプロセッサディレクティブをハイライトするようになりました。

また、バンドルの clang-tidy バイナリを Clang 16 にアップデートして新しいチェックと修正の機能を提供しています。

MSVC は /Zc:preprocessor コンパイラー引数の値に応じて従来のプリプロセッサか新しい標準に準拠したプリプロセッサのいずれかを使用できます。 ReSharper C++ がプロジェクトプロパティからこの引数の値を読み取り、それに応じてビルトインのプリプロセッサの動作を調整するようになりました。

ナビゲーション

ReSharper C++ 2023.2 では Go to declaration(宣言に移動)に複数の改善が行われており、余分なステップがない、より一貫性のある単純明快なコードナビゲーションを実現しています。

  • Go to declaration(宣言に移動)をコンストラクター呼び出し内のクラス名に対して呼び出した場合、含んでいるクラスの代わりにコンストラクターに移動するようになりました。
  • Go to declaration(宣言に移動)がすべての宣言を含むメニューを表示する代わりに最初の typedef または型エイリアス宣言に移動するようになりました。
  • モジュール名に対して Go to declaration(宣言に移動)を呼び出すと、同じモジュールの場合はインターフェースと実装との間を移動します。
  • #include パス内にあるフォルダーに対して Go to declaration(宣言に移動)を呼び出すと、そのフォルダーが開きます。

さらに、Type of symbol(シンボルの型)が宣言子でないシンボルに対応しました。 その仕組みは Go to declaration(宣言に移動)と同様です。

整形と入力の支援

ドキュメントコメントを生成する際、ReSharper C++ がエディターのコメントスタイルに応じてドキュメントテンプレートを調整するようになりました。 /** の場合は入力支援によってコメントが /** */ 形式で生成され、/// の場合はコメントが /// 形式になります。

このリリースでは、ビットフィールドメンバーの整形についていくつかの改善が行われています。 イニシャライザーと宣言名の水平位置を合わせるオプションでビットフィールドがサポートされるようになりました。 ビットフィールド宣言のコロンの前後にあるスペースと、ビットフィールドサイズの水平位置合わせに対応した 2 つの新しい整形設定もあります。

新しい入力支援オプションでは、Visual Studio のビルトインジェネレーターとの競合を避けるためにドキュメントコメントの生成をオフにすることができます。このオプションは「ReSharper | Options | Environment | Editor | Behavior | C++, C, HLSL | Generate documentation comments」(ReSharper | オプション | 環境 | エディター | 動作 | C++、C、HLSL | ドキュメントコメントの生成)からアクセスできます。

バンドルの clang-format バイナリも更新し、ファイル末尾の改行を除去しないように clang-format エンジンを修正しました。

このリリースで導入されたその他の変更点については ReSharper の新機能をご覧ください。 たとえば、実際にプログラムを実行せずに、実行によって発生しうるすべての状態を予測する予測デバッガーが ReSharper に導入されています。

ダウンロード

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