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

Bar*_*tek 5 c++ static-analysis clang llvm-clang clang-tidy

用例

我想为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 
Run Code Online (Sandbox Code Playgroud)

也可以在 .clang-tidy 文件中指定一个选项。

问题

我在哪里可以找到可用选项列表(readability-identifier-naming在这种情况下进行检查),例如ClassCase上面的代码行?

官方文档是不是很具体,只说“很多配置选项,为了能够创建不同类型标识符的不同的规则。”

谷歌搜索结果

我在github上找到了这个页面,它更详细地解释了它(但仍然没有解决问题)。

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

进一步的调查

我想,如果需要,也许 clang-tidy 会放弃所有可能的选项。如果你跑

    clang-tidy -checks=* --dump-config
Run Code Online (Sandbox Code Playgroud)

(或仅指定readability-identifier-naming检查器。这并不重要,输出是相同的)

    clang-tidy -checks='-*,readability-identifier-naming --dump-config
Run Code Online (Sandbox Code Playgroud)

转储的文件只包含一个关于可读性标识符命名的选项,即:

      - key:             readability-identifier-naming.IgnoreFailedSplit   
        value:           '0'
Run Code Online (Sandbox Code Playgroud)

我也试图通过 clang-tidy 源代码,但没有成功。

毕竟

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

pab*_*285 0

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

// 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.
Run Code Online (Sandbox Code Playgroud)

该列表不能保证详尽,因为它只是用于测试的命令。为了真正确定,您必须在此处查看检查本身的源代码,您将找到所有命名键:

#define NAMING_KEYS(m) \
    m(Namespace) \
    m(InlineNamespace) \
    m(EnumConstant) \
    ...
Run Code Online (Sandbox Code Playgroud)

然后将这些命名键字符串化为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);
  }
Run Code Online (Sandbox Code Playgroud)

您将看到与大小写、前缀或后缀连接的每个命名键都可以指定为选项。这为您提供了此检查可能选项的明确列表。