ReSharper C++の機能

ReSharper C++はC++開発者向けにオンザフライ分析、クイックフィックス、強力な検索とナビゲーション、スマートなコード補完、リファクタリング、様々なコード生成オプションなどの日々の生産性を向上させる機能を提供することで、Visual StudioをよりよいIDEにします。

コード解析

ReSharper C++は、Visual Studioエディタでプロジェクトを開くとすぐにコード解析を開始し、ファイルを編集するときにファイルの再解析を続け、さらにコンパイルする前にエラーや潜在的な問題を検出いたします。

クイックフィックス

40個以上のクイックフィックスを利用して、検出されたコードの問題の多くを即座に解決できます。 コードの左側に電球が表示されたら常に、Alt+Enterを押して提案されたクイックフィックスを適用できます。

例えば、初期化されていない変数が検出されたら、すぐにデフォルト値で初期化できます。 その他のクイックフィックスでは、欠けている#includeディレクティブを追加したり、特定のステートメント内、あるいはファイルやソリューション全体などのより大きなスコープ内の冗長な修飾子を削除したりできます。

ReSharper C++での出現箇所からのコード生成

使用箇所からの作成

クイックフィックスのもう1つの利点は、宣言する前にクラス、メソッド、変数、プロパティ、フィールドを使い始めることができるということです。 ReSharper C++が宣言されていないシンボルを検出すると、その使用箇所に基づいて対応するシンボル宣言を生成するためのクイックフィックスを提案いたします。

問題のあるコードの発見

問題のあるコードの発見

ファイル、プロジェクト、またはソリューションなどの任意のスコープに対して、ReSharper C++に、検出したすべてのコードの問題を専用のツールウィンドウに表示するように指示できます。

Find Code Issuesはバックグラウンドで動作するので、ReSharper C++が分析を実行しInspection Resultsツールウィンドウを生成する間、コードの編集や移動を続けられます。

解析結果が準備でき次第、さまざまな基準でそれらをグループ化して検索し、特定の種類の問題を見つけることができます。 Find Code Issues結果のレポートを保存したりロードしたりすることもできます。

コマンドラインから行うC++コード分析

コマンドラインからC++コード解析

また、ReSharper C++のコードインスペクションは、InspectCodeからも利用できます。これは無料のコマンドラインツールで、Visual Studioの外部でReSharperインスペクションを実行できるようにするものです。

InspectCodeを使用するには、コマンドラインツールのパッケージをダウンロードして解凍し、ソリューションファイルをパラメータとしてInspectCode.exeを実行してください。 InspectCodeの使い方の詳細については、こちらの記事をお読みください。

Clang-Tidy設定

Clang-Tidy

ReSharper C++は、Clangコンパイラを基にしたオープンソースの強力なコード分析ツールであるClang-Tidyとシームレスに統合されています。 この統合により、コード確認とクイックフィックスが提供されています。

構文スタイル

ReSharper C++ には、ReSharper を選択したコードスタイルに準拠させ、コードベース全体を通して適用させるための構文スタイル設定一式が含まれています。

構文スタイル

構文スタイルの設定は、Code Editing | C++ | Syntax Style ページで調整できます。 選択したオプションの値は、コード生成とコードスタイルの適用の両方に使用されます。

クイックフィックス

ReSharper C++ はスタイル違反をハイライトし、その解消を支援するクイックフィックスを提供します。 構文スタイルに関するすべてのクイックフィックスは、関数本文やクラス定義などのローカルスコープを含む指定のスコープで適用できます。

構文スタイルの適用

選択した構文スタイルを適用するには、コードのクリーンアップか専用の Apply Syntax Style(構文スタイルの適用)アクションを使用できます。後者は作業中のコンテキストに応じて、選択範囲、作業中のファイル全体、ファイル一式の構文スタイルに関する問題を解決します。

リファクタリング

ReSharper C++は、名前の変更、メソッドの抽出、シグニチャの変更など、本格的なリファクタリング機能を複数提供します。 また、ローカルのコード変換がショートカットひとつで利用可能なコンテキストアクションもご用意しています。

ReSharper C++の名前の変更リファクタリング

名前の変更

クラスやマクロの名前の変更を手動で行うと、たくさんの問題を引き起こすことがありますが、 Rename リファクタリングを呼び出すと、 ReSharper C++が必要なチェックをすべて行ってくれます。

変更をすべて自動的に実行するか、競合の一覧が表示され、これらを手動で解決し、必要で適切な変更のみを確実に行うこともできます。

