代码之家  ›  专栏  ›  技术社区  ›  Brian Rasmussen

如何限制类型属性上的独立方法查询

  •  7
  • Brian Rasmussen  · 技术社区  · 16 年前

    我试图让NDepend使用标准“methods to big”查询的修改版本来识别长方法。

    DebuggerNonUserCode 属性和 InitializeComponent() .

    属性,则方法不包含,因此尽管它们是生成的,但它们仍包含在输出中。

    我正在寻找类型和方法之间的连接:给我所有没有 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
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Patrick from NDepend team    14 年前

    Code Rule over LINQ Query (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 }
    

    只是我的代码 . 此功能无法描述 here 贾斯迈科德 诺特迈科 . 然后,您要求的规则可以很容易地重写:

    warnif count > 0
    from m in JustMyCode.Methods where
       m.NbLinesOfCode > 30
    orderby m.NbLinesOfCode descending    
    select new { m, m.NbLinesOfCode }
    

    布景 贾斯迈科德 诺特迈科 默认查询 Discard generated and designer Methods from JustMyCode

        2
  •  0
  •   flq    16 年前

    '和' ISinframework组件 您还可以从查询中删除某些名称空间(