ReSharper C++ 2023.3 の新機能

ReSharper C++ 2023.3 に、新しい組み込みの文法スペルチェッカー、非アクティブコードのコード補完と使用箇所の検索、C、C++、HLSL のサポートの更新などが導入されました。 ReSharper C++ 2023.3 リリースでは JetBrains AI Assistant への大規模な更新による強化も行われています。

ダウンロード

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

AI Assistant のプレビューが終了しました 一般公開

生産性を向上させる多数の新機能と改善が盛り込まれた JetBrains AI Assistant が一般公開されました。 最新の改善点には、AI アクションとプロンプトライブラリのプロジェクト認識の改善も含まれています。

ReSharper C++ の AI Assistant は JetBrains AI Service サブスクリプションをご利用の場合に追加機能として使用できます。

HLSL および Unreal Engine 関連の更新

HLSL 2021 では C++ のようなテンプレート関数とデータ型が導入されました。 ReSharper C++ の最新アップデートでは、HLSL テンプレートが完全にサポートされるようになりました。

ReSharper C++ 2023.3 では HLSL 組み込みの RayQuery 型がサポートされるようになり、対応するフラグを提案するためのコード補完が強化されています。

新しいインスペクションは AddDynamic ヘルパーマクロのよくある落とし穴を回避するのに役立ちます。 動的なデリゲート関数に UFUNCTION マクロが指定されていない場合、警告が表示されます。

気が付けばボイラープレートコードを書いていることがある場合は、Alt+Insert ショートカットで自動的に共通の型メンバーを生成できることを覚えておきましょう。 ReSharper C++ 2023.3 では、ハッシュ関数の生成を Unreal Engine の規則に従うように調整しました。

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

C および C++ のサポート

特定の属性が現在の標準またはコンパイラーバージョンで使用可能かどうかを確認する必要がある場合は、C++20 の機能テストが役に立ちます。 プリプロセッサの条件で __has_cpp_attribute(operand) を使用すると、コンパイラーがそのオペランドが参照している属性を認識するかどうかをテストできます。 ReSharper C++__has_cpp_attribute を正しく処理し、 C++ 標準ライブラリの属性アノテーションがより適切にサポートされるようになりました。

__pragma キーワードを含む pack プラグマをサポートするようにしました。 マクロ定義内では #pragma ディレクティブを使用できないため、マクロ定義内で __pragma (pack) 構文が使用されることがあります。 このような場合に信頼できるコード解析の結果を得られるよう、ReSharper C++ がパックされた構造のサイズを正しく計算するようになりました。

ReSharper C++ がいくつかの C の機能をサポートするようになりました。

  • ポインター宣言で使用できる C99 restrict 型修飾子。
  • C23 の型推定、constexpr、および nullptr

また、__is_const()__is_member_pointer() などのいくつかの新しい clang 組み込み関数のサポートを開始し、ReSharper C++ がクロスプラットフォームコードでより適切に扱えるようにしました。

クロスプラットフォームの C と C++ の開発を行う場合は、スタンドアロンの CLion Nova IDE の早期プレビューをお試しいただけます。 同製品は ReSharper C++ を使用しており、現段階では完全に無料でご利用いただけます。登録を済ませ、コーディングを開始し、フィードバックをお寄せください!

文法とスペルのチェック

