アノテーションを使用してコードインスペクションを改善する
コードインスペクションや他の多くのJetBrains Riderの機能は、言語構成の動作を把握して問題を検出したり、改善案を提案したり、他の方法でサポートすることに大きく依存しています。
ただし、この種の分析ではすべてを検出できるわけではありません。 例: メソッドがフォーマットメソッドとして設計されている場合、メソッドの呼び出しに必要な引数が含まれていない場合、構造解析では潜在的な問題は見つかりません。
このケースや他の多くの場合、JetBrains Riderの JetBrains.Annotations が非常に役立ちます。 このフレームワークで宣言された属性を使うことで、JetBrains Riderでコードを必要な方法で解析できます。 例: メソッドに [StringFormatMethod] のアノテーションを付けて、 System.String.Format() と同じように機能するカスタムメソッドを示すことができます。
これは最も単純な例であり、より複雑な使用例を持つ他の役立つ属性があります。 これらの属性の完全なリストは リファレンスにあります。
ほとんどの場合、コードアノテーション属性は特定の コードインスペクションを有効化します。たとえば:
StringFormatMethodAttributeは、 文字列のフォーマット方法の誤用を検出するのに役立ちます。CanBeNullAttributeおよびNotNullAttributeは、「「値を null にすることはできない」属性でマークされたエンティティへの「null」割り当ての可能性」インスペクションに関連付けられています。 詳細については、 価値と無効性の分析 を参照してください。CannotApplyEqualityOperatorAttributeは ''CannotApplyEqualityOperatorAttribute' でマークされた '==' 型と比較 ' インスペクションにバインドされていますContractAnnotationAttributeは あなたの機能のための契約を定義し、対応するインスペクションをオンにするために使用することができます。 例:[ContractAnnotation("input:null => false")]を使用して、パラメーターsがnullの場合は常にfalseを返す関数bool Foo(object input)をコンシューマーに通知することができます。
また、コードアノテーションにより、 クイックフィックス、 コード補完の提案 、およびアノテーション付きアイテムの コード生成機能が可能になります。 アノテーションは ソーステンプレート を作成して使用するためにも必要です。
JetBrains Rider では、コードシンボルに 2 通りの方法で注釈を付けることができます:
上の例に示すように、ソースコード内のシンボルにアノテーションを付けることができます。 この場合、プロジェクトで
JetBrains.Annotations名前空間を参照する必要があります。 詳細については、 ソースコードのアノテーション を参照してください。ソースにアクセスできない場合でも、コンパイルされたライブラリコード内のシンボルにアノテーションを付けることができます。 詳細については、 外部アノテーション を参照してください。