car*_*ama 11 compatibility coding-style clang-format
这个问题用不同的 clang 格式版本扩展了统一输出。问题是 clang-format 的默认行为因版本而异,即使对于内置样式也是如此。坦率地说,我想问一下为什么开发人员在这里不关心兼容性,但这无关紧要。情况就是这样,我必须处理它。我不允许需要某个版本的 clang-format(就像相关答案中建议的一位用户)并且需要配置 clang-format 以便它为不同版本提供相同的结果。如果可能,应涵盖 >= 4.0 的版本。如果这不可行,则可以接受适用于版本 >= minimum_version 的解决方案。
我想人们可以为每个 clang 格式版本找到一个配置,以提供所需的输出——繁琐的工作,但至少它是一个解决方案。但是对不同版本使用相同的 .clang 格式文件会产生一些问题,因为旧版本不知道新密钥。所以一个人需要
有任何想法吗?
由于这已经开放了一段时间并且没有人尝试过答案,我将根据我公认的有限经验,尝试用我的 2 美分凑钱。
我怀疑这个问题这么长时间没有得到解答的原因是因为你不能真正做到这一点,唯一真正的解决方案是强制每个人使用相同版本的 clang-format。同时,您可以尝试以下几个想法:
1)如果你不能强制所有人升级到最新版本,你能强制降级到普通/最低版本并使用它吗?
2)你能和每个人一起在本地机器上使用他们的 clang-format 版本,只格式化他们接触的行,并有一个 CI 工作,在每次提交后自动将格式更新为“规范”版本?
3)您可以尝试仅使用最低版本支持的功能,并为每个更高版本创建单独的配置文件,不要依赖任何默认值或默认样式之一设置的值,而是手动设置每个可配置选项。不过,这可能不会长期奏效,尤其是如果有贡献者总是热衷于使用 clang-format 开发分支的负责人。
最后,我真正考虑的唯一选择是强制每个人更新到特定版本的 clang-format:
4) 围绕 clang-format 编写一个包装器,让每个人都使用它。我假设您的开发人员中没有一个人无法运行您在他们的开发机器上生成的实际代码,或者您至少有一种工具/脚本语言可以运行所有开发人员共享的代码?然后只需使用您已经拥有的一种生产/工具脚本语言,围绕 clang-format 编写一个包装器。将所有输入(命令行参数、标准输入、上传任何引用的文件等)转发到运行具有正确配置的“实际”clang 格式实例的服务器,让它进行格式化,然后转发所有输出(标准输出、标准错误) 、任何修改过的文件的内容、返回代码等)返回到您的包装器,并让它在本地机器上复制更改。如果做得足够好,没有与 clang-format 集成的工具/IDEs/etc 应该能够分辨出差异。根据需要,将足够多的这些 clang 格式的服务器实例化到足够靠近您的开发人员,以处理任何延迟问题和 CPU/网络负载的高峰使用 - 每个办公室有一台或几台服务器,甚至可能是一个小的、低内存占用的实例每个开发人员机器上的 linux 服务器 VM。也许让服务器自动选择新版本的 clang-format 和配置。是的,与本地运行 clang-format 相比,会有更多的延迟,但我认为这是您在您的情况下可以做的最好的事情,并且具有额外的好处 处理任何延迟问题和峰值使用 CPU/网络负载 - 每个办公室有一台服务器或几台服务器,甚至可以在您的每台开发人员机器上安装一个小型、低内存占用的 Linux 服务器 VM。也许让服务器自动选择新版本的 clang-format 和配置。是的,与本地运行 clang-format 相比,会有更多的延迟,但我认为这是您在您的情况下可以做的最好的事情,并且具有额外的好处 处理任何延迟问题和峰值使用 CPU/网络负载 - 每个办公室有一台服务器或几台服务器,甚至可以在您的每台开发人员机器上安装一个小型、低内存占用的 Linux 服务器 VM。也许让服务器自动选择新版本的 clang-format 和配置。是的,与本地运行 clang-format 相比,会有更多的延迟,但我认为这是您在您的情况下可以做的最好的事情,并且具有额外的好处每个人都使用相同的、最新的、您可以随意更改/配置的 clang-format 版本,而不必担心将更改推送给每个贡献者以及他们可能对他们的机器有任何限制。
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |