在哪里可以找到整洁的“可读性-标识符-命名”检查器的可用选项列表?

时间:2019-01-15 15:33:05

标签: c++ clang static-analysis llvm-clang clang-tidy

用例

我想为在我的代码库上运行的clang-tidy配置readability-identifier-naming检查器。

背景

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

official documentation并不是很具体,只是说“许多配置选项可用,以便能够为不同种类的标识符创建不同的规则。”

Google搜索结果

我在github上发现了this page,对此进行了更详细的解释(但仍然无法解决问题)。

我还在Microsoft's repository的文件中找到了一个巨大的列表,但我不知道他们从哪里得到的。

进一步调查

我认为,如果要求的话,也许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'

我还试图浏览整洁的源代码,但没有成功。

毕竟

如果有人可以将我指向包含所有可用CheckOptions列表的地方(如果存在),我将不胜感激。

2 个答案:

答案 0 :(得分:1)

我在哪里找到可用选项的列表(在这种情况下用于可读性标识符命名检查),例如上面的代码行中的ClassCase?

此后,此列表已出现在您最初链接到here的页面上。

我在github上发现了this page,对此进行了更详细的解释(但仍然不能解决问题)。

现在可以了!

答案 1 :(得分:0)

最简单的方法是查看此检查here测试的源代码:

// 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.

此列表不能保证是详尽无遗的,因为它只是用于测试的命令。要真正确定,您必须查看支票本身的here的源代码,并找到所有的命名键:

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

,您将看到每个与Case,Prefix或Suffix并置的命名键都可以指定为选项。这为您提供了此检查的可能选项的明确列表。