ReSharper C++の新機能

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 日間体験版をご利用可能です

ReSharper C++ 2023.3

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 の新機能をご覧ください。

ReSharper C++ 2023.2

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 に導入されています。