VisualStudioCode上的C++扩展迎来更新,这次带来的新功能是对静态分析框架clang-tidy的支持。clang-tidy是一个基于clang的C++静态分析工具,主要用来检测代码中的常见错误。通过对代码运行静态分析,可以找到潜在的Bug或者代码风格的不一致问题。对于clang-tidy的集成一直呼声较高,这次我们很高兴地宣布:clang-tidy它来了。
我需要安装clang-tidy吗?
不需要。clang-tidy直接集成在C++扩展中。但是如果你已经安装了clang-tidy(并且它位于你的环境变量路径中),则C++扩展会转而使用已经安装好的版本。你可以通过修改C++扩展的”ClangTidy:Path”配置项来指定需要使用的clang-tidy执行文件。
如何在VSCode中运行clang-tidy?
如果需要手动运行clang-tidy,请打开”CommandPalette(Ctrl+Shift+P)”,并输入”RunCodeAnalysis”。你可以直接在单个文件上执行clang-tidy,也可以在所有已打开的文件上执行,也可以在整个工作区上执行。如下图所示:
如果有一些文件夹你不想在上面执行clang-tidy,则可以将它们的路径添加到”ClangTidy:Exclude”配置项中(位于配置文件settings.json中的C_Cpp.codeAnalysis.exclude)。
你也可以设置当打开或保存一个源文件时自动执行clang-tidy。可以在CommandPalette(Ctrl+Shift+P)中选择”Preferences:OpenSettings(UI)”进行相关设定,如下图所示:
然后搜索”codeanalysis”关键字来找到所有clang-tidy相关的设置项,然后将”ClangTidy:Enabled”设置为true。
请注意,你可以在工作区级别或者解决方案级别上进行clang-tidy全局设置。
可以通过查看蓝色的状态栏中的”火”图标来判断clang-tidy是否正在运行,如下图所示:
如果需要暂停或取消clang-tidy执行,可以点击”火”图标并选择取消或暂停执行:
如何配置clang-tidy检查规则?
如果你的项目目录中有.clang-tidy配置文件,C++扩展将遵守该文件中定义的检查和选项。如果你的工作区中有多个.clang-tidy配置文件,clang-tidy将通过在它的上一级目录中搜索路径来使用最接近源文件的配置文件。或者,你也可以使用ClangTidy:Config设置指定clang-tidy配置。ClangTidy:Config接受检查和检查选项作为YAML/JSON格式的字符串。
如果源文件在其任何上一级目录中都没有.clang-tidy配置文件,并且ClangTidy:Config属性留空,则回退配置(在C_Cpp.codeAnalysis.clangTidy.fallbackConfig中定义)将是用于该文件。
你可以使用ClangTidyChecks:Enabled和ClangTidyChecks:Disabled设置启用和禁用更多检查。除了.clang-tidy文件中的检查外,还会运行这些设置中定义的检查。
选择添加项目会显示所有clang-tidy检查的列表。
你可以向ClangTidyChecks:Enabled和ClangTidyChecks:Disabled设置添加任意数量的检查。
如何将命令行参数传递给clang-tidy?
如果你通过命令行选项传递给clang-tidy,则可以在ClangTidy:Args属性中指定这些选项。ClangTidy:Args设置优先于编辑器中等效的ClangTidy设置(例如ClangTidyChecks:Enabled和ClangTidyChecks:Disabled)。
在编辑器中查看检查结果
clang-tidy检查的结果(警告和错误)显示在问题面板中,并在相关代码部分下方显示为波浪线。
单击“问题”面板中的问题会将您带到源文件中的问题。要清除代码分析波浪线,请单击快速操作灯泡,然后选择清除代码分析波浪线。
友情提示:如果你想取消对特定代码段的clang-tidy分析,可以在文件中添加NOLINT、NOLINTNEXTLINE和NOLINTBEGIN至NOLINTEND之间的注释。
Clang-tidy设置
最新的VSCode设置列表请参考原文,这里就不贴出来了。它帮助你为工作区配置clang-tidy。
总结
clang-tidy静态分析工具比我之前接触过的分析工具更加具有无缝使用体验,用来检查代码中的问题还是挺方便的。代码工作正常之后,如果还有闲暇时间,可以像打磨一件艺术品(例如,我一直在更新的拓扑梅尔智慧办公平台TopomelBox)进行微小的优化,经过时间的积累,你得到的不只是一款能跑的软件,而更像一个可以放在玻璃后面的艺术品。有时候,做个写码匠人,不急不躁,挺好的。