アノテーションを使用してコードインスペクションを改善する
コード検査や他の多くの ReSharper の機能は、問題を検出し、改善を提案し、他の方法であなたを手助けするために、言語構成の動作を知ることに主に依存しています。
ただし、この種の分析ではすべてを検出できるわけではありません。例: メソッドがフォーマットメソッドとして設計されている場合、メソッドの呼び出しに必要な引数が含まれていない場合、構造解析では潜在的な問題は見つかりません。
この場合や他の多くの場合、ReSharper の JetBrains.Annotations
は非常に役立ちます。このフレームワークで宣言された属性を使用することにより、ReSharper で必要な方法でコードを分析することができます。例: メソッドに [StringFormatMethod]
のアノテーションを付けて、System.String.Format()
と同じように機能するカスタムメソッドを示すことができます。
これは最も単純な例であり、より複雑な使用例を持つ他の役立つ属性があります。これらの属性の完全なリストはリファレンスにあります。
ほとんどの場合、コードアノテーション属性は特定のコードインスペクションを有効にします。
StringFormatMethodAttribute
は、文字列のフォーマット方法の誤用を検出するのに役立ちます。CanBeNullAttribute
およびNotNullAttribute
は、「「値を null にすることはできない」属性でマークされたエンティティへの「null」割り当ての可能性」インスペクションに関連付けられています。詳細については、価値と無効性の分析を参照してください。CannotApplyEqualityOperatorAttribute
は ' 'CannotApplyEqualityOperatorAttribute' でマークされた '==' 型と比較 ' インスペクションにバインドされていますContractAnnotationAttribute
はあなたの機能のための契約を定義し、対応するインスペクションをオンにするために使用することができます。例:[ContractAnnotation("input:null => false")]
を使用して、パラメーターs
がnull
の場合は常にfalse
を返す関数bool Foo(object input)
をコンシューマーに通知することができます。
また、コードアノテーションにより、クイックフィックス、コード補完の提案、およびアノテーション付きアイテムのコード生成機能が可能になります。アノテーションはソーステンプレートを作成して使用するためにも必要です。
ReSharper では、コードシンボルに 2 つの方法でアノテーションを付けることができます。
上の例に示すように、ソースコード内のシンボルにアノテーションを付けることができます。この場合、プロジェクトで
JetBrains.Annotations
名前空間を参照する必要があります。詳細については、ソースコードのアノテーションを参照してください。ソースにアクセスできない場合でも、コンパイルされたライブラリコード内のシンボルにアノテーションを付けることができます。詳細については、外部アノテーションを参照してください。
この機能は、次の言語とテクノロジーでサポートされています。
ここで説明する手順と例では、C# の機能の使用について説明します。他の言語の詳細については、言語およびフレームワークセクションの対応するトピックを参照してください。
関連ページ:
![](https://pleiades.io/icons/resharper.png)
コードインスペクション
ReSharper は、サポートされているすべての言語で 2500 を超えるコードインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルの設計時にコードの問題を検出してハイライトするために適用されます。また、特定の範囲内のすべてのコードの問題を検出するために適用されます。インスペクション ReSharper が提供するコードの種類を調べるには、異なる言語の ReSharper コードインスペクションの全リストをご覧ください。コードインスペクションは、以下のグループに分...
![](https://resources.jetbrains.com/help/img/dotnet/2024.3/stringFormattingMethods_03.png)
文字列リテラルのコード分析とヘルパー
プレーン文字列:コードにプレーンな文字列を使って作業しているときに ReSharper がどのように役立つかは次のとおりです。デフォルトでは、ReSharper は、すべての非逐語的な文字列の正しいおよび不正なエスケープシーケンスをハイライトします。キャレットが文字列内にあるときにを押し、対応するコンテキストアクションを選択することで、通常の文字列を逐語的な文字列に変換したり、元に戻したりできます。これは、補間された文字列でも機能します。Enter を押すだけで、文字列リテラルを分割できます。...
![](https://resources.jetbrains.com/help/img/dotnet/2024.3/Code_Analysis__Value_Analysis__2.png)
価値と無効性の分析
ReSharper は、可能な「null」逆参照、重複ブール比較および null ・チェックを見つけるのに役立つ値分析を実行します。Null 許容値を分析するさまざまな方法:ReSharper は、いくつかの方法で値を分析できます。言語構成体の動作を理解します。次の例では、パラメーターが明示的に null 可能性をチェックされたという事実に基づいて、ReSharper はの値が実際に 'null' であると合理的に想定し、対応する警告を表示します。null 許容参照型が無効になっている場合、コ...
![](https://resources.jetbrains.com/help/img/dotnet/2024.3/contract_annotations.png)
契約アノテーション
契約アノテーションでは、与えられた入力に対する期待される出力を定義することができます。言い換えれば、関数の参照型とブール型引数とその戻り値の間の依存関係を定義することができます。契約アノテーションのメカニズムにより、より簡単で安全な方法で消費できる API を作成できます。を使って関数を装飾することによって契約アノテーションを実装することができます。あなたのソースコード、JetBrains.Annotations 名前空間を参照するでそれをやりたいなら。外部アノテーションを使用して既存のバイナリ...
![](https://resources.jetbrains.com/help/img/dotnet/2024.3/SourceTemplateTargetExpression.png)
ソーステンプレート
従来、テンプレートまたはスニペットは、ソースコードの外部で保存および管理されていました。通常、テンプレートは汎用定型コードをすばやく作成するのに役立つため、これは理にかなっています。これらの目的のために、ReSharper は多くの事前定義されたライブテンプレート、サラウンドテンプレート、およびファイルテンプレートを提供します。これらのタイプの独自のテンプレートを作成することもできます。ただし、現在のプロジェクトまたはソリューションにのみ関連する繰り返し可能なコードを生成したい場合があります。R...
![](https://resources.jetbrains.com/help/img/dotnet/2024.3/annotation_ca.png)
ソースコードのアノテーション
ReSharper のコードアノテーションの恩恵を受ける最も簡単な方法は、ソースコードのシンボルにアノテーション属性を追加し、ReSharper がソリューションをより正確かつ洞察力で分析できるようにすることです。デフォルトでは、すべてのアノテーション属性クラスは属性でマークされているため、コンパイラーはコード内の属性の使用を無視します。つまり、'JetBrains.Annotations.dll' アセンブリへのバイナリ参照は生成されません。ただし、プロジェクトで「JETBRAINS_ANNO...