我的代码包含数据表或参数表,这些表在列中对齐如下(设计的简单示例;实际代码有更大的表):
// 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格式并自动运行,但这个问题阻碍了我们这样做。我们可以手动浏览并将所有这些案例包装在// clang-format off/on
标签中,但那是手工劳动。
有没有办法设置clang-format来保持这样的表格,甚至自动表格化新代码?
答案 0 :(得分:2)
您将无法获得clang格式来遵守所有自定义内部格式,并且它们的documentation on adding new style options非常严格。在现有代码库中采用clang-format要求 some 妥协。这是这些妥协之一。
在您所处的环境中,我是一个庞大的代码库,其中有数十名工程师以自己的方式进行了固定,并且不愿意更改其内部编码标准。我做了几个大型的重构,这些修复有数周的时间间隔。不是很好的利用时间。
我无法浏览标准化遗留格式的政策。采用Clang-Formats的前提是要尊重我们的传统格式。
我的解决方案是编写一个包装脚本,该脚本将读取文件,检测内部奇数(在您的情况下,仅查找'='和''的长注释)并将它们夹在clang格式的指令中:
// 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格式进行管道传输。然后在输出中找到AddedByYourTool,并删除周围的clang格式。 (您需要该令牌,以免删除现有的clang格式错误)。
很烂。这是一个可怕的解决方案,但是除非您有能力命令该格式终止运行,或者没有政治技巧来谈判使其终止运行,或者除非您有剩余职业生涯需要手动重新设置格式,否则这是唯一的真正解决方案。