此问题扩展了Unify output with different clang-format versions。问题在于,即使是内置样式,不同格式的默认clang-format行为也会有所不同。坦率地说,我想问一个问题,为什么开发人员在这里不关心兼容性,但这是重点。情况依旧,我必须处理。我不允许使用某种版本的clang-format(如相关答案中建议的一个用户),并且需要配置clang-format,以便为不同的版本提供相同的结果。如果可能,应覆盖> = 4.0的版本。如果这不可行,则可以接受适用于版本> = minimum_version的解决方案。
我想人们可以找到每种clang格式版本的配置,以提供所需的输出-繁琐的工作,但这至少是一种解决方案。但是对于不同的版本使用相同的.clang格式文件会产生一些问题,因为较旧的版本不知道新的密钥。所以要么需要
有什么想法吗?
答案 0 :(得分:5)
由于已经开放了一段时间,而且没有人尝试答案,所以我将根据我的有限经验,尝试用我的2美分赚钱。
我怀疑这个问题长期未得到解答的原因是您无法真正做到这一点,而唯一的真正解决方案是强迫所有人使用相同的clang格式版本。同时,您可以尝试以下两种方法:
1)如果您不能强迫所有人升级到最新版本,是否可以强制降级为普通/最低版本并仅使用该版本?
2)您是否可以和每个人一起在本地计算机上使用他们的clang-format版本,仅格式化他们接触的行以及在每次提交后自动执行将格式更新为“规范”版本的CI作业? / p>
3)您可以尝试仅使用最低版本支持的功能,并为每个更高版本创建一个单独的配置文件,而不必依赖任何默认值或由默认样式之一设置的值,而是设置每个可配置选项手动。但是,这可能不会长期有效,特别是如果某些贡献者总是热衷于使用clang格式开发分支的负责人。
最后,我真正考虑的唯一选择是,除了强迫所有人将其更新为特定版本的clang-format:
4)用clang格式编写包装,让每个人都使用。我假设您的开发人员中没有一个人无法运行在他们的开发计算机上生成的实际代码,或者您至少有一种工具/脚本语言可以运行所有开发人员共享的代码?然后,只需使用已经存在的一种生产/工具脚本语言来编写clang格式的包装即可。将所有输入(命令行参数,stdin,上载任何引用的文件等)转发到运行具有正确配置的“实际” clang格式实例的服务器,进行格式化,然后转发所有输出(stdout,stderr) ,所有修改文件的内容,返回代码等)返回给您的包装器,并使其在本地计算机上复制更改。如果做得足够好,则没有工具/ IDE / etc / clang-format集成可以说明区别。这些clang格式服务器的实例足够接近您的开发人员,根据需要足以处理任何延迟问题和峰值使用率cpu /网络负载-每个办公室有一个服务器或几个服务器,甚至实例很小,内存占用少每个开发人员机器上的linux服务器VM。也许让服务器自动获取新版本的clang格式和配置。是的,与本地运行clang格式相比,会有更多的延迟,但是我认为这是您所能做到的最好的选择,并且每个人都具有相同的优点,最新版本,您可以随意更改/配置的clang格式版本,而不必担心将更改推送给每个贡献者以及他们对计算机的任何限制。