在 clang-tidy 中,如何设置接受数字列表的检查选项

In clang-tidy, how to set a check option that accepts at list of numbers

我正在使用带有 .clang-tidy 配置文件的 clang-tidy。文件被正确读取,我可以设置任何类型的检查选项,但将数字列表作为值的检查选项除外。

这是我的 .clang-tidy 文件,它试图设置检查选项 modernize-use-nullptr.NullMacrosreadability-magic-numbers.IgnoredIntegerValues:

Checks: 'modernize-use-nullptr,readability-magic-numbers'
CheckOptions:
  - key:             modernize-use-nullptr.NullMacros
    value:           IT_WORKS_WITH_A_SIMPLE_VALUE
  - key:             readability-magic-numbers.IgnoredIntegerValues
    value:           '5;6;7;8;'

当我使用 --dump-config 选项 运行 clang-tidy 时,我得到以下结果:

---
Checks:          'clang-diagnostic-*,clang-analyzer-*,modernize-use-nullptr,readability-magic-numbers'
WarningsAsErrors: ''
HeaderFilterRegex: ''
AnalyzeTemporaryDtors: false
FormatStyle:     none
User:            user
CheckOptions:
  - key:             cert-dcl16-c.NewSuffixes
    value:           'L;LL;LU;LLU'
  - key:             cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField
    value:           '0'
  - key:             cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors
    value:           '1'
  - key:             cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic
    value:           '1'
  - key:             google-readability-braces-around-statements.ShortStatementLines
    value:           '1'
  - key:             google-readability-function-size.StatementThreshold
    value:           '800'
  - key:             google-readability-namespace-comments.ShortNamespaceLines
    value:           '10'
  - key:             google-readability-namespace-comments.SpacesBeforeComments
    value:           '2'
  - key:             modernize-loop-convert.MaxCopySize
    value:           '16'
  - key:             modernize-loop-convert.MinConfidence
    value:           reasonable
  - key:             modernize-loop-convert.NamingStyle
    value:           CamelCase
  - key:             modernize-pass-by-value.IncludeStyle
    value:           llvm
  - key:             modernize-replace-auto-ptr.IncludeStyle
    value:           llvm
  - key:             modernize-use-nullptr.NullMacros
    value:           IT_WORKS_WITH_A_SIMPLE_VALUE
  - key:             readability-magic-numbers.IgnoredFloatingPointValues
    value:           '1.0;100.0;'
  - key:             readability-magic-numbers.IgnoredIntegerValues
    value:           '1;2;3;4;'
...

如您所见,modernize-use-nullptr.NullMacros 检查选项设置正确,但 readability-magic-numbers.IgnoredIntegerValues 检查选项未设置。

我认为这可能是语法问题,但我使用的语法与 --dump-config 给出的语法相同,根据 clang-tidy 文档,这应该是正确的语法。

如何设置 readability-magic-numbers.IgnoredIntegerValues 检查选项?

运行 clang-tidy --version 给出以下结果:

LLVM (http://llvm.org/):
  LLVM version 9.0.1
  Optimized build.
  Default target: x86_64-pc-linux-gnu
  Host CPU: ivybridge

这似乎是 --dump-config 中的错误,仅用于 readability-magic-numbers 检查。据我所知,你的 clang-tidy 文件工作得很好。

我 运行 clang-tidy 与您的 .clang-tidy 文件有关此示例代码:

int badGlobalInt = 5;

int main()
{
    int badLocalInt = 8;
    int unfilteredBadLocalInt = 9;
    return 0;
}

命令行:

N:\xxx>clang-tidy.exe xxx.cpp --

结果如预期:

1 warning generated.
N:\xxx\xxx.cpp:6:30: warning: 9 is a magic number; consider replacing it with a named constant [readability-magic-numbers]
        int unfilteredBadLocalInt = 9;
                                    ^

clang-tidy 9 和 10 的结果完全相同。

FWIW 我在我的配置中使用了更多 JSON-like 语法,它会产生你从一个微妙不同的输入中看到的输出:

- { key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic, value: 1 }

注意值前的逗号和大括号。被转储为

- key:             cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic
  value:           '1'

似乎有一些灵活性,而且由于我有一个宽屏幕,垂直对齐的长行使阅读更容易。