リファクタリング
コードの複雑性を軽減し、可読性を向上。外部動作を変更することなく拡張性を高めることができます。古いコード、継承したコード、自身で作成したコードのファーストバージョンのリファクタリングが可能です。
リファクタリングコマンドへのアクセス
リファクタリングコマンドは、キーボードまたはマウス操作でメニューからアクセス可能。メニューの内容はコンテキストによって異なります。リファクタリング機能は、Visual Assistのツールウィンドウと、テキストエディターのシンボル/選択範囲/ホワイトスペース上から使用できます。
現在のシンボルに対して、デフォルトショートカットShift+Alt+Qで、コンテキスト対応の「クイックアクションとリファクタリング」メニューを開きます。

テキストエディターのコンテキストメニューから、リファクタリングコマンドの一覧を表示できます。

シンボルのいずれかにカーソルを合わせると、リファクタリングが使用可能な場合にアイコンが表示されます。アイコンをクリックすると、コンテキスト対応メニューが開きます。

シグネチャの変更
参照、実装または宣言からメソッドのシグネチャを変更
シンプルなダイアログでメソッドまたは関数のシグネチャを更新すると、Visual Assistが元のシグネチャと新しいシグネチャの違いを推論。この強力なリファクタリング機能によりパラメーターの順序変更、名前変更、追加、削除を実行すれば、対象のメソッドへの参照についてもすべて更新されます。パラメーターの名前を変更すると、メソッド内の該当する参照についても、名前変更が適用されます。
以下のシグネチャ項目のいずれか、またはすべての項目を変更できます。
- メソッドの名前
- 戻り値の型
- 可視性
- パラメーターの名前
- パラメーターの型
- パラメーターの順序
- パラメーターの個数
- 修飾子
名前変更リファクタリングと同様、変更のスコープを設定し、リファクタリングが適用される参照の一覧をプレビュー表示できます。

ポインタとインスタンス間の変換
オブジェクトポインタをオブジェクト参照へ、あるいはその反対をすばやく変更
宣言で型を変換、参照で"." と "->" を入れ換え、必要に応じて"*" と "&"を調整します。

フィールドのカプセル化
フィールドをカプセル化してメンバーフィールドへのアクセサを生成
「フィールドのカプセル化」リファクタリングを用いれば、メンバーフィールドにおけるアクション制限が可能に。自動的にアクセサが生成され、名前が付与されます。参照の更新時に古いコードをコンパイルする必要がある場合でも、元のフィールドは外からの干渉を受けません。新しいフィールドをカプセル化するときは、直ちにフィールドをprivateにして、外部からのアクセスを制限します。

C/C++では、アクセサメソッドはヘッダーフィールドの宣言に隣接して生成されますが、インライン展開できるようにヘッダーファイルにそのまま置いておくこともできます。

ソースファイルに実装する場合には、別のリファクタリング機能で「フィールドのカプセル化」を実行し、実装を対応するソースファイルに移動します。

コードの一部を別メソッドに移動し、抽出されたメソッドへの呼び出しに置換
「メソッドの抽出」リファクタリングを使えば、長いメソッドの可読性を高め、コードの共通ブロックを共有できます。複数行またはコードの一部を抽出。抽出されたメソッドに渡すパラメーターと戻り値は、独自に指定されます。

C/C++のリファクタリングでは、ヘッダーファイルにインラインメソッドを生成するか、実装をソースに直接抽出することができます。

変数の導入
式を変数に置換し、置換されたコードで初期化
「変数の導入」リファクタリングを使用すると、選択範囲の最も内側のスコープで一時変数を定義し、置換されたコードによって初期化して、一箇所または複数箇所に出現する式を、この一時変数に置き換えます。

C/C++メソッドの実装をソースからヘッダーファイルまたはクラス宣言に容易に移動
このリファクタリング機能は、インライン展開用に実装コードをヘッダーファイルに配置します。また、メソッドの実装をクラス宣言に移動。同一クラスの他のメソッドの近くに配置します。VA Snippetを使用して、実装フォーマットの定義も可能です。

実装をソースファイルに移動
C/C++メソッドの実装をヘッダーファイルからソースファイルに移動
このリファクタリング機能は、ヘッダーファイルにインライン展開するために実装をヘッダーファイルに配置する他のリファクタリング(例:フィールドのカプセル化)を行った後などに使われます。ヘッダーに宣言を生成し、実装を同一クラスの他のメソッドの近くに移動します。

メソッドの実装をソースファイルに移動
C/C++コードのすべての実装を、一回の操作でヘッダーファイルからソースファイルにまとめて移動
複数移動をサポートするリファクタリング機能は、1つの実装の移動を行うコマンドを補完し、すべてのメソッドをヘッダーファイルからまとめてクラスに移動することができます。このコマンドは、個々のメンバー名ではなく、クラス名を選択して呼び出します。表示されたダイアログでは、移動させる実装を選択できます。

選択範囲を新しいファイルに移動
コードを新しいヘッダーファイルまたはソースファイルに移動し、新規ファイルをアクティブプロジェクトに自動挿入
新しいファイルを、アクティブドキュメントと同じディレクトリ内に作成するリファクタリング機能。VA Snippetを使用して、新規ファイルのフォーマットを定義できます。C/C++では、選択範囲をヘッダーファイルに移動する場合、Visual Assistはアクティブドキュメントの選択範囲を#includeに置き換えることができます。

名前の変更
アクティブプロジェクト内でもソリューション全体でも、シンボル名をすばやく正確に変更
使用頻度の高い「名前の変更」リファクタリングは、シンボルの定義と宣言、それに関連する参照のすべて、さらにオプションでコメントおよび文字列内での出現箇所に適用できます。名前の変更が適用されるすべての対象のプレビューが常に表示されるので、変更が期待通り実行されることを確認できます。変更したくない参照は選択を解除し、間違えた場合は操作全体を元に戻すことができます。
名前の変更を適用できる項目:
- クラス
- 列挙型
- フィールド
- マクロ
- メソッド
- メソッドパラメーター
- 変数
任意のリファクタリングメニューから[Rename]を選択し、新しい名前を指定しオプションを設定します。変更のプレビューは、読み取り専用箇所と書き込み可能箇所を区別して表示します。

ファイル名の変更
ビルド工程を中断することなく、アクティブドキュメントの名前を変更
開発フローやビルド工程を中断することなく、アクティブドキュメントと対応するファイルの名前を容易に変更可能。Visual Assistは、ファイル、プロジェクト、ソリューションを自動的に更新した後、Microsoft Visual Studioに統合されるソースコントロールシステムを通じて名前の変更をすべてに適用します。
C/C++では、ヘッダーファイルとソースファイルの名前はペアで変更され、ヘッダーファイルの名前変更は、このファイルに対して#includeを記述しているすべての対象も自動更新されます。C#では、デザインとコードビハインドファイルの名前も同時に変更されます。

インスタンス宣言の簡略化
オブジェクトの宣言をわかりやすく
オブジェクトをその型の新しいインスタンスに設定する無駄を解消します。

リファクタリング呼び出し後、オブジェクトは、シンプルでありながら同等の宣言によって生成・初期化されます。
