基于 Clang 的 C/C++ SonarQube 插件发布

jopen 9年前

日前,CoderGears 团队发布发布了一款基于 Clang 的 C/C++ SonarQube 插件,极大的方便了开发者们使用 C/C++ 开发 Sonar 插件。

众所周知,Sonar (SonarQube)是一个用于管理源代码、提供质量数据报告工具的开源平台。但使用 C/C++ 开发 Sonar 插件面临着一个巨大的挑战——必须要使用很好的解析器。然而,这种要产生这种语法解析器是非常困难的。

那什么使得 C++ 开发很难呢?事实上,凡是关系到——声明/定义,名称查找(consider argument-dependent name lookup),隐式转换规则以及解析模版,都会使 C++ 的开发变得困难。

目 前已经证明了 Clang 是一个专为 C 和 C++ 服务的成熟编译器,就像 GCC 和 Microsoft 编译器一样。但是 Clang 又有一个与众不同的地方,它不仅是一个编译器,还是一个构建工具的基础结构。由于其开发包是基于体系结构的,这样子使得重用和集成更灵活,即能更容易集成到其他项目。

插件功能

  • 度量标准: 有许多方法来测量一个代码库。最常用的方法是计算代码行数。这种方法粗略的估计了投入成本和代码质量。它允许你获得质量级别协议。但该插件不仅计算了代码 的行数,同时还带有其他标准代码度量值。比如说,有关代码组织 (类或命名空间,在类上声明的方法数目),有关代码质量 (复杂性,百分比的评论,问题......)

    基于 Clang 的 C/C++ SonarQube 插件发布

  • 重复代码: 由嵌入到 Sonarqube 上的 CPD 检测代码重复率 基于 Clang 的 C/C++ SonarQube 插件发布

  • 目录和文件的依赖性: CppDepend 检测文件和目录间的所有依赖性,并将其加载到 Sonar DSM 上。

基于 Clang 的 C/C++ SonarQube 插件发布

  • 覆盖范围: 此插件加载范围覆盖了所有 Cobertura 和 Microsoft Visual Studio XML 上的文件。

基于 Clang 的 C/C++ SonarQube 插件发布

基于 Clang 的 C/C++ SonarQube 插件发布

且这些度量标准能够用在在设计目录(Design category)里面:

基于 Clang 的 C/C++ SonarQube 插件发布

  • CppDpeend 规则存储库:Sonar.properties 文件中定义了 Sonar.cppdepend.cdproj 之后,Cppdepend 规则都能够添加到 Sonar 规则中。基于 Clang 的 C/C++ SonarQube 插件发布

  • cppcheck 规则存储库: Cppcheck 是一个给力的能有效检测出 C/C++ 问题,的工具,它嵌入在 CppDepend 上且所有的 Cppcheck 规则都能添加到 Sonar 规则中。

基于 Clang 的 C/C++ SonarQube 插件发布

  • CppDepend 部件:  CppDepend sonar 插件提供了一些有用的部件来查询 CppDepend 的结果:

    • 类度量部件: CppDepend 推算出了许多与设计和执行相关的类度量。使用这些部件的话能够用于发现这些度量标准。

基于 Clang 的 C/C++ SonarQube 插件发布

  • CQLinq 查询部件: CQLinq 是一个强大的功能,有利于创建编码规则。为了查看 CQLinq 查询结果,你必须在你的 jdproj 文件中创建一个名为“Sonar Queries”的文件,并添加到你的查询中去。

基于 Clang 的 C/C++ SonarQube 插件发布

且能够在你的 Sonar Dashboard 中添加查询部件:

基于 Clang 的 C/C++ SonarQube 插件发布

  • CppDepend 报告工具:

基于 Clang 的 C/C++ SonarQube 插件发布

你可以使用 CppDepend 自定义你的报告,正如下面所描述的那样。要是你想通过 Sonar 访问这个报告,你必须在 SonarRunnerForCppDepend 上添加着两个协议

  • Sonar.cppdepend.deploymentPath: CppDepend 将会在这里复制目录路径

  • Sonar.cppdepend.deploymentUrl: CppDepend 将会在这里复制目录 URL


  • 抽象性 vs 不稳定图表: 抽象性 vs 不稳定图表通常用在最常用的项目中,用来检测抽象性缺乏。有关此图表的更多信息参阅这里 正如 CppDepend 报告部件所描述的那样,你必须定义 Sonar.cppdepend.deploymentPath 和 Sonar.cppdepend.deploymentUrl 协议。

基于 Clang 的 C/C++ SonarQube 插件发布

Via:codergears.com