gpt4 book ai didi

c++ - 如何使 clang-format 尊重 "table-like"代码格式

转载 作者:行者123 更新时间:2023-12-03 06:49:27 32 4
gpt4 key购买 nike

我有这样的代码,其中的数据或参数表按如下所示的列对齐(人为的简单示例;实际代码具有更大的表):

//        Name    Size    Starting val
// ======= ======= ============
S s = {
{ "Dubs", abc, 123 },
{ "X", n, m },
{ "YZ", ij / q, kl }
};

// Name Size Starting val
// ======= ======= ============
w = Create( "Dubs", abc, 123 );
x = Create( "X", n, m );
yz = Create( "YZ", ij / q, kl );

clang-format杀死表格式:
//        Name    Size    Starting val
// ======= ======= ============
S s = {
{ "Dubs", abc, 123 },
{ "X", n, m },
{ "YZ", ij / q, kl }
};

// Name Size Starting val
// ======= ======= ============
w = Create( "Dubs", abc, 123 );
x = Create( "X", n, m );
yz = Create( "YZ", ij / q, kl );

我们的团队希望采用 clang-format 并自动运行它,但是这个问题使我们无法这样做。我们可以手动检查所有此类情况并将其包装在 // clang-format off/on标记中,但这是手工劳动。

有没有办法设置 clang-format 来保留这样的表,甚至自动地对新代码进行表大小化?

最佳答案

您将无法获得 clang-format 来尊重所有自定义内部格式,并且它们的documentation on adding new style options非常严格。在现有代码库中采用 clang-format 需要做出一些妥协。这是这些妥协之一。
我当时遇到的情况是,一个庞大的代码库,其中有数十名工程师以自己的方式进行了固定,并且不愿意更改其内部编码标准。我做了几个大型的重构​​,这些修复有数周的时间来固定间隔。没有很好的利用时间。
我无法浏览标准化遗留格式的政策。采用Clang-Formats的前提是要尊重我们的传统格式。
我的解决方案是编写一个包装脚本,该脚本将读取文件,检测内部奇数(在您的情况下,仅查找'='和''的长注释)并将它们夹在 clang-format 的指令中:

// clang-format off
// AddedByYourTool
// Name Size Starting val
// ======= ======= ============
w = Create( "Dubs", abc, 123 );
x = Create( "X", n, m );
yz = Create( "YZ", ij / q, kl );
// clang-format on
然后它将通过 clang-format 进行管道传输。然后在输出中找到AddedByYourTool,并删除周围的 clang-format 。 (您需要该 token ,以便不删除现有的 clang-format 标记)。
糟透了这是一个可怕的解决方案,但是除非您有能力命令该格式终止运行,或者没有政治技巧来谈判使其终止运行,或者感觉像在整个职业生涯中都需要手动重新格式化,否则,这才是唯一真正的解决方案。

关于c++ - 如何使 clang-format 尊重 "table-like"代码格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38022831/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com