適用する実際のコードシンボルに加えて、名前の変更リファクタリングは、関連ファイル(ソースファイルとヘッダーファイルの両方)およびコメントとドキュメントの関連テキストの名前を変更できるだけでなく、#includeディレクティブの使用箇所の更新もできます。

ReSharper C++のメソッドの抽出リファクタリング

Extract Method(メソッドの抽出)

Extract Methodリファクタリングは、選択したコードフラグメントに基づいて新しいメソッドを作成するのに役立ちます。 ReSharperは選択されたコードブロックを分析し、メソッドパラメータに変換できる変数を検知したり、戻り値を表す変数を検知したりします。

C++の署名の変更リファクタリング

署名の変更

Change Signatureを使用すると、関数のシグニチャに1つ以上の変更を適用できます。 それに応じて、関数のすべての使用箇所、実装、およびオーバーライドが更新されます。

C++の変数のインライン化リファクタリング

変数の導入と変数のインライン化

Introduce Variableリファクタリングを使用すると、選択した式に基づいて新しいローカル変数を作成し、それを式で初期化して、最後に、コード内の式のすべての出現箇所を新しく導入された変数への参照に置き換えることができます。

逆に、Inline Variableは、指定された変数またはローカル定数のすべての出現箇所をその初期化子に置き換えます。

ReSharper C++のフィールドの導入リファクタリング

フィールドの導入

フィールドの導入リファクタリングは、選択した式に基づいて新しいフィールドを作成し、独自の初期化子またはコンストラクタで元の式をフィールドに代入し、出現箇所を置換するのに役立ちます。

名前空間エイリアスの導入

Introduce Namespace Aliasリファクタリングは、深くネストされた名前空間のショートカット名を定義するのに役立ちます。

リファクタリングを呼び出すとすぐに、ネームスペースエイリアスを導入したいスコープを定義するように提案されます。

ReSharper C++のtypedefの導入とtypedefのインライン化リファクタリング

typedefの導入とtypedefのインライン化

Introduce typedefリファクタリングにより、選択したデータ型のtypedefを素早く作成し、このデータ型とそのすべての出現箇所を新しく作成されたtypedefに置き換えることができます。

Inline typedefリファクタリングはその逆を行います。つまり、既存のtypedefを実際のデータ型に置き換えます。

コンテキストアクション

リファクタリングに加えて、ReSharper C++は一連のコンテキストアクションをご提供いたします。これは、ローカルコード変換で、通常、代替構文オプション間の切り替えに役立ちます。 クイックフィックスと同じように、Alt+Enterを押せば利用できます。

例えば、autoを明示的な型に、あるいは型をautoに素早く置き換えられます。 その他のコンテキストアクションでは、ネストされたifステートメントのマージ、列挙との切り替えの際に欠落しているcaseステートメントの生成、マクロ呼び出しまたはtypedefの置き換えなどができます。

コーディング支援

ReSharper C++は、Visual Studioの構文を強調表示し、コードの構造部分を一致させる方法を拡張し、独自のコード補完の実装を提供し、C++シンボルの利用可能なドキュメントを視覚化いたします。

出口点の自動ハイライト表示

構文と構造のハイライト表示

ReSharper C++は、ソリューション内の*.c*.cc*.cxx*.cpp*.h、および*.hppファイルを認識し、これらのファイルのソースコードを、任意に変更できるカラースキームに従ってハイライト表示いたします。

さらに、ReSharper C++は、キャレットを対になる1つの項目に配置すると、一致するさまざまな項目を強調表示いたします。例えば、一致する区切り文字、マクロ、またはprintf関数呼び出しの形式指定子と引数です。

キャレットを関数、ループ、またはswitch文(returnthrowbreakなど)の出口点の1つに置くと、ReSharper C++は他のすべての関数またはループの出口を自動的に強調表示するようになりました。

現在のファイルに含まれていないC++シンボルの自動補完

コード補完

C++ファイルでは、コードを記述するときにコード補完を使用できます。これにより、他の選択肢の中からコード生成オプションが提案されることがあります。

コード補完は、現在のファイルにまだ含まれていないシンボルを示唆することもできます。 補完リストでこのようなシンボルを選択すると、対応する#includeディレクティブが自動的に追加されます。

ドキュメントの表示

シンボルの定義に移動しなくても、Ctrl+Shift+F1を押すだけでDoxygen のコメントブロックに基づいたドキュメントがQuick Documentationポップアップに表示されます。

シンボルに関するDoxygenのドキュメントがない場合でも、クイックドキュメントにはシンボルのシグニチャが表示されます。

また、ReSharper C++は、C++コード要素の構文が強調された豊富なツールチップも表示できます。 このツールチップには、関数と変数のタイプ、およびドキュメントが表示されます。

また、C#スタイルのXMLドキュメントのコメントは、C++シンボルにも使用されることがあります。 ReSharper C++は、Quick Documentationポップアップと quick infoツールチップにそれらを正しく表示します。

C++/CLI

C++/CLIサポート

C++/CLIはMicrosoft社によるC++言語拡張機能のセットで、マネージコードとネイティブコード間の相互運用を容易にするためのものです。 マネージ言語とC++の両方に対して広範なサポートを提供するReSharperは、C++/CLIでのコーディングにも役立ちます。

C++/CLIコード内で、純粋なC++コードとまったく同じすべてのリファクタリングとインテンションアクションにアクセスできます。 C#とC++/CLI間で移動することもできます。

ReSharper C++では、ソースコード内での検索がとても簡単になります。 単純なショートカットを使って、宣言、メンバー、メソッド呼び出し、または継承階層のメンバーを検索するだけです。

ReSharper C++の移動メニュー

状況に応じたナビゲーション

宣言と定義が別々になっているすべてのシンボルに対し、ReSharper C++はNavigate to declaration/definitionアイコン(Navigate to declaration/definition icon in ReSharper C++)を左側に表示します。 アイコンをクリックするか、Ctrl+Bを押して、宣言と対応する定義を素早く切り替えます。

ReSharper C ++のその他のコンテキスト依存型ナビゲーションオプションには、選択したシンボルからその使用箇所、ベースまたは派生シンボルへのナビゲーションが含まれます。

ReSharper C++のコンテキスト依存型ナビゲーション

どこへでも移動

ReSharper C++には、Go to FileGo to SymbolGo to File MemberGo to Everythingといった一連のコンテキストに依存しないナビゲーションコマンドが用意されています。

これらのコマンドはすべて、ローワーキャメルケースベースの検索とパスによるフィルタをサポートします。 例えば、すべてに移動ポップアップにfc movieを入力すると、movieという文字列が名前に含まれており、FollowerCプロジェクトまたはFollowerConstants名前空間(どちらもfcに一致)に属するファイルとファイルメンバの一覧が返されます。

階層の可視化

ReSharper C++は、指定された型が一部となっている継承階層の概要を提供いたします。 基本型と、選択した型の継承型の両方を表示し、ワンクリックでそれらのいずれかに移動できます。

また、ReSharper C++には hierarchy view が付属しています。これは、#includeディレクティブによって導入された依存関係を可視化し、把握するのに役立ちます。

ReSharper C++でシンボルの使用箇所を検索

使用箇所の検索

Find Usagesを使って、ソリューションのC++コード内にある特定のシンボルの参照をすべて検索できます。

検索が完了するとすぐに、見つかった出現箇所が、グループ化オプションとフィルタリングオプション、およびプレビューペインを備えたツールウィンドウに表示されます。

C++のファイル構造

ファイル構造

ReSharper C ++では、File Structureウィンドウを使用して現在のドキュメントの構造を表示できます。これにより、大きなファイルでのナビゲーションが大幅に簡素化されます。

別のエディタタブに切り替えると、ツールウィンドウに対応するファイルの構造が表示されます。

ReSharper C++のTo-doエクスプローラー

To-doエクスプローラー

To-doエクスプローラーツールウィンドウでは、3つのデフォルトのTo-Doパターン(バグTodo、および未実装)のいずれか、およびセットアップしたい可能性のあるカスタムパターンを含むコメントの表示、グループ化、および絞り込みができます。

完全なReSharper Ultimateライセンスをご使用で、多言語ソリューションをお持ちの場合、To-doエクスプローラーは、サポートされているすべての言語、例えば、C#、VB.NET、C++、JavaScript、XAML、HTMLなどからto-do項目を収集いたします。

コード生成

ReSharper C++には、ボイラープレートコードを生成する様々な方法があります。 既存の使用箇所に基づいてシンボルを宣言および定義することに加えて、型メンバー、囲むコードブロック、およびコードベースで通常必要なコードスニペットを作成できます。

ReSharper C++のコード生成ポップアップ

一般コードの生成

ReSharper C++は、欠落しているメンバー、オーバーライドするメンバー、等値演算子または関係演算子、既存の宣言に基づく定義、ハッシュ関数とスワップ関数、およびコンストラクタを素早く生成する方法をご提供いたします。

