如何维护不同 clang-format 版本的 .clang-format 文件?

问题描述 投票:0回答:2

这个问题扩展了使用不同的 clang 格式版本统一输出。问题是 clang-format 的默认行为因版本而异,甚至对于内置样式也是如此。坦率地说,我想问为什么开发人员不关心这里的兼容性,但这不是重点。现在的情况是这样的,我必须要面对。我不允许要求特定版本的 clang-format (就像相关答案中建议的一位用户),并且需要配置 clang-format 以便它为不同版本提供相同的结果。如果可能,应覆盖 >= 4.0 的版本。如果这不可行,则可以接受适用于版本>=minimum_version的解决方案。

我想人们可以找到每个 clang-format 版本的配置来提供所需的输出——这是一项乏味的工作,但至少它是一个解决方案。但对不同版本使用相同的 .clang-format 文件会产生一些问题,因为旧版本无法识别新密钥。所以人们需要其中之一

  • clang 格式的开关,如果未知则跳过键
  • 将附加选项传递给 clang-format 的方法(除了文件中给出的选项之外)
  • 为给定的 clang-format 版本指定配置文件的方法
  • 执行上述操作之一的好方法(不确定这里的 clang-format 提供了什么)

有什么想法吗?

coding-style compatibility clang-format
2个回答
11
投票

由于这个问题已经开放了一段时间,而且没有人尝试回答,所以我将根据我有限的经验尝试捐出 2 美分。

我怀疑这个问题这么长时间没有得到答复的原因是因为你无法真正做到这一点,而唯一的真正解决方案是强迫每个人使用相同版本的 clang-format 。与此同时,您可以尝试以下几个想法:

1)如果你不能强制所有人升级到最新版本,你可以强制降级到普通/最低版本并使用它吗?

2)你能忍受每个人在本地机器上使用他们的 clang-format 版本,只格式化他们接触的行,并且有一个 CI 作业在每次提交后自动将格式更新为“规范”版本吗?

3)您可以尝试仅使用最低版本支持的功能,并为每个更高版本创建单独的配置文件,永远不要依赖任何默认值或默认样式之一设置的值,而是手动设置每个可配置选项。不过,这可能不会长期有效,特别是如果有贡献者总是热衷于使用 clang-format 开发分支的负责人的话。

最后,我真正考虑的唯一选择,除了强迫每个人都更新到特定版本的 clang-format 之外:

4)围绕 clang-format 编写一个包装器,让每个人都使用它。我假设您的开发人员都没有被锁定在他们的开发计算机上运行您生成的实际代码,或者您至少有一种可以运行为所有开发人员共享的代码的工具/脚本语言?然后只需使用您已有的生产/工具脚本语言之一来编写 clang-format 的包装器。将所有输入(命令行参数、stdin、上传任何引用的文件等)转发到运行具有正确配置的“实际”clang-format 实例的服务器,让它进行格式化,然后转发所有输出(stdout、stderr) 、任何修改文件的内容、返回代码等)返回到您的包装器,并让它在本地计算机上复制更改。如果做得足够好,与 clang-format 集成的任何工具/IDE/等都应该能够分辨出差异。根据需要,在离开发人员足够近的地方设置足够多的 clang 格式服务器,以处理任何延迟问题和 CPU/网络负载峰值使用 - 每个办公室有一台或几台服务器,甚至可能是小型、低内存占用的实例每台开发人员计算机上的 Linux 服务器虚拟机。也许让服务器自动获取新版本的 clang-format 和配置。是的,与本地运行 clang-format 相比,会有更多的延迟,但我认为这是您在您的情况下可以做的最好的事情,并且具有 每个人 都使用相同的 最新 版本的额外好处clang-format,您可以随意更改/配置,而不必担心将更改推送给每个贡献者以及他们的机器上可能有的任何限制。


0
投票
  • clang 格式的开关,如果未知则跳过键

自 LLVM-12(2021 年 4 月 15 日)以来,有一个

--Wno-error=unknown
选项允许
clang-format
忽略未知选项并继续。不幸的是,嵌入格式化程序的
clangd
的情况并非如此。 这里报告了一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.