コード解析

ReSharper は継続的に C#、VB.NET、XAML、XML、ASP.NET、ASP.NET MVC、ASP.NET Core、HTML、ResX、Protobuf のコード品質を解析します。 エラーや問題はコンパイルする前に即座に検出されます。

Visual StudioにおけるマーカーバーでのReSharperのコードインスペクション

継続的なコード品質解析

ReSharperは設計時に、2200種類以上のコードインスペクションを適用するため、現在のファイルやソリューション全体に、エラーや問題が含まれているかどうかを即座に確認できます。

ReSharperはVisual Studioのエディタで直接、検出したエラーや問題をハイライトし、右側のマーカーバーを使用してそれらの可視化も行います。

ファイルにエラーや問題がある場合、マーカーバー上部のステータスインジケーターの色とアイコンが変化します。 該当アイコンを右クリックすると、ReSharperのコード解析、識別子のハイライト、Visual Studioのコード解析をすばやく切り替えたり、最も重大度の高い問題間を移動したりできます。

ReSharperでのコード解析

Errors(エラー)

ReSharperはコーディング中にエラーを即座に検出し、エディタ内にハイライト表示します。

Errors(エラー)は赤文字または波下線でハイライト表示されます。 マウスをエラー箇所に移動すると、ツールチップに説明が表示されます。

ReSharperは通常のC#やVB.NETのコードだけでなく、ASP.NETのコードビハインドファイル、マークアップファイルの参照、ASP.NET MVCの呼び出しでもエラーを検出できます。

XAMLの場合、ReSharperはXML構文をチェックし、XAMLエンティティ間の参照を含む XAMLセマンティクスを巧みに検証します。

ビルドスクリプト(NAntおよびMSBuild)では、ReSharperは不明なプロパティ、ターゲット、 タスク、 属性を解析し、ハイライト表示します。

また、HTML、XML でもコードインスペクションを使用できます。

Warnings(警告)

コンパイラのエラーや警告に加えて、ReSharperはコードのコンパイルの妨げにはならないものの、コードの効率性を著しく低下させる可能性がある部分について独自のwarnings (警告)を表示します。 たとえば、ReSharperは冗長なキャスト、不正なフォーマットの文字列、宣言されながらも一度も使用されていないローカル変数などを通知します。 警告に関係する構文は、グレーのテキストか青色の波下線で強調されます。

Suggestions(提案)

さらに詳細なコード解析を行い、コードを提案します。 Suggestions(提案)はコード構造を詳細に解析し、必ずしも低品質または不正ではないものの、知っておくと役立つ可能性のある箇所に注意を促します。 提案箇所は、緑の波下線でハイライト表示されます。

例えば、あるパラメータが基本型で宣言可能なこと、つまり、使用するメソッドはパラメータの基本型のメンバーのみを使用することを知りたい場合があるかもしれません。 ReSharperは可能な場合、 バッキングフィールドを 持つプロパティから自動プロパティの作成、静的メソッドの呼び出しから拡張メソッドの 呼び出しへの変換、 または'var' キーワードの使用を提案します。

Hints(ヒント)

最後に、重大度をハイライト表示するコードで最も控えめなのがhint(ヒント)です。 エラー・警告・提案とは異なり、ヒントは前後のハイライト箇所に移動したときに考慮されず、マーカーバーにも表示されないため、ステータスインジケーターの色には影響しません。

ヒントは単に特定の具体的なコードに注意を促し、改善方法を推奨するだけです。 ヒントに関係するコードの部分は、緑の破線でハイライト表示されます。

ReSharperでの問題コードのクイックフィックス

問題のあるコードのクイックフィックス

ReSharperは、すべてのサポート対象言語で検出した問題のあるコードのほとんどを即座に修正できるするのに役立つ1200種類以上のクイックフィックスを提供しています。 クイックフィックスは、ハイライト表示された問題のあるコードでAlt+Enterを押すだけで適用し、適切な方法で問題を修正したり、最適化されていないコードを改善したりできます。

Alt text

ソリューション全体のインスペクション

