仅在提供的差异内将警告转换为错误



在我曾经工作过的一家公司,构建系统被设置为仅在更改的代码中将警告转化为错误。它的工作原理是生成一个diff(通常是在您试图合并的分支和master之间(,然后将该diff提供给某个编译工具,该工具只会在提供的diff中产生警告。

这很好,因为它允许您弃用某些功能,并让构建系统阻止人们引入该功能的新用途,然后在以后删除该功能的旧用途。

不幸的是,在我离开公司之前,我没有仔细查看设置,也不知道如何复制它。我的问题是:我如何复制这个设置?

问题被标记为Clang,但我也对使用其他编译器工具的答案感兴趣。

如果必须实现它,我的第一个想法是:

  1. 获取合并文件
  2. 分析差异,找出哪些区域发生了变化
  3. 生成一个新文件并注入#pragma指令1,这些指令在本地启用/禁用更改区域周围的警告
  4. 还要注入#line指令,使其看起来像来自原始文件的警告/错误
  5. 编译修改后的文件并保存编译器警告/错误
  6. 删除修改后的文件
  7. 向用户展示编译器诊断

1例如。https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-GCC的Pragmas。

Clang支持GCC的#pragma diagnostic

例如:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
// ... changed code here ...
#pragma GCC diagnostic pop

MSVC也有类似的东西:

#pragma warning(push, 3)
// ... changed code here ...
#pragma warning(pop)

相关内容

  • 没有找到相关文章

最新更新