テキストエディタでAlt+Insを押すだけで、Generateメニューが起動し、使用可能なすべてのオプションが表示されます。

ReSharper C++のサラウンドテンプレート

コードとファイルのテンプレート

ReSharper C++には29個のカスタマイズ可能なテンプレートが付属しております。 通常のコードスニペットもあれば、コードの選択範囲をラップするために特に使用されるものもあります。

ファイルテンプレートも使用および作成できます。 Ctrl+Alt+Insを押すと、作業中のプロジェクトにクラスを素早く追加するのに役立ちます。

コードスタイル支援

ReSharper C++を使用すると、コードフォーマッタはあなたの既存のコードから学習し、フォーマットとコードスタイルの設定をチームメンバーと共有できます。

ReSharper C++のコードスタイルアシスタンス

コードフォーマッタ

ReSharper C++を使用すると、特定のソリューションで作業するときに使用したいコードフォーマットルールを設定および適用できます。

使用可能なすべてのコードフォーマットオプションを調べる代わりに、コードブロックを選択し、この特定のブロックに適用可能なもののみを構成できます。

デフォルトポインタ初期化子のコードスタイル設定

コードスタイル設定

チーム全体で一貫したコードスタイルを確保するために、フォーマットと命名の設定を設定ファイルに保存し、チームメイト間で共有できます。

また、ReSharper C++では、修飾子の順序やポインタ初期化子の優先値など、チームコーディング標準の他の部分を定義することもできます。 例えば、0nullptr、またはNULLを優先初期化子スタイルとして指定できます。そうすると、ReSharperC++は、新しい初期化子を生成する際にあなたの選択を尊重いたします。

ReSharper Options | Code Editing | C++ | Naming Style を使用して、事前定義されたC++命名スタイル、つまり、STL、 Google、 LLVM、CamelCase、Microsoftから1つ選択します。

コードスタイルの検出

フォーマット設定の検出

多くの場合、単に既存のコードからフォーマット設定を検出して、フォーマット設定をカスタマイズする方がはるかに簡単です。 ReSharper | Edit | Detect formatting settings メニューを使用して、ReSharperにコードフォーマット設定を検出させます。 検出された値を含むツールウィンドウが表示されます。これを確認し、お使いのマシンのReSharper設定に適用できます。 または、それらをチーム共有設定レイヤーに保存して、チームの他の開発者が現在のソリューションを開くときに同じコードフォーマット構成を持つようにできます。

詳細

ユニットテスト

Visual Studioに統合されたユニットテストランナーは、Google Test、Boost.Test、CatchおよびDoctestフレームワークをサポートしています。

ユニットテストランナー

ReSharper C++には、Visual Studioのユニットテストランナーが付属しており、Google Test、Boost.Test、Catch、およびDoctestフレームワークをサポートしています。

Alt+Enterコンテキストメニューを使用して、テキストエディタから直接、ユニットテストを実行およびデバッグしたり、様々なセッションにテストを追加したりできます。

ReSharper C++には、Unit Test ExplorerUnit Test Sessionsツールウィンドウが用意されており、ユニットテストの表示、グループ化、フィルター処理、実行、およびユニットテストセッションの作成と管理ができます。

Unreal Engine

Unreal Engine ベースのゲームを制作している場合は、Unreal Engine に特化したサポートを ReSharper C++ 内で受けられます。

UE の命名規則

UE の命名規則

ReSharper C++は、Introduce Variable(変数の導入)および Rename(名前の変更)リファクタリング、getter / setter のコード生成など、そのすべてのアクションで UE の命名規則に対応しています。 コードベース内で使用する名前も監視しています。 Inconsistent UE naming(一貫性のない UE 命名)インスペクションを実行すると、UE の命名規則と矛盾している箇所がハイライトされます。

詳細

UE 対応の解析

UE 対応のコード解析

UE ベースのコードに対応した新しいコード解析チェックもいくつか追加しました。これらは特に、欠落している、または正しく設定されていない UE のリフレクションマクロを対象としています。

  • UCLASSの宣言は、UObjectまたはそこから派生したクラスをpublic継承しなければなりません。
  • UCLASSが付けられたクラスは、UObjectから派生したクラスを1つだけ継承するか、またはUObjectを直接継承しなければなりません。
  • UCLASSはクラスでなければなりません / USTRUCTは構造体でなければなりません。
  • UInterfaceは空でなければなりません。
  • UE のクラス/インターフェース/構造体の宣言で UCLASS / UINTERFACE / USTRUCT のマクロ呼び出しが欠落しています。
  • UE のクラスは別のクラス内で宣言することはできません。
  • 宣言より前のUPROPERTY / UFUNCTIONマクロは効力を持ちません。
  • UPROPERTYではないメンバーに保存されたオブジェクトはいつでもガベージコレクションの対象となります。
