在Visual Studio中使用clang-tidy进行代码分析

关于clang-tidy

在最新的VS2019 v16.4 Preview 1中,我们为C++代码分析功能带来了重量级更新,其中包括:clang-tidy原生支持。这里所说的clang-tidy,实际上是LLVM团队开发的一个基于Clang的”linter”工具。它带来了多项代码改进: 语言的现代化及标准符合性,静态分析和自动格式化等。

安装Clang工具

为了在Visual Studio中运行clang-tidy,我们首先需要在系统中安装Clang工具。在安装或修改Visual Studio时,在”C++桌面开发”工作集中选择”C++ Clang tools for Windows”即可安装Clang工具,如下图所示:

如果你对在工程中使用Clang/LLVM作为编译器感兴趣,可以查看之前发布的文章:

Clang/LLVM for MSBuild Projects and for CMake projects.

配置clang-tidy

在默认情况下,代码分析工具和你所使用的平台工具集和编译器有关。例如,如果你使用MSVC(Visual Studio 2019),则将使用Microsoft Code Analysis作为代码分析工具,如果使用LLVM/clang-cl编译器,则会使用clang-tidy。

在编写代码的过程中,代码分析工具将在后台运行,其作用范围仅限编辑器中已经打开的文档。默认情况下,它将不会在编译期作用在所有的源文件上。这点需要注意。

MSBuild 工程

我们对工程属性中的[代码分析]结点进行了重新设计,在新版本中,我们可以更加简单的配置对于我们的每个工程使用哪一个工具。在[常规]选择卡下,我们可以选择当执行代码分析时,具体使用哪一个工具。如下图所示:

在[Microsoft]结点下,我们可以配置MSVC代码分析引擎的规则集合,类似的,我们在[Clang-Tidy]选项卡下指定要检查的clang-tidy检查项目。

我们可以通过修改.clang-tidy文件来做更进一步的配置,工具将会尝试读取这个文件中的配置值。你可以在这个文件中指定更多的更加细节华的配置项。例如,Checks, HeaderFilterRegex和SystemHeaders等。获取更多信息,可以移步LLVM项目文档。

CMake工程

在以Windows为目标平台的CMake配置中,我们可以通过在CMakeSettings.json文件中指定”clangTidyChecks”关键字的值来做自定义检查。从Preview 2开始,我们也可以配置enableMicrosoftCodeAnalysis和enableClangTidyCodeAnalysis来指定哪一个工具可用。如下图所示:

我们当前并不支持通过在IDE的CMakeLists.txt文件中指定CMAKE__CLANG_TIDY变量来进行配置。另外,CMake中的Clang-Tidy支持仅Windows目标平台,也就是说,目前还不支持WSL或者远程Linux主机作为目标平台。

代码分析可以在以下路径中做进一步的配置:Tools > Options > Text Editor > C/C++ > Advanced.

错误列表和编辑器集成

执行clang-tidy代码分析的结果将会在VS的错误列表中以警告的方式来呈现,就类似于编译错误一样,你可以点击警告项目进行代码导航。在[分类]这一列中,你可以获取有关当前警告所属的检查类别,例如:cppcoreguidelines, readability, or clang-diagnostic。

静态分析的检查警告,也会呈现在你的编辑器中,以波浪线显示,这样在编辑代码的时候,就可以容易的发现当前编写代码的错误和上下文,便于快速改正。

下一步我们的工作

当前VS的UI并不能支持指定Visual Studuio使用一个自定义的clang-tidy.exe。这个特性在一些场景下比较常用,例如,如果你想自定义一套自己的检查规则。我们会评估这个特性并考虑是否将它作为一个选项来提供。另外,我们还在开发一些其他特性,例如可以在执行clang-tidy时指定–fix选项,这样你就可以在代码检查的同时,还可以快速进行修正。

总结

VS2019都到16.4了,转眼间2019年也即将过去了。Microsoft的这帮老伙计们几十年如一日的优化完善VS,我们也要跟上啊。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191020A065A500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券