我有一些带有clang-format规则的C ++ 11代码,该规则使用4的普通缩进(IndentWidth
)和8的连续缩进(ContinuationIndentWidth
)。所以长函数看起来像这样的东西:
// All indented "correctly"
void this_function_has_a_very_long_name_and_lots_of_parameters(
int parameter_a, int parameter_b, int parameter_c)
{
this_function_has_a_very_long_name_and_lots_of_parameters(
parameter_a, parameter_b, parameter_c);
}
但是,我也有类似的数据(请注意最后一个逗号,以防止垃圾箱包装并使每行中的内容保持一个-在现实生活中,这些数字不只是1,2,3):
static std::vector<std::vector<int>> data{
{
1, // Comment
2,
3, // Comment
},
};
考虑到Cpp11BracedListStyle
设置为false
,以上是我的预期外观,因此应使用块缩进(4),而不是连续缩进(8)。在clang-format docs中,如果是true
:
“重要区别:-括号列表内没有空格。-无行 在大括号前中断。 -缩进与延续 缩进,而不是块缩进。”
因此,我希望看到使用的“块缩进”(4)。但是,我实际上得到的是:
static std::vector<std::vector<int>> data{
{
1, // Comment - indented by 4 + 8!
2,
3, // Comment
},
};
如您所见,“内部”初始化程序列表以8缩进,但外部列表的元素仅以4缩进(如预期)。
如果我将Cpp11BracedListStyle
更改为true
,则所有级别都缩进8(根据文档的预期):
static std::vector<std::vector<int>> data{
{
1,
2,
3,
},
};
如何在不更改代码其他地方使用的8位连续缩进形式的情况下,用clang-format格式化这些列表?
lang格式的版本为7.0.1 (tags/RELEASE_701/final)
,但根据configurator,此行为在各种版本中似乎是相同的。
应用相关规则的简单.clang-format
文件是:
BasedOnStyle: LLVM
BreakBeforeBraces: Allman
ContinuationIndentWidth: 8
ColumnLimit: 72
Cpp11BracedListStyle: false
IndentWidth: 4