Где найти список доступных опций для проверки 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);
  }

и вы увидите, что каждый ключ именования, связанный с регистром, префиксом или суффиксом, может быть указан в качестве опции. Это дает вам полный список возможных вариантов для этой проверки.

Другие вопросы по тегам