我正在尝试使用修改后的标准“方法过长”查询来让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