【问题标题】:How to maintain a .clang-format file for different clang-format versions?如何为不同的 clang-format 版本维护一个 .clang-format 文件?
【发布时间】:2020-04-11 05:04:54
【问题描述】:

这个问题延伸到Unify output with different clang-format versions。问题是 clang-format 的默认行为因版本而异,即使对于内置样式也是如此。坦率地说,我想问为什么开发人员不关心这里的兼容性,但这无关紧要。情况就是这样,我必须处理它。我不允许要求特定版本的 clang-format(如相关答案中建议的一位用户),并且需要配置 clang-format 以便它为不同版本提供相同的结果。如果可能,应涵盖 >= 4.0 的版本。如果这不可行,适用于 version >= minimum_version 的解决方案是可以接受的。

我想人们可以为每个提供所需输出的 ​​clang 格式版本找到一个配置 - 繁琐的工作,但至少它是一个解决方案。但是对不同版本使用相同的 .clang 格式文件会产生一些问题,因为旧版本不知道新的密钥。所以一个人需要

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

有什么想法吗?

【问题讨论】:

  • 我也有兴趣回答这个问题!
  • @Krishna ..我们不能是唯一的,不是吗?我开始赏金了,看看有没有人有好的解决方案!
  • 您对旧版本输出不同的结果感到满意吗?如,代码将根据最后一个人编辑它的版本进行格式化?或者您是否正在寻找方法来强制较新版本的输出与最低版本的输出相匹配,以便格式保持不变,独立于最后一个编辑和格式化文件的人?
  • @DeducibleSteak 我会说后者。最后我们的项目有一定的风格指南,不同版本的clang-format应该会产生相同的格式化结果。

标签: coding-style compatibility clang-format


【解决方案1】:

由于这个问题已经开放了一段时间并且没有人试图回答,我将尝试用我的 2 美分筹码,根据我承认有限的经验。

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 2013-09-11
    • 2021-11-02
    • 2019-07-12
    • 2021-09-02
    • 1970-01-01
    • 2022-12-23
    • 2014-01-12
    • 1970-01-01
    相关资源
    最近更新 更多