Где найти список доступных опций для проверки Clang-tidy "readability-identifier-naming"?
Случай использования
Я хочу настроить readability-identifier-naming
средство проверки clang-tidy, работающее на моей кодовой базе.
Фон
Средство проверки в clang-tidy может быть снабжено CheckOptions, например:
clang-tidy -checks='-*,readability-identifier-naming' \
-config="{CheckOptions: [ {key: readability-identifier-naming.ClassCase, value: CamelCase} ]}" main.cpp
Опцию также можно указать в файле.clang-tidy.
проблема
Где я могу найти список доступных опций (для readability-identifier-naming
проверьте в этом случае) как например ClassCase
из строки кода выше?
Официальная документация не очень конкретна, говоря только: "Доступно множество параметров конфигурации, чтобы можно было создавать разные правила для разных типов идентификаторов".
Результаты поиска в Google
Я нашел эту страницу на github, которая объясняет это более подробно (но все еще не решает проблему).
Я также нашел огромный список в файле в хранилище Microsoft, но я понятия не имею, откуда они это взяли.
Дальнейшее расследование
Я подумал, что, может быть, Clang-Tidy сбросит все возможные варианты, если об этом попросят. Если вы бежите
clang-tidy -checks=* --dump-config
(или при указании только readability-identifier-naming
шашка. Неважно, результат одинаковый)
clang-tidy -checks='-*,readability-identifier-naming --dump-config
дамп-файл включает в себя только одну опцию в отношении именования идентификаторов читаемости, а именно:
- key: readability-identifier-naming.IgnoreFailedSplit
value: '0'
Я также пытался просмотреть исходный код clang-tidy, но безуспешно.
В конце концов
Я был бы признателен, если бы кто-то мог указать мне место (если оно существует) со списком всех доступных CheckOptions.
1 ответ
Где я могу найти список доступных опций (в данном случае для проверки удобочитаемости идентификаторов-имен), например, ClassCase из строки кода выше?
Список с тех пор появился на странице, на которую вы изначально ссылались здесь.
Я нашел эту страницу на github, где она объясняется более подробно (но все еще не решает проблему).
Теперь это так!
Самый простой способ - посмотреть исходный код тестов для этой проверки здесь:
// RUN: %check_clang_tidy %s readability-identifier-naming %t -- \
// RUN: -config='{CheckOptions: [ \
// RUN: {key: readability-identifier-naming.AbstractClassCase, value: CamelCase}, \
// RUN: {key: readability-identifier-naming.AbstractClassPrefix, value: 'A'}, \
...etc.
Этот список не является исчерпывающим, поскольку для тестирования используется только команда. Чтобы действительно быть уверенным, вам нужно посмотреть исходный код самой проверки здесь, и вы найдете все ключи именования:
#define NAMING_KEYS(m) \
m(Namespace) \
m(InlineNamespace) \
m(EnumConstant) \
...
Эти ключи именования затем строятся в StylenaNames[]
, Тогда посмотрите в IdentifierNamingCheck::storeOptions()
функция:
for (size_t i = 0; i < SK_Count; ++i) {
Options.store(Opts, (StyleNames[i] + "Case").str(),
toString(NamingStyles[i].Case));
Options.store(Opts, (StyleNames[i] + "Prefix").str(),
NamingStyles[i].Prefix);
Options.store(Opts, (StyleNames[i] + "Suffix").str(),
NamingStyles[i].Suffix);
}
и вы увидите, что каждый ключ именования, связанный с регистром, префиксом или суффиксом, может быть указан в качестве опции. Это дает вам полный список возможных вариантов для этой проверки.