今日、MSDNおよびTechNetサブスクライバーはVisual Studio 2012をダウンロードする機会があります。これは、 ReSharper 7.0の新機能について最も詳細かつ詳細な方法で話す絶好の機会です。
記事の要約 (同時に、この膨大な資料をナビゲートするのに役立ちます):
Visual Studio 2012
Windowsランタイム
コード生成
INotifyPropertyChanged
新しいリファクタリング
単体テスト
ReSharper SDKの新しい言語サポート
Visual Studio 2012
新しいResharperの主なタスクの1つは、VISual Studio 2012の完全かつ透過的なサポートを提供することです。このサポートは、インターフェイスの新しい側面と新しいテクノロジーの両方に関するものです。 非常に大きな変更が加えられたインターフェースから始めましょう。
テーマのサポート
Visual Studio 2012は、「テーマ」パラダイムをサポートし、LightとDarkの2つのテーマが付属しています。 Studioと完全に調和するために、すべてのメニュー、アイコンなどのResharperで両方のテーマのサポートを追加しました。
モノクロアイコンも新しいStudioに登場しましたが、アイコンをこのスタイルに変換しないようにとユーザーから多くのフィードバックを受け取りました。 視覚的な好みは主観的なものであるため、ユーザーに選択の権利を与えることにしました:
したがって、さまざまなメニュー、ウィンドウなどに反映されるアイコン、およびプロジェクトのさまざまな要素(タイプ、プロパティなど)のアイコンを選択できます。 アイコンはReSharperで設定できます| オプション| 全般 はい、元のアイコンも少し改善しました。
プロジェクトの非同期読み込み
VS2012では、Microsoftは非同期プロジェクトの読み込み(ASL)のサポートを追加しました。これにより、ソリューション内のプロジェクトを開いたときに独立して読み込むことができます。 これにより、ソリューション全体がロードされる前にユーザーが実際に開始できます。
7番目のResharperでは、ASLと対応するAPIを使用する際に多くの困難に遭遇しましたが、この機能の完全なサポートを実装することができました。
生産性の向上の例として、Visual Studio 2010およびReSharper 6で開くときに300を超えるプロジェクトを含むソリューションは5分かかります。 12秒、およびVisual StudioとReSharper 7を使用-わずか1分 17秒
クイック起動
VS2012では、要素またはコマンドの場所が正確にわからない場合は、クイック検索パネルを使用してインスタント検索を実行できます。 Studioプラグインとして、このメニューに独自のチームを追加することができました。 ここで、パネルに「移動」と入力すると、QuickLaunchは関連するすべてのResharperコマンドを提供します。
プレビュータブ
VS2012のもう1つの新機能は、「プレビュータブ」です。 その本質は、ドキュメントの通常のタブとは異なり、このタブはウィンドウの右側に開きますが、編集を開始するとすぐに左側に移動することです。 このタブの意味は、新しい開始タグを生成せずにナビゲートできる固定ブラウザを表示することです。
Resharperは、[ タイプへの移動 ]、[ メンバー ]、 [ファイル ]、 [宣言 ]、[使用状況の検索]および関連するウィンドウなどの機能で、この特別なタブの使用をサポートしています。
ソリューションエクスプローラー
新しいソリューションエクスプローラーでは、特定のファイルを開き、その構造(クラス、メソッドなど)を確認できます。 次に、リシャーパーはこれらの要素のコンテキストメニューを提供します。これにより、ポップアップメニューとキーボードショートカットの両方を使用して、リファクタリング、使用法、その他の使い慣れたコマンドを見つけることができます。
アーキテクチャエクスプローラー
Ultimateエディションでは、VS2012にArchitecture Explorerが付属しており、ネームスペースから特定のフィールドまたはメソッドに至るまで、ソリューションを徐々に掘り下げることができます。 また、Resharperは、 このポップアップメニューの[ ナビゲート先]または[ リファクタリング] を使用して、コード要素のコンテキストアクションに対して同じサポートを提供します。
依存グラフ
ResharperはArchitecture Explorerのサポートに加えて、Studioが生成できる依存関係グラフにも同じ機能を提供します。
Windowsランタイム
Windows 8およびVisual Studio 2012の今後のリリースは、Windowsランタイム(または略してWinRT)と呼ばれるアプリケーションを作成するための新しいプログラミングモデルを提供します。 WinRTでの開発は、Resharperが既にサポートしている言語(C#、VB.NET、JavaScript)を使用して実行できるため、ResharperにWinRTサポートを追加しました。
C#、VB.NET、およびXAML
Resharperは、C#/ VB.NETおよびXAMLのサポートを引き続き開発しています。 WinRT専用に次の機能が作成されました。
- コード補完は、コードとXAMLファイルの両方で提供されます。 XAMLでは、Resharperは新しい名前空間と形式に精通しており、編集コンテキストに応じて必要なアドオンを提供できます。
- 検査では、WinRT固有のプロジェクトで発生する可能性のあるコードの問題に関する関連情報を引き続き提供します。
- エラー修正 (迅速な修正)は、問題の迅速な修正にも役立ちます。
- コンテキストナビゲーションを使用すると、ソリューション内をすばやく移動できます。 このメカニズムは、たとえばリソースの命名オプションなど、WinRTプロジェクトの詳細を認識しています。
- 参照の最適化は、C#/ VB.NET指向のWinRTプロジェクトでもサポートされています。
Javascript
WPFおよびSilverlightから開発モデルを継承したC#/ VB.NET WinRTプロジェクトとは異なり、JavaScript(WinJSとも呼ばれる)を使用したWinRTの開発モデルは根本的に異なります。 ただし、Resharperはそれをサポートするために多くの異なる機能を提供します。
- コード補完は 、HTML、CSS、JavaScript、およびHTML内のJSON属性でもサポートされています。
- インポートされたWinRTコンポーネントの自動補完も利用できます 。 たとえば、ここにクラスがあります
JavaScriptにインポートされると、Resharperは次のオートコンプリートリストを表示できます。
- もちろん、 ナビゲーションと検索はWinRTプロジェクトでうまく機能します。 上記の例を使用して、C#プロジェクトで
Person
クラスの使用を探す場合、WinJSプロジェクトへのリンクを取得します。
- create from usageメカニズム(その使用例からコード要素を作成する)は、プロジェクト間のシナリオでも機能します。 たとえば、インポートされたWinRTコンポーネントの新しいプロパティを作成する場合:
次に、このコンポーネントの定義で自動的に作成されます。
- リファクタリング ( Renameなど)は、プロジェクト間シナリオでも機能します。 たとえば、WinRTコンポーネントから投影されたプロパティ名の名前をWinJSに変更しようとすると、元のプロパティの名前を変更するためのダイアログが開きます。
したがって、この変更後、C#プロジェクトではプロパティ名はFullName
になり、投影されるコンポーネントではfullName
ます。
ご想像のとおり、C#、VB.NET、XAML、HTML、CSS、およびJavaScriptをサポートするための既存の機能のほとんどは、WinRTに基づくプロジェクトで作業する予定の人なら誰でも利用できます。
コード生成
Resharperのさまざまなサブシステム間で、誰がより多くの変更と最小限の労力をもたらすかについて競合があった場合、Generateメカニズムが議論の余地のない勝者となります。 そして、もちろん、新しいResharperでは、このメカニズムにいくつかの新しい機能と改善を追加しました。
部分メソッド生成
多くのコード生成フレームワークは、ユーザーが生成されたコンポーネントの動作を後で変更または補足できるように、
partial
クラスで構成されるコードを生成します。 たとえば、Entity Frameworkは、エンティティクラスを
partial
として定義することでこれを行います。
Resharperはこのユースケースをサポートするようになり、部分メソッドの署名を生成できるようになりました。 これを行うには、
partial
型を作成し、 Generate | Call を呼び出します。 部分的な方法 :
ここで、実装するメソッドを選択するだけです。
...そして、選択したすべてのメソッドが選択したクラスに追加されます。
平等メンバーの生成の改善
型を比較するとき、ユーザーの多くは、型の比較を行うメカニズムを規制したいと考えていました。 したがって、3つの異なるタイプ比較オプションをGenerate Equality Membersに追加しました。
選択したオプションに応じて、
Equals()
メソッドで型の一致をチェックする条件は、次のいずれかの方法で実装できます。
- タイプは
this
と同じでなければなりません:
- タイプはクラスタイプと同じである必要があります。
- タイプは、クラスのタイプまたは継承者でなければなりません。
等値比較子の生成
特定のクラスのインライン比較実装に加えて、新しいResharperにはGenerate Equality Comparerという新しいジェネレーターが付属しています。 このジェネレーターの目的は、
IEqualityComparer<T>
インターフェイスを実装する別のクラスを作成することです。 これは、特定の比較条件を実装するために必要な場合があります。また、このインターフェイスで作業している特定のAPIが必要な場合も同様です。
以下に小さな例を示します。 2つのプロパティがある
Person
クラスがあるとします。 アクションを呼び出します:
...そして、比較を実行する要素を選択すると、
Person
は次の生成されたプライベートネストクラスを受け取ります。
これに加えて、このクラスのネストされた静的インスタンスをフィールドとして生成するオプションがあります。
INotifyPropertyChangedをサポート
クラスが
INotifyPropertyChanged
実装するか、このメカニズムを使用するクラス(Prismフレームワークからの
NotificationObject
など)を継承する場合、 Generate Propertiesアクションは、このインターフェイスに基づいてプロパティを実装するためのさまざまなオプションを提供します。
INotifyPropertyChanged
Windowsフォームの時代以来、プロパティを必要とするすべての人に変更を報告するために
INotifyPropertyChanged
インターフェイスが使用されて
INotifyPropertyChanged
た(通常、これはUIです)。 現在、多くのプラットフォーム(WPF、Silverlight)およびフレームワークで使用されている変更通知のサポートが頻繁に行われ、新しいリリースではそれが行われました。
自動実装
INotifyPropertyChanged
宣言をクラスに追加すると、Resharperはこのインターフェイスを実装するための簡単な修正を提供します。
この修正を適用すると、イベントの宣言だけでなく、このイベントの呼び出しを容易にするメソッドも自動的に受け取ります。 これで、任意のプロパティ(自動プロパティまたはフィールドを持つプロパティ)を取得し、通知メソッドへの呼び出しを追加するコンテキストアクションを適用できます。
プロパティの代わりにフィールドを使用する場合は、 Generate Propertiesコマンドを使用することもできます 。Resharperは、生成されたプロパティに通知を実装することを提供します。
ID追跡
文字列を介してプロパティをリンクすることは、最も安全な解決策ではありません。 ただし、これを行う必要がある場合は、Resharperが役立ちます。 まず、プロパティの名前を追跡するため、間違えたり、たとえばプライベートプロパティを参照したりすると、Resharperはすぐにエラーを表示します。
第二に、通知メソッドをどこかで手動で呼び出すことにした場合、可能なプロパティの名前の行に自動補完が表示されます。
さまざまなフレームワークのサポート
INotifyPropertyChanged
はさまざまな実装が
INotifyPropertyChanged
ます。 サードパーティのライブラリは、通知に独自のメソッドを使用することが多く、継承元の基本クラスが付属しています。 主な違いの1つは、多くのフレームワークが文字列リテラルの代わりにラムダ式を使用してメソッド名を渡すことです。
Resharperは、次のフレームワークをサポートしています。
- MVVM Light(WPF 3および4、Silverlight 3、4および5、Windows Phone 7および7.1)
- Caliburn.Micro(WPF 3および4、Silverlight 4および5、Windows Phone 7.1)
- プリズム(WPF 4; Silverlight 4)
- Catel(WPF 3および4)
- MVVMHelpers(WPF 3および4、ラムダ式のみがサポートされています)
実際には、これは、たとえば、Prismフレームワークから
NotificationObject
型を継承する場合、プロパティを作成するときに、呼び出す
RaisePropertyChanged
メソッドを選択できることを意味します。
ラムダ指向オプションを選択すると、プロパティは次のようになります。
そして、もちろん、これらの同じ実装オプションがコンテキストメニューに表示されます。
新しいリファクタリング
Resharperは、複雑さをうまく管理するツールとしてすでに評判が高く、7回目のリリースでは、大量のコードを管理するタスクを簡素化するために設計された2つの新しいリファクタリングを導入しました。
抽出クラス
コード内でクラスが管理不能なサイズに成長した場合はどうしますか? おそらく、あなたはいくつかの小さなクラスのクラスを分割しようとしています。 この操作を簡素化するために、 Extract Classと呼ばれるリファクタリングを追加しました。 このリファクタリングの本質は簡単です。クラスのどのメンバーを「プル」するかを選択し、さまざまなアクセス問題(もしあれば)をどうするかを決定し、ReSharperが新しいクラスを作成します。
別のクラスに入れるのに便利なアドレスフィールドが多すぎる
Person
クラスがあると想像してみましょう。
さまざまなアドレスプロパティに個別のクラスを提供するために、コンテキストメニューと、たとえば新しいソリューションエクスプローラーの両方からリファクタリングを呼び出すことができます。 必要なことは、必要なプロパティを選択し、[ リファクタリング ]メニューを使用することだけです。
抽出する要素を選択するダイアログボックスが表示されます(新語?)。また、新しいクラスと「親」にこのクラスのインスタンスを含む変数に名前を付けます。
リファクタリングは、プルされたプロパティにアクセスする方法に関するいくつかのオプションも提供します。
オプションは次のとおりです。
- Noneは、クラスのメンバーが新しい変数を介してのみアクセスできることを意味します。
- Create copyは、元のクラスに、新しいクラスにプルしたメンバーの正確なコピーを作成します。 コードのセクションがこの変数を使用する場合、引き出したものではなく、 元のを使用し続けます。
- 委任ラッパーを作成すると、描画アイテムの周りに委任ラッパーが作成されます。 つまり、次のように、すべてのコールが転送されます。
さらに、[クラスの抽出]ダイアログボックスは、新しいクラスを引き出すときに発生する要素のアクセシビリティに関して考えられるすべての問題を明確に示しています。 リストで選択された各要素について、Resharperはそれを使用する他のすべての要素を表示します。
同様に、別のクラスに移動する要素のチェックボックスをオンにすると、Resharperは、正しい実行を維持するためにレンダリングされる他のすべての要素を表示します。 たとえば、
PrintCity()
メソッドをレンダリングしようとすると、次のように表示されます。
...そして次のコードを取得します:
そして最後に、本格的な使用の競合が発生する場合があります。たとえば、元のクラスでまだ使用されている
private
プロパティを引き出しようとする場合です。 この場合、Resharperは停止アイコンを表示し、この問題に対するいくつかの解決策を提供します。
可能な修正のオプションは次のとおりです。
- パブリックにすると、要素がパブリックになります。
- 作成アクセサは要素を「そのまま」残しますが、元のクラスがこの要素に到達できるように、パブリックプロキシ要素にします。
- 修正を適用しないと何も行われないため、コードがコンパイルされません。
現時点では、リファクタリングはC#言語のみをサポートしていることに注意してください 。 VB.NETのサポートは、Resharperの将来のバージョンのいずれかに表示される可能性があります。
変換パラメータ
1つの戻り値を持つメソッドで作業を開始し、別の戻り値を追加したいという状況がありました。 この問題の典型的な解決策は、次の
out
パラメーターを追加する
out
です。
上記のアプローチの代替として、戻り
Tuple<Person,bool
>およびTransform Out Parametersを使用して、このアプローチで実装できます。
out
パラメーターでこのリファクタリングを呼び出すだけで......
...そして、既存のすべてのパラメータを表示するダイアログボックスが表示され、タプルに変換するパラメータを選択できます。
リファクタリングを適用すると、
out
パラメーターがなくなり、タプルを返すメソッドが作成さ
out
ます。 パラメータの内部使用はそれに応じて書き直されます:
このリファクタリングは、C#およびVB.NETで利用可能です。 ここでは
Tuple
クラスが使用されているため、リファクタリングは主に.NET Framework 4以降のプロジェクトに適用さ
out
ますが、
void
メソッドの単一の
out
パラメーターの場合、リファクタリングによりこのパラメーターを戻り値に変換できます。
最後に、戻り値としてタプルを既に返している場合、このリファクタリングにより、
out
パラメータに基づいてこのタプルを展開できることに注意し
out
ください。
単体テスト
Resarperの単体テスト起動メカニズムは、多くの開発者にとって既にツールキットの馴染みのある部分になっています。 コードのどこからでも、統合されたテスト起動メカニズムを備えたコンパートメントでテストを実行およびデバッグできるため、テスト起動プロセスが便利で直感的になり、多数のサードパーティプラグインの存在により、多くの一般的なテストフレームワークを使用できるようになります。
7th Resharperの新しいテスト機能の概要を以下に示します。
ジャスミン
Resharperの以前のバージョンでは、QUnitテストフレームワークをサポートしていました。 同じリリースで、JavaScriptをテストするためのBDDフレームワークであるJasmineのサポートを追加しました。
他の場所と同様に、Jasmineのテスト結果はテスト実行ウィンドウに分類されます。
ファントム
ブラウザでテストを実行する機能に加えて、ReSharper 7はユーザーに代替メカニズムを提供します。PhantomJS( WebKitエンジンへのコンソールインターフェイス)を使用してテストを実行する機能です。 使用を開始するには、設定を開いて([ 単体テスト ] | [ JavaScriptテスト ]タブ)、PhantomJSがインストールされているパスを指定するだけです。
これで、完了したすべてのJavaScriptテストがPhantomJSを介して実行され、ブラウザーウィンドウが表示されなくなります。
NUnitの改善
NUnitの
TestCaseSource
属性のサポートがテスト機能に追加されました。 この属性を使用すると、パラメーター化されたテストのテストケースの場所を指定できます。
この属性は変数を名前で参照するため、Resharperはこの名前の有効性もチェックします。
...また、自動補完オプションも提供します。
他のフレームワークのサポート
Resharperが「ネイティブに」サポートしていないテストフレームワークを使用する場合、これは問題ではありません。 多くのプラグイン作成者は、さまざまなテストフレームワークのサポートを提供します。 現在まで、ResharperをサポートするフレームワークにはAgUnit 、 Gallio / MbUnit 、 xUnit、およびMSpecが含まれます。
ReSharper SDKの新しい言語サポート
ReSharper SDKの最初のリリースから、Resharperに新しい言語のサポートを追加する方法について尋ねられました。 そのようなサポートを追加する可能性は常にありましたが、それほど簡単ではなかったため、このバージョンでは、新しい言語のレクサーとパーサーを作成するための完全なツールセットをユーザーに提供することにしました。
ツール
Resharperでの新しい言語のサポートには、これらの言語のレクサーとパーサーの作成、およびこれらの生成された構造のResharper APIへのその後の適応が必要です。 このプロセスを簡素化するために、SDKに
Tools
というフォルダーを追加しました。このフォルダーには、次の便利なツールがあります。
- CsLex-さまざまな言語の字句解析ツールを作成するためのツール
- parserGen - Resharperと互換性のあるパーサーを作成するためのツール
- Java-このフォルダーにはIKVMインフラストラクチャが含まれており、パーサージェネレーター(それ自体はJavaで記述されています)を実行できます
- MSBuild-プロジェクト内のパーサーとレクサーの作成を自動化できるタスクが含まれています
例
提供されているツールの1つであるparserGenは、特別な言語を使用するパーサー(PSIファイル)を定義するために特別な形式を使用します。 そのため、PSIファイルの言語をサポートするプラグインをSDKと組み合わせて、1石で2羽の鳥を殺すことにしました。 これにより、次のことが可能になります。
- プラグインのソースコードを提供することにより、新しい言語のサポートを作成するプロセスを説明します。
- 新しい言語を作成するためのプラグインサポートを提供する
おわりに
上記の機能に加えて、Resharper 7は以下もサポートします。
- SharePointおよびLightSwitchプロジェクト
- ASP.NET 4.5およびASP.NET MVC 4
- 変数の命名の高度な設定(アプリケーションとテストに異なる命名スキームを使用する場合に役立ちます)。
- ...などなど!
ReSharper 7を試用するには、30日間の無料期間で配布キットをダウンロードしてください。
オープンソースプロジェクトの開発者は、無料ライセンスを申請できます。
教育機関も無料の教室ライセンスを受け取ることができます。