Я пытаюсь внедрить clang-формат в довольно большой проект на C ++. Все идет так хорошо, за исключением нескольких случаев. Больше всего раздражает результат форматирования при инициализации карты. Я попытался найти флаги в формате clang или какое-либо решение, выполнив поиск в Google, но я ничего не нашел. Фрагмент проблемного кода:
// before formatting
const std::map<std::type_index, void *> functionMap{
{typeid(DummyClassAAAAA), (bool (*)(const DummyClassAAAAA &, const DummyClassAAAAA &)) &operator== },
{typeid(DummyClassBBBB), (bool (*)(const DummyClassBBBB &, const DummyClassBBBB &)) &operator== },
{typeid(DummyClassCCC), (bool (*)(const DummyClassCCC &, const DummyClassCCC &)) &operator== },
{typeid(DummyClassDDDDDDDDD), (bool (*)(const DummyClassDDDDDDDDD &, const DummyClassDDDDDDDDD &)) &operator== },
{typeid(DummyClassEEEEEEE), (bool (*)(const DummyClassEEEEEEE &, const DummyClassEEEEEEE &)) &operator== },
{typeid(DummyClassFFFFFFFFFF), (bool (*)(const DummyClassFFFFFFFFFF &, const DummyClassFFFFFFFFFF &)) &operator== }
};
// after formatting
const auto functionMap = std::map<std::type_index, void *>{{typeid(DummyClassAAAAA),
(bool (*)(const DummyClassAAAAA &, const DummyClassAAAAA &)) &operator== },
{typeid(DummyClassBBBB), (bool (*)(const DummyClassBBBB &, const DummyClassBBBB &)) &operator== },
{typeid(DummyClassCCC), (bool (*)(const DummyClassCCC &, const DummyClassCCC &)) &operator== },
{typeid(DummyClassDDDDDDDDD), (bool (*)(const DummyClassDDDDDDDDD &, const DummyClassDDDDDDDDD &)) &operator== },
{typeid(DummyClassEEEEEEE), (bool (*)(const DummyClassEEEEEEE &, const DummyClassEEEEEEE &)) &operator== },
{typeid(DummyClassFFFFFFFFFF),
(bool (*)(const DummyClassFFFFFFFFFF &, const DummyClassFFFFFFFFFF &)) &operator== } };
Мой .clang-format
файл:
UseTab: Never
IndentWidth: 2
BreakBeforeBraces: Allman
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AllowShortFunctionsOnASingleLine: false
ColumnLimit: 120
ContinuationIndentWidth: 2
ConstructorInitializerIndentWidth: 2
PointerAlignment: Right
DerivePointerAlignment: false
AlignAfterOpenBracket: DontAlign
AllowShortBlocksOnASingleLine: false
SpaceAfterTemplateKeyword: false
AlwaysBreakTemplateDeclarations: Yes
AlignTrailingComments: true
IndentCaseLabels: true
BreakBeforeBinaryOperators: NonAssignment
AllowAllParametersOfDeclarationOnNextLine: false
Я использую clang-format version 9.0.0 (tags/RELEASE_900/final)
в Windows.
Единственное требование здесь - каждая пара в списке инициализации должна начинаться с новой строки, но в том же столбце. Я бы не хотел отключать clang-format для любого фрагмента кода, поэтому я действительно хотел бы решить эту проблему, настроив clang-format для получения правильного вывода.
Есть идеи, как это решить? Может быть, если нет способа добиться этого, не мог бы кто-нибудь предоставить доказательства этого?
Изменить - Решение
После добавления дополнительных фигурных скобок результат будет выглядеть так:
const std::map<std::type_index, void *> functionMap{
{typeid(DummyClassAAAAA), ((bool (*)(const DummyClassAAAAA &, const DummyClassAAAAA &)) & operator==)},
{typeid(DummyClassBBBB), ((bool (*)(const DummyClassBBBB &, const DummyClassBBBB &)) & operator==)},
{typeid(DummyClassCCC), ((bool (*)(const DummyClassCCC &, const DummyClassCCC &)) & operator==)},
{typeid(DummyClassDDDDDDDDD), ((bool (*)(const DummyClassDDDDDDDDD &, const DummyClassDDDDDDDDD &)) & operator==)},
{typeid(DummyClassEEEEEEE), ((bool (*)(const DummyClassEEEEEEE &, const DummyClassEEEEEEE &)) & operator==)},
{typeid(DummyClassFFFFFFFFFF), ((bool (*)(const DummyClassFFFFFFFFFF &, const DummyClassFFFFFFFFFF &)) & operator==)},
};
{typeid(DummyClassAAAAA), ((bool (*)(const DummyClassAAAAA &, const DummyClassAAAAA &)) &operator==) }
- person t.niese   schedule 08.12.2019