アノテーションを使用してコードインスペクションを改善する
コードインスペクションや他の多くの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# の機能の使用について説明します。 他の言語の詳細については、 言語およびフレームワーク セクションの対応するトピックを参照してください。