標準の「メソッドが大きすぎます」クエリの修正バージョンを使用して、NDependに長いメソッドを識別させようとしています。
開発者がほとんど制御できない長いメソッドを報告したくないので、DebuggerNonUserCode
属性とを使用して生成されたコードを除外しますInitializeComponent()
。
残念ながら、生成されたタイプのメソッドも報告されるため、まだいくつかの誤検知が発生します。問題は、型自体にはDebuggerNonUserCode
属性がありますが、メソッドにはないため、生成されているにもかかわらず、出力に含まれていることです。
タイプとメソッド間の結合のようなものを探しています。属性を持たないすべてのタイプを指定して、DebuggerNonUserCode
それらに対してクエリを実行しますが、CQLでこれを表現する方法がわかりません。
一部のアセンブリでは、フルネームで簡単にフィルタリングできますが、残念ながら、一部のアセンブリでは、開発者が作成したタイプと生成されたタイプが混在しています。残念ながら、IsGeneratedByCompiler
この場合も使用できません。
私の質問
WARN IF Count > 0 IN SELECT METHODS WHERE
NbLinesOfCode > 30 AND
!HasAttribute "System.Diagnostics.DebuggerNonUserCodeAttribute" AND
!NameIs "InitializeComponent()"
ORDER BY NbLinesOfCode DESC