JetBrains Grazie が ReSharper の新しい組み込み文法・スペルチェッカーになりました。 Grazie は 20 言語以上に対応しており、ReSharper(C#、C++、VB.NET)がサポートするプログラミング言語、マークアップ言語(HTML、XML、XAML)、およびコメント内にある自然言語の誤りを検出します。 他の自然言語を Grazie に追加するには、ReSharper の Options(オプション)| Grammar and Spelling(文法とスペル)| General(一般) を開いてください。

なお、現時点では doxygen コメントの文法チェックには対応していません。ご注意ください。

非アクティブなコードの操作

プラットフォーム固有または構成固有のコードでは、いつの間にか条件付きプリプロセッサ分岐内にある現在非アクティブなコードブロックを編集していることもしばしばです。 従来、非アクティブコードのコード補完はマクロにしか対応していませんでした。 ReSharper C++ 2023.3 では、このようなシナリオでのコード補完を改善し、グローバルスコープのシンボルも含めるようにしました。

Find Usages(使用箇所の検索)が非アクティブなコードとマクロ本体に含まれていると思われる使用箇所を検出するようになりました。 従来はこのような使用箇所を検索する場合、Find Usages Advanced(詳細な使用箇所の検索)を使ってテキストの出現箇所を調べる必要がありました。 このリリースでは、Find Usages(使用箇所の検索)の結果にマクロ品対と非アクティブなコードがデフォルトで含まれるようになっています。 このような使用箇所は個別のセクションにグループ化され、アクティブなコードの使用箇所とは区別されるようになっています。

コード解析

ReSharper 固有の C++ 属性を使用すると、ReSharper でより高い精度とインサイトでソリューションを解析できます。 ReSharper C++ 2023.3 では、既存の [[jetbrains::format]][[jetbrains::guard]]、および [[jetbrains::has_side_effects]] 属性に対して [[rscpp::...]] の他に [[jetbrains::...]] 接頭辞が追加されています。

新しい [[jetbrains::pass_by_value]] 属性では、関数パラメーターの Pass value by const reference(const 参照で値を渡す)インスペクションを抑止できます。 詳細をご覧ください

C++20 モジュールでの不正な export キーワードの使用に対応する一連のインスペクションを導入しました。 宣言がすでに別の export 宣言に囲まれているか、宣言がモジュールインターフェースユニットの一部でないためにエクスポートできない場合、ReSharper C++ が export の除去を提案するようになりました。 また、テンプレート宣言をエクスポートする代わりに export 宣言をテンプレート化しようとしている場合には export の移動が提案されます。

バンドルの Cling-Tidy バイナリを Clang 17 にアップグレードし、最新の LLVM リリースに含まれている更新を取り込みました。

一部の Clang-Tigy チェックは警告文と共に詳細な情報を出力します。 ReSharper C++ がこのような補足情報をツールチップに表示するようになりました。

新しいインスペクションは複数の文字リテラルが使用されていることを警告します。 このような文字列リテラルは実装によって決まる値によって条件付きでサポートされるものであるため、移植可能なコードでは十分な注意が必要です。

ReSharper C++ が冗長な条件演算子を除去して三項条件式を単純化するクイックフィックスを提案するようになりました。

コーディング支援

Alt+Insert Generate(生成)メニューを使用すると、ボイラープレートコードを素早く作成できます。 ReSharper C++ 2023.3 ではリストに新しいアクションを追加し、デストラクターを生成できるようにしました。

このアクションをポリモーフィッククラスで呼び出すと、構文スタイルの設定を使用して必要な virtual 指定子や override 指定子が挿入されます。 生成されるデストラクターの本体のスタイルは、Code Editing(コード編集)| C++ | Code Generation(コード生成)オプションページで構成できます。

#pragma region および #pragma endregion ディレクティブでは、折りたたみ可能なコードブロックを指定できます。 その他のペアになっているディレクティブと同様に、#pragma ディレクティブまたはリージョン名を含む新しいインレイヒントに対して Go to Declaration(宣言に移動)を使用して 2 つの間を移動できるようになっています。

さらに、File Structure(ファイル構造)ウィンドウではリージョンを折りたたんだり、対応するコードブロックに移動したりできるようになりました。

C のコードでは関数が引数を一切取らないことを示すため、関数のパラメーターリストに void を使用する必要があります。 Extract method(メソッドの抽出)または Change signature(シグネチャーの変更)リファクタリングが呼び出される際、関数の定義を生成する際、または使用箇所から新しい関数を作成する際に ReSharper C++void を保持するようになりました。

参照のインレイヒントに独立した [>>] テキストが追加され、転送参照を一目で発見できるようになりました。

新しい Generate inline definitions(インライン定義の生成)アクションでは複数の関数本体を同時に素早く生成できます。 既存の Generate definitions(定義の生成)と同様に、新しいアクションは、クラス名または複数の関数宣言がエディター内で選択されている場合に使用できます。

ネストした式で Introduce variable(変数の導入)または Introduce field(フィールドの導入)リファクタリングを呼び出した際、ReSharper C++ に一番外側の式を自動的に使用させずに自分でターゲット式を明示的に選択できるようになりました。

コードナビゲーションのエクスペリエンスを改善するため、マクロ置換に由来するシンボルが Go to(移動)とFile Structure(ファイルの構造)ウィンドウで非表示になりました。 これは一般的なユニットテストフレームワークのテストケースの宣言など、展開中に多数の補助シンボルを導入するマクロで役立ちます。

コードの整形

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

  • 後続の戻り値の型での -> の前の改行。
  • 後続の戻り値の型での -> の後の改行。
  • 空ブロック内のスペース。
  • { の後のコメントの許可。

また、バンドルの clang-format のバイナリを Clang 17 にアップグレードし、.clang-format 構成からフォーマッター設定をインポートする際と組み込みフォーマッターの代わりに clang-format を使う際の InsertNewlineAtEOF clang-format 設定をサポートするようにしました。

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

ダウンロード

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