如何限制对type属性NDepend的方法查询
题
我试图让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
解决方案
布赖恩,由于编码规则在LINQ查询(CQLinq)中的源代码你所要求的编码规则为:
warnif count > 0
from m in Application.Methods where
m.NbLinesOfCode > 30 &&
!m.ParentType.HasAttribute( "System.Diagnostics.DebuggerNonUserCodeAttribute") &&
m.Name != "InitializeComponent()"
orderby m.NbLinesOfCode descending
select new { m, m.NbLinesOfCode }
在CQLinq语法还提供了一种方法来定义什么是的只是-MY-代码的。此功能描述这里。基本上需要定义该组的 JustMyCode 强>通过查询前缀的 notmycode 即可。然后,你所要求的规则可以被轻易改写:
warnif count > 0
from m in JustMyCode.Methods where
m.NbLinesOfCode > 30
orderby m.NbLinesOfCode descending
select new { m, m.NbLinesOfCode }
该组的 JustMyCode 强>一旦所有可在任何编码规则被重用定义。 Additionaly你可以看看在 notmycode 默认查询丢弃产生和从JustMyCode设计师方法
其他提示
我很喜欢NDepend的,但它仍然是最大的单一缺点命名空间/类型/方法的信息不能被加入到一个单一的查询。该功能将使CQL真正强大的东西。
除此之外支票 ' IsGeneratedByCompiler ' 和 ' IsInFrameworkAssembly ' 可以是有帮助的。 您也可以从查询卸妆一定的命名空间(命名空间OUT “......”的)