clang-формат удаляет новые строки в определении массива с помощью обозначений

Мне нравится определять значения моего массива с помощью указателя, когда это возможно:

enum Mode {
    NONE,
    SPLIT_FILES,
    SINGLE_FILE,
    INVALID
};

const std::string ModeName[] = {
    [NONE] = "NONE",
    [SPLIT_FILES] = "SPLIT_FILES",
    [SINGLE_FILE] = "SINGLE_FILE",
    [INVALID] = "INVALID"
};

Выполнение этого через clang-format (3.5) искажает новые строки и делает их менее читабельными:

enum RecorderMode { REC_NONE, REC_SPLIT_FILES, REC_SINGLE_FILE, REC_INVALID };

const std::string RecorderModeName[]
    = {[REC_NONE] = "NONE", [REC_SPLIT_FILES] = "SPLIT_FILES", [REC_SINGLE_FILE] = "SINGLE_FILE",
       [REC_INVALID] = "INVALID" };

Определение массива имеет несколько проблем: = { перемещается на следующую строку. Если я добавлю запятую после последней записи массива, строки будут сдавлены дважды.

Есть ли способ сохранить новые строки и отступы, если не использовать clang-format отключить комментарий?

Это показывает обходной путь для enum (добавьте запятую после последней константы или добавьте завершающий комментарий после запятой), но, похоже, это не относится к массиву.

2 ответа

Решение

Этот ответ дал мне приемлемый обходной путь:

Задавать ColumnLimit до 0. Компромисс в том, что ни одна строка автоматически не переносится, но это того стоит. Все программисты на работе, как правило, не пишут последние 120 колонок.

Комментарии на каждой строке также работает.

enum Mode {
  NONE,         // Comments
  SPLIT_FILES,  // On
  SINGLE_FILE,  // Every
  INVALID       // Line
};
Другие вопросы по тегам