У меня проблема с поиском основного включения для моих исходных файлов. Но пошагово.
Файл z.h
#include "test"
#include "azd"
#include <vector>
#include <boost/something>
#include <map>
Файл z.C
#include "test"
#include "azd"
#include <vector>
#include <boost/something>
#include <map>
#include "z.h"
Файл (часть) .clang-формата, расположенный вместе с z.h и z.C
BasedOnStyle: LLVM
Language: Cpp
IncludeIsMainRegex: '(_test)?$'
IncludeCategories:
- Regex: '^(<boost)'
Priority: 3
- Regex: '^<'
Priority: 4
- Regex: '.*'
Priority: 1
Теперь тестирование:
$ clang-format z.h
#include "azd"
#include "test"
#include <boost/something>
#include <map>
#include <vector>
Здесь все выглядит отлично, включает отсортировано как положено, но
$ clang-format z.C
#include "azd"
#include "test"
#include "z.h"
#include <boost/something>
#include <map>
#include <vector>
Здесь "a.z" находится посередине, хотя он должен быть обнаружен '(_test)? $' Как main include. Самое смешное, что когда я переименовываю z.C -> z.cc, а затем:
$ clang-format z.cc
#include "z.h"
#include "azd"
#include "test"
#include <boost/something>
#include <map>
#include <vector>
работает нормально ...
Кажется, что clang-format не распознает файлы * .C как язык C ++. Я работаю над проектом C ++, где у меня нет возможности переименовать все файлы * .C в * .cc, поэтому, пожалуйста, может кто-нибудь сказать мне, как заставить clang-format использовать форматирование стиля C ++ для файлов * .C? Или решить эту проблему с поиском основного включения другим подходом?
И второй вопрос / вопрос. Иногда мы разделяем объявления и определения шаблонов на файлы template.h и templateImpl.h. Как заставить clang-format обрабатывать templateImpl.h как источник и помещать #include "template.h" в качестве основного include?
С Уважением