代码指标 - 静态 类 和方法计数
Code Metrics - Static classes and methods count
我很想知道 Visual Studio 2013 解决方案中有多少静态方法和静态 classes。我们那里有很多项目...
Visual Studio 是否有内置的东西可以做到这一点?我在代码指标 window 中看不到任何与此相关的内容。
我知道我可以使用 Ctrl+F 搜索静态 class(使用 RegEx 搜索静态 class 有点棘手)。这对于方法来说也很棘手。所以我得到 350 左右的静态 classes.
我唯一的想法就是编写自己的基于反射的检查。
使用 ctrl-f 并使用 "Look in: Entire Solution",您可以使用此正则表达式搜索静态方法
^\s*(public\s+|internal\s+|private\s+)?static\s+([a-zA-Z0-9_\<\>\.\:]+)\s+([a-zA-Z0-9_\<\>]+)\s*\(.*\)
这是静态的 classes
^\s*(public\s+|internal\s+|private\s+)?static\s+class
为了更加确信没有误报,您可以将搜索限制为仅在 *.cs 文件中查找。在 "Find Results" 的底部,您会看到 "Matching lines:" 以及后面的计数。
我看到的限制:
- 方法或 class 声明中的新行会中断搜索。这可以通过在上面的正则表达式中的每个标记后添加
(\r?\n)?
来解决。
- 块注释或
#ifdef 0
将不会被检测到。如果不使用 Roslyn(例如)更彻底地解析它,或者像您在问题中所说的那样编译它并使用反射,我认为没有解决这个问题的简单方法。
工具 NDepend 附带 code query language based on C# LINQ + 它与 VS2010,2012,2013,2015 集成。
具体的,要知道你的项目有多少静态类和静态方法,你只需要编辑两个代码查询:
from t in Application.Types where t.IsStatic select new { t, t.NbLinesOfCode }
和
from m in Application.Methods where m.IsStatic select new { m, m.NbLinesOfCode }
实时编译查询,并列出匹配的代码元素。
注意代码查询语言可以用来编写代码规则。 200 default code rules and queries are provided.
左右
要获取静态类型的百分比,您可以编写查询:
(Application.Types.Count(t => t.IsStatic) * 100f / Application.Types.Count())
.ToEnumerable().Sum()
要获取静态类型代码行的百分比,您可以编写查询:
(Application.Types.Where(t => t.IsStatic).Sum(t => t.NbLinesOfCode) * 100f / Application.Types.Sum(t => t.NbLinesOfCode))
.ToEnumerable().Sum()
免责声明:我为 NDepend
工作
我很想知道 Visual Studio 2013 解决方案中有多少静态方法和静态 classes。我们那里有很多项目...
Visual Studio 是否有内置的东西可以做到这一点?我在代码指标 window 中看不到任何与此相关的内容。
我知道我可以使用 Ctrl+F 搜索静态 class(使用 RegEx 搜索静态 class 有点棘手)。这对于方法来说也很棘手。所以我得到 350 左右的静态 classes.
我唯一的想法就是编写自己的基于反射的检查。
使用 ctrl-f 并使用 "Look in: Entire Solution",您可以使用此正则表达式搜索静态方法
^\s*(public\s+|internal\s+|private\s+)?static\s+([a-zA-Z0-9_\<\>\.\:]+)\s+([a-zA-Z0-9_\<\>]+)\s*\(.*\)
这是静态的 classes
^\s*(public\s+|internal\s+|private\s+)?static\s+class
为了更加确信没有误报,您可以将搜索限制为仅在 *.cs 文件中查找。在 "Find Results" 的底部,您会看到 "Matching lines:" 以及后面的计数。
我看到的限制:
- 方法或 class 声明中的新行会中断搜索。这可以通过在上面的正则表达式中的每个标记后添加
(\r?\n)?
来解决。 - 块注释或
#ifdef 0
将不会被检测到。如果不使用 Roslyn(例如)更彻底地解析它,或者像您在问题中所说的那样编译它并使用反射,我认为没有解决这个问题的简单方法。
工具 NDepend 附带 code query language based on C# LINQ + 它与 VS2010,2012,2013,2015 集成。
具体的,要知道你的项目有多少静态类和静态方法,你只需要编辑两个代码查询:
from t in Application.Types where t.IsStatic select new { t, t.NbLinesOfCode }
和
from m in Application.Methods where m.IsStatic select new { m, m.NbLinesOfCode }
实时编译查询,并列出匹配的代码元素。
注意代码查询语言可以用来编写代码规则。 200 default code rules and queries are provided.
左右要获取静态类型的百分比,您可以编写查询:
(Application.Types.Count(t => t.IsStatic) * 100f / Application.Types.Count())
.ToEnumerable().Sum()
要获取静态类型代码行的百分比,您可以编写查询:
(Application.Types.Where(t => t.IsStatic).Sum(t => t.NbLinesOfCode) * 100f / Application.Types.Sum(t => t.NbLinesOfCode))
.ToEnumerable().Sum()
免责声明:我为 NDepend
工作