Отступы в формате Clang для внутренних инициализаторов с отступом продолжения - PullRequest
0 голосов
/ 10 января 2019

У меня есть некоторый код 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
...