ソリューション全体にわたる警告と提案機能により、未使用の非privateメンバーをすぐに検出できます。 これらのインスペクションは、ReSharperでソリューション全体を解析した場合にのみ機能します。 コード内およびマーカーバーでハイライト表示された問題をお探しください。 具体的には、以下の問題を発見できます:

  • privateではない、未使用の宣言。
  • 非privateメソッドの未使用の戻り値。
  • 未アクセスの非privateフィールド。
  • 非privateメンバーの未使用パラメータ。
  • 一度も呼び出されていない抽象イベントや仮想イベント。
  • 未割り当てのフィールド。
  • publicではなくinternalで作成できるメンバーや型。

また、コード注釈を使って、意図的に放置されている特定の非privateな型やメンバーをマークし、ReSharperにそれらに関する警告を表示させないようにすることもできます。

コードインスペクション項目の無効化と設定

解析項目それぞれの重大度はいつでも変更できます。例えば、個別のコーディングスタイルや社内の要件に従って、エラー、警告、コードのサジェスト、またはヒントを特定のインスペクション/通知として表示させることができます。
さらに、特定のコードは十分に良く出来ており、警告は必要ないと確信されている場合は、特定の警告を無効にできます。

コードインスペクション項目を無効化または設定するには、ReSharperのオプションからコードインスペクション |インスペクションの重大度ページをご使用ください。 また、Alt+Enterを押して呼び出すアクション一覧のインスペクションオプションを使用し、特定の警告、提案、ヒントの設定もできます。

エラー、警告、提案はそれぞれ、マーカーバーに別々のストライプで表示されます。 ストライプをクリックすると、エラーを含むコード行や、警告/提案の元となるコード行に直接移動します。

Alt+PageDown(前へ)とAlt+PageUp(後ろへ)を押すと、エラー、警告、提案間を移動できます。 また、Shift+Alt+PageDown(次のエラーへ)とShift+Alt+PageUp(前のエラーへ)を押して、エラー間のみを(すべての警告や提案をスキップして)移動することもできます。 現在のエラー、警告、提案を説明するメッセージが、ステータスバーに表示されます。

また、その他にも問題のあるコード間を移動する方法があります。特定の範囲内にあるコードの問題をすべて検索し、それらを専用のツールウィンドウで調査できます。

検索パターンに一致したコードのハイライト表示と置換パターンによる置換

あなた独自のコードインスペクション

ReSharperは、特定パターンに一致するコードを検索し、それを必要に応じて別のパターンに一致するコードに置換するStructural Search and Replace機能を提供しています。 さらに素晴らしいことに、ReSharperは検索パターンを継続的に監視し、パターンに一致するコードをハイライト表示し、置換パターンに従ってコードを置換するクイックフィックスを提供しています。

これは本質的には、インスペクションをカスタマイズし、ReSharperの独自のコードインスペクションセットを拡張できることを意味します。 例えば、新バージョンのフレームワークに移行する場合、古いAPIの使用箇所を検索するための検索パターンや、更新されたAPIを導入するための置換パターンを作成できます。

ソリューション全体でのエラー検出

ソリューション全体のエラー監視

ReSharperは設計時に開いているファイルを解析できるだけではなく、その解析能力を拡張してソリューション全体に対応することもできます。

現在のアセンブリ内でのみ使用されていたと仮定し、メンバーの表示範囲をpublicからinternalに変更したと想定します。 この段階では、ReSharperは現在のファイルでエラーを何も検出しません。 その後、Solution-Wide Analysis(ソリューション全体解析)を有効にするとReSharperは不正箇所を見つけます。 ソリューション内の次のエラーにジャンプし、現在のプロジェクトの外で誰かがこのメンバーを使用したことがわかります。

あとは、Solution-Wide Analysisを明示的にオンにしてから、ソリューションのコード解析が完了した後に、専用のウィンドウでエラーの一覧を確認するだけです。

該当ウィンドウを開かなくても、Go to Next Error/Warning in SolutionShift+Alt+PageDown)とPrevious Error/Warning in SolutionShift+Alt+F12)コマンドを使い、ソリューション内のエラー間を簡単に移動できます。

ソリューション全体解析での警告

ソリューション全体解析での警告の監視

