【问题标题】:Parsing C# and VB.Net code to automate the code review process解析 C# 和 VB.Net 代码以自动化代码审查过程
【发布时间】:2014-02-09 09:48:59
【问题描述】:

客户拥有数百万行代码(VB.Net 和 C#),并希望我们开发一种工具来评估代码的质量。

客户想知道的信息包括:

1)一个代码文件有多少行cmets

2) 一个类中实现了多少个函数

3) 是否所有可能的异常都被 try/catch 块包裹

4) 一个函数有多少个属性

5) ...(客户说我们提供的工具应该是可配置和可扩展的,以便他们以后可以实现更多的想法)

我们打算写一个VS.Net插件,可以及时解析开项目的代码。似乎这里有趣的是我们需要解析 C# 和 VB.Net 的代码。

请提供一些关于如何开始这项有趣任务的提示。

提前致谢!

【问题讨论】:

  • Roslyn 编译器和 C# 6.0 发布后,您应该能够以非常方便的方式检查所有语法节点。它尚未发布,但 CTP 令人印象深刻。
  • 所有这一切都可以通过搜索关键字、搜索类结尾(功能)并将其解析为类来轻松完成。
  • @EddynandFuchs 确实如此,但随着新版本的 C# 和 VB 发布,可能很难维护。例如,据说 C# 正在为属性和方法定义获取新语法。
  • @AluanHaddad 它可以与语法数据库一起使用(关键字(函数,...),startchars({,keyword,...),endchars(},结束*关键字)
  • 如果你需要问你可能不应该做这个项目...... Visual Studio 已经内置了代码度量和分析,无论如何都做了很多。 blogs.msdn.com/cfs-filesystemfile.ashx/__key/…

标签: c# vb.net visual-studio parsing visual-studio-extensions


【解决方案1】:

您提出了一个非常广泛的问题,但您应该从研究现有解析器的 API 开始。 一旦你做到了,你就是金子。

例如,看看这个SO question,它为 C# 提供了一些解析器。当然你也可以自己写,但我找不到任何理由,因为这个任务并不容易。

因此,您获得了您的 AST,并且一旦您这样做了,您就会获得所需的所有信息。
请记住,如果您引用文件中没有的类型,则必须从另一个文件中获取它,并且它也可能是来自 .NET 的类型。所以肯定还有更多工作要做。

浏览您的清单:

1)一个代码文件中有多少行cmets:您可以通过您选择的C#解析器找到它。他们也能识别评论

2) 一个类中实现了多少个函数:同样,应该很容易

3) 是否所有可能的异常都被 try/catch 块包裹:同样,只查找异常抛出(解析器可能对语言关键字有特殊类型,因此查找throw 应该是容易)。

4) 一个函数附加了多少个属性:和...同样

5) ...(客户说我们提供的工具应该是可配置和可扩展的,以便他们以后可以实现更多的想法):应该与任何其他项目没有区别。只要确保你使用了良好的设计原则,保持一切抽象,明智地使用接口,让你的工作分层等等......

【讨论】:

    【解决方案2】:

    您可以使用Roslyn。对于 C#,您还可以使用 NRefactory

    【讨论】:

      【解决方案3】:

      看看Stylecop,或许能添加规则得到你想要的信息?

      http://stylecop.codeplex.com/

      【讨论】:

      • 我认为他想编写一个工具而不是使用现有的。
      • 看看 StyleCop 代码可能有用吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      相关资源
      最近更新 更多