Я хочу настроить clang-format для сортировки включенных заголовков на C ++ следующим образом:
- основной заголовок (связанный с текущим файлом cpp),
- локальные заголовки включены через "",
- другие заголовки включаются с помощью ‹>,
- заголовки из определенных внешних библиотек (например, boost, catch2),
- системные / стандартные заголовки.
Я использую clang-format 8.0.0 на macOS. Моя текущая конфигурация (фрагмент, относящийся только к включенным) выглядит следующим образом:
SortIncludes: true
IncludeBlocks: Regroup
IncludeCategories:
# Headers in <> without extension.
- Regex: '<([A-Za-z0-9\/-_])+>'
Priority: 4
# Headers in <> from specific external libraries.
- Regex: '<((\bboost\b)|(\bcatch2\b))\/([A-Za-z0-9.\/-_])+>'
Priority: 3
# Headers in <> with extension.
- Regex: '<([A-Za-z0-9.\/-_])+>'
Priority: 2
# Headers in "" with extension.
- Regex: '"([A-Za-z0-9.\/-_])+"'
Priority: 1
В этой конфигурации я предполагаю, что системные / стандартные заголовки не имеют расширения. Это не будет работать с заголовками UNIX / POSIX. Главный заголовок определяется автоматически, и ему присваивается приоритет 0. Пока все работает, как ожидалось, за исключением категории для внешних библиотек. Похоже, clang-format присваивает ему приоритет 2.
Ожидаемый результат:
#include "test.h"
#include <allocator/region.hpp>
#include <page.hpp>
#include <page_allocator.hpp>
#include <test_utils.hpp>
#include <utils.hpp>
#include <zone_allocator.hpp>
#include <catch2/catch.hpp> // <--------
#include <array>
#include <cmath>
#include <cstring>
#include <map>
Фактический результат:
#include "test.h"
#include <allocator/region.hpp>
#include <catch2/catch.hpp> // <--------
#include <page.hpp>
#include <page_allocator.hpp>
#include <test_utils.hpp>
#include <utils.hpp>
#include <zone_allocator.hpp>
#include <array>
#include <cmath>
#include <cstring>
#include <map>
Как настроить приоритет 3 для получения ожидаемого результата?