ソリューション内の最後のエラーが修正されるとすぐに、ステータスバーの赤いインジケーターが緑色に変わります。 しかし、ソリューション全体の解析はソリューションのコード品質をさらに高めるのに役立ちます。エラー表示でInclude Warnings をクリックすると、ReSharperがソリューション全体で警告(コンパイラの警告と、ReSharperのWarning重大度付きインスペクションで検出される警告の両方)を監視し始めます。

ソリューションで再度エラーが出現した場合は、警告が自動的に非表示になり、エラーの修正に集中できます。 すべてのエラーが修正されると、再び警告が表示されます。

Call Tracking(呼び出しトラッキング)

これまでは、コード内の呼び出しシーケンスを追跡しようとすると、多数のFind Resultsウィンドウが開き、コンテキストが失われる可能性がありました。 この問題を解決するために、ReSharperでコールシーケンス全体を、単一のツールウィンドウ内で可視化できるようになりました。 これはCall Trackingと呼ばれるもので、 コード内の呼び出しチェーンを表示し、それらの間を移動できるようにします。

イベント、インターフェース、クロージャのサポートにより、ReSharperの呼び出しトラッキングは、Visual Studio自身の呼び出し階層を大幅に改善されました。

呼び出しシーケンスを可視化するには、ReSharper | Inspect | Outgoing CallsまたはReSharper | Inspect | Incoming Callsを選択するか、Inspect Thisショートカット機能を使用します。

コードの問題を発見

ReSharperでは、Inspection Resultsという単一の ツールウィンドウからあらゆるコード品質の問題、冗長なコード、言語の利用機会、コード改善の提案を 発見することができます。

特定の範囲内にあるコードの問題を発見するには、ReSharper | Inspect | Code Issues in Solutionか、ReSharper | Inspect | Code Issues in Current Projectを選択します。 または、Solution Explorerで ノードを選択して右クリックし、 Find Code Issuesを 選択します。

Inspection Resultsウィンドウでは、検出した問題を絞り込み、 課題タイプ、 重大度、カテゴリその他の属性ごとに結果をまとめ直し、結果をファイルに エクスポートできます。

Value Tracking(値の追跡)

Value Trackingはプログラム内のデータフローに関する重要な情報を提供します。 ソースコード内の任意の場所で変数、パラメータ、フィールドまたはプロパティをポイントし、それをReSharperに検査させることができます。 その後、プログラム中でその値の流れを確認したり、ソースに戻ったり、使用箇所に移動したりできます。

Value Trackingは、ある不正な値がプログラム内の所定の場所にどのように渡されたのか、 そしてその後どこに 渡されたのかを特定するのに役立ちます。 これは、NullReferenceExceptionsが発生する可能性、不適切な振る舞い、および不正な値を取得する理由を調査するのに役立ちます。

ある特定の値が関与するデータフローを可視化するには、ReSharper | Inspect | Value OriginReSharper | Inspect | Value Destinationを選択するか、Inspect Thisショートカット機能を使用します。

Code annotations(コード注釈)

ReSharperのような強力なコード解析エンジンであっても、特定の問題を検出するのに必要な情報を保持していないことがあります。 例えば、絶対にnullを返さないよう設計されたメソッドがあり、それに従って対応するクライアントが設計されている場合、該当メソッドがnullを返すように変更されていても、コード解析では発生し得る問題を発見することはできません。

このようなケースやその他多くのケースでは、JetBrains.Annotationsフレームワークは、他の方法では推測できない問題を発見するのに役立ちます。 このフレームワークで属性を宣言することにより、ReSharperのコード解析の振る舞いを調整することができます。

ソースコードでReSharperのコード注釈属性を使用するには、対応するNuGetパッケージをインストールしてください。 これを行うには、using JetBrains.Annotations;ディレクティブを追加するだけです。そうすれば、ReSharperが自動的にパッケージの取得を支援します。

Inspect This

Inspect ThisCtrl+Shift+Alt+A)は、Call TrackingValue TrackingType HierarchyType Dependency Diagramなどのコード解析およびナビゲーションを組み合わせた複数のReSharperの機能への単独のショートカットです。

ショートカットに関する注意

このページに記載されたキーボードショートカットはすべて、ReSharperデフォルトの「Visual Studio」キーマップのものです。 ReSharperの2種類のキーマップの詳細は、ReSharperのドキュメントをご覧ください。