У меня есть некоторый код C ++ 11 с clang-format правилами, который использует нормальный отступ (IndentWidth
) 4 и отступ продолжения (ContinuationIndentWidth
) 8. Так выглядит длинная функция как то так:
// 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 , если это 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,
},
};
Как получить формат clang для форматирования этих списков, не изменяя отступ продолжения из 8 пробелов, который я использую в другом месте кода?
N.B. Версия в формате clang - 7.0.1 (tags/RELEASE_701/final)
, но в разных версиях это выглядит одинаково, согласно конфигуратору .
Простой .clang-format
файл, который применяет соответствующие правила в том виде, в каком они в настоящее время:
BasedOnStyle: LLVM
BreakBeforeBraces: Allman
ContinuationIndentWidth: 8
ColumnLimit: 72
Cpp11BracedListStyle: false
IndentWidth: 4