在 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.NullMacros
和 readability-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'
似乎有一些灵活性,而且由于我有一个宽屏幕,垂直对齐的长行使阅读更容易。
我正在使用带有 .clang-tidy
配置文件的 clang-tidy。文件被正确读取,我可以设置任何类型的检查选项,但将数字列表作为值的检查选项除外。
这是我的 .clang-tidy
文件,它试图设置检查选项 modernize-use-nullptr.NullMacros
和 readability-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'
似乎有一些灵活性,而且由于我有一个宽屏幕,垂直对齐的长行使阅读更容易。