UnrealHeaderTool

UnrealHeaderTool

ReSharper C++UnrealHeaderTool とのシームレスな連携機能を提供し、より多くの Unreal Engine 固有のコードの問題をエディター内で直接捕捉できるようにします。 Unreal Engine プロジェクトで作業する際には編集中のファイルに対して UnrealHeaderTool が自動的に実行され、他のインスペクションと同様にエラーや警告が表示されます。 UnrealHeaderTool 統合の様子を実際にご覧ください。

UE のリフレクション指定子の補完

リフレクション指定子のコード補完

Unreal Engineのリフレクションマクロを簡単に使えるよう、ReSharper C++ではリフレクションマクロ内でリフレクション指定子の補完を提供しています。

UE のリフレクション指定子のドキュメント

リフレクション指定子のコードドキュメント

キャレットを UE リフレクション指定子の上に置くと、そのリフレクション指定子に対応する組み込みのドキュメントが Quick Documentation ポップアップ (Ctrl+Q) に表示されます。

RPCナビゲーション

UE リモートプロシージャコールのサポート

ReSharper C++は、UFUNCTION宣言文内のClientServer、またはNetMulticastキーワードによってRPCを識別します。 そのような関数の場合、ReSharper C++は_Implementation関数だけでなく、WithValidationが設定されている場合は_Validate関数も生成する必要があることを認識しています。 両方が欠落している場合は両方を生成でき、一方が欠落している場合は1つのみを生成できます。

定義に移動する際に、両方の関数(_Validate_Implementation)が提案されます。 これらのオプションは、Alt+Enterメニューでも “Related UE functions” としてアクセスできます。

詳細

UE の生成ヘッダーチェック

自動インポートとgenerated headers

現在のスコープで利用できないシンボルを使用すると、ReSharper C++はそのシンボルを赤でハイライト表示し、可能な時は欠落している#includeを追加するよう提案します。 ヘッダーファイルで#includeが欠落していると、インクルード一覧の一番最後となる.generated.hの前に挿入されます。 誤って配置された#includeは、対応するインスペクションによって強調表示されます。

Unreal Engine プロジェクトの Rename リファクタリングは対応する .generated.h include ディレクティブと AFETS、および U で始まる関連ファイル を更新します。

UE のコード生成

コード生成

UCLASSesの「新しい」後置テンプレートは、適切なfactory関数呼び出し(作成されたオブジェクトをガベージコレクターに登録する)に対応しています。 USTRUCT/UCLASS/UENUM/UENUMCLASSを素早く生成するのに役立ち、それぞれに対応する名前を持つライブテンプレートをご利用いただけます。

USF ファイル

USF ファイル

Unreal Engine USF ファイルは HLSL に基づくもので、マルチプラットフォーム対応のシェーダーコードが含まれます。 これらのファイルには、通常、仮想ファイルパスが含まれていますが、ReSharper C++ では仮想ファイルパスを使用することができ、一般的なアクションがすべてサポートされています。

HLSL

SpatialOS GDK

SpatialOS Game Development Kit は Unreal Engine 4 のフォークで、クラウドでオンラインゲームを実行したり管理したりすることができます。 ReSharper C++ は CrossServer、SpatialType、NonSpatialType、およびその他の SpatialOS の指定子を認識します。 詳細はこちら。

HLSL

HLSL

ReSharper C++ は、HLSL(ハイレベルシェーディングランゲージ)の初期サポートを提供しています。 ReSharper C++ は、デフォルトのカラースキームに従って HLSL コードをハイライトし、コード要素、型情報、およびドキュメントに関するインレイヒントとツールチップを表示します。 また、ソリューション全体、参照ファイル、および標準ライブラリの構造体、関数、またはパラメータを検索して素早く移動することもできます。 さらに、HLSL のエクスペリエンスを完全化するために、ReSharper C++ は、スマートコード補完、対応区切り文字の自動挿入などを提供しています。

HLSL

ReSharper の制御フロー解析を HLSL シェーダーファイルで利用できるようになりました。全機能を利用できるため、到達不能コード、初期化不能変数、重複する制御フローのジャンプ、条件付きブランチなどの警告が備わっています。

ダウンロード

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