Разделите каждую запись в списках, заключенных в фигурные скобки, новой строкой с помощью формата clang

У меня есть заключенные в фигурные скобки списки для инициализации массива. Я хотел бы иметь новую строку инициализаторов массива для каждой записи массива, которая выглядит так:

const char* const array_of_strings[] = {
    "Hey",
    "Hi",
    "Hello",
    "Soup",
    "Atom"
};

Хотя clang-format форматирует этот массив так:

const char *const array_of_strings[] = {"Hey", "Hi", "Hello", "Soup", "Atom"};

обычно новая подкладка, когда список выходит за пределы ColumnLimit. Возможно ли желаемое форматирование с использованием clang-format?


person Taras Palczynski    schedule 10.10.2020    source источник


Ответы (1)


В большинстве случаев это возможно. Вам понадобятся две вещи:

  • Установите для параметра стиля BinPackArguments значение false. Я предполагаю, что clang-format обрабатывает список инициализаторов, заключенный в фигурные скобки, как аргументы. (В документации это действительно не указано, но это кажется разумным.)
  • Используйте функцию запятой после последнего элемента. Для этого добавьте запятую между атомом и закрывающей фигурной скобкой. Эта функция нигде не задокументирована, но она использовалась в формате clang в течение многих версий и много лет.

С обоими вышеперечисленными, а также с настройками формата clang по умолчанию, ваш результат будет выглядеть так:

const char *const array_of_strings[] = {
    "Hey",
    "Hi",
    "Hello",
    "Soup",
    "Atom",
};
person Eric Backus    schedule 14.10.2020
comment
Спасибо, это прекрасно работает! Интересно, что необходима функция запятой после последнего элемента. Без этого clang-format пытается поместить первый элемент и последний элемент в ту же строку, что и скобки. Было бы интересно посмотреть, действительно ли эта функция задокументирована или нет. - person Taras Palczynski; 15.10.2020