Где найти список доступных опций для проверки Clang-tidy "readability-identifier-naming"? - PullRequest
0 голосов
/ 15 января 2019

Вариант использования

Я хочу настроить 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 checker. Это не имеет значения, вывод тот же)

    clang-tidy -checks='-*,readability-identifier-naming --dump-config

дамп-файл включает в себя только одну опцию в отношении именования идентификаторов читаемости:

      - key:             readability-identifier-naming.IgnoreFailedSplit   
        value:           '0'

Я также пытался просмотреть исходный код clang-tidy, но безуспешно.

Ведь

Буду признателен, если кто-нибудь сможет указать мне место (если оно существует) со списком всех доступных CheckOptions.

1 Ответ

0 голосов
/ 18 января 2019

Самый простой способ - заглянуть в исходный код tests для этой проверки здесь :

// 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);
  }

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

...