mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-27 02:09:54 +00:00
Add a bugprone-argument-comment option: IgnoreSingleArgument.
Summary: Add bugprone-argument-comment option: IgnoreSingleArgument. When true, the check will ignore the single argument. Sometimes, it's not necessary to add comment to single argument. For example: > std::string name("Yubo Xie"); > pScreen->SetWidth(1920); > pScreen->SetHeight(1080); This option can ignore such single argument in bugprone-argument-comment check. Reviewers: alexfh Reviewed By: alexfh Subscribers: cfe-commits Tags: #clang Patch by Yubo Xie. Differential Revision: https://reviews.llvm.org/D67056 llvm-svn: 371075
This commit is contained in:
parent
c3bc697974
commit
42443e50ce
@ -24,6 +24,7 @@ ArgumentCommentCheck::ArgumentCommentCheck(StringRef Name,
|
|||||||
ClangTidyContext *Context)
|
ClangTidyContext *Context)
|
||||||
: ClangTidyCheck(Name, Context),
|
: ClangTidyCheck(Name, Context),
|
||||||
StrictMode(Options.getLocalOrGlobal("StrictMode", 0) != 0),
|
StrictMode(Options.getLocalOrGlobal("StrictMode", 0) != 0),
|
||||||
|
IgnoreSingleArgument(Options.get("IgnoreSingleArgument", 0) != 0),
|
||||||
CommentBoolLiterals(Options.getLocalOrGlobal("CommentBoolLiterals", 0) !=
|
CommentBoolLiterals(Options.getLocalOrGlobal("CommentBoolLiterals", 0) !=
|
||||||
0),
|
0),
|
||||||
CommentIntegerLiterals(
|
CommentIntegerLiterals(
|
||||||
@ -41,6 +42,7 @@ ArgumentCommentCheck::ArgumentCommentCheck(StringRef Name,
|
|||||||
|
|
||||||
void ArgumentCommentCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
|
void ArgumentCommentCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
|
||||||
Options.store(Opts, "StrictMode", StrictMode);
|
Options.store(Opts, "StrictMode", StrictMode);
|
||||||
|
Options.store(Opts, "IgnoreSingleArgument", IgnoreSingleArgument);
|
||||||
Options.store(Opts, "CommentBoolLiterals", CommentBoolLiterals);
|
Options.store(Opts, "CommentBoolLiterals", CommentBoolLiterals);
|
||||||
Options.store(Opts, "CommentIntegerLiterals", CommentIntegerLiterals);
|
Options.store(Opts, "CommentIntegerLiterals", CommentIntegerLiterals);
|
||||||
Options.store(Opts, "CommentFloatLiterals", CommentFloatLiterals);
|
Options.store(Opts, "CommentFloatLiterals", CommentFloatLiterals);
|
||||||
@ -254,7 +256,7 @@ void ArgumentCommentCheck::checkCallArgs(ASTContext *Ctx,
|
|||||||
|
|
||||||
Callee = Callee->getFirstDecl();
|
Callee = Callee->getFirstDecl();
|
||||||
unsigned NumArgs = std::min<unsigned>(Args.size(), Callee->getNumParams());
|
unsigned NumArgs = std::min<unsigned>(Args.size(), Callee->getNumParams());
|
||||||
if (NumArgs == 0)
|
if ((NumArgs == 0) || (IgnoreSingleArgument && NumArgs == 1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto MakeFileCharRange = [Ctx](SourceLocation Begin, SourceLocation End) {
|
auto MakeFileCharRange = [Ctx](SourceLocation Begin, SourceLocation End) {
|
||||||
|
@ -41,6 +41,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
const unsigned StrictMode : 1;
|
const unsigned StrictMode : 1;
|
||||||
|
const unsigned IgnoreSingleArgument : 1;
|
||||||
const unsigned CommentBoolLiterals : 1;
|
const unsigned CommentBoolLiterals : 1;
|
||||||
const unsigned CommentIntegerLiterals : 1;
|
const unsigned CommentIntegerLiterals : 1;
|
||||||
const unsigned CommentFloatLiterals : 1;
|
const unsigned CommentFloatLiterals : 1;
|
||||||
|
@ -28,6 +28,9 @@ Options
|
|||||||
underscores and case when comparing names -- otherwise they are taken into
|
underscores and case when comparing names -- otherwise they are taken into
|
||||||
account.
|
account.
|
||||||
|
|
||||||
|
.. option:: IgnoreSingleArgument
|
||||||
|
When true, the check will ignore the single argument.
|
||||||
|
|
||||||
.. option:: CommentBoolLiterals
|
.. option:: CommentBoolLiterals
|
||||||
|
|
||||||
When true, the check will add argument comments in the format
|
When true, the check will add argument comments in the format
|
||||||
|
@ -0,0 +1,97 @@
|
|||||||
|
// RUN: %check_clang_tidy %s bugprone-argument-comment %t -- \
|
||||||
|
// RUN: -config="{CheckOptions: [{key: bugprone-argument-comment.IgnoreSingleArgument, value: 1}, {key: CommentBoolLiterals, value: 1},{key: CommentIntegerLiterals, value: 1}, {key: CommentFloatLiterals, value: 1}, {key: CommentUserDefinedLiterals, value: 1}, {key: CommentStringLiterals, value: 1}, {key: CommentNullPtrs, value: 1}, {key: CommentCharacterLiterals, value: 1}]}" --
|
||||||
|
|
||||||
|
struct A {
|
||||||
|
void foo(bool abc);
|
||||||
|
void foo(bool abc, bool cde);
|
||||||
|
void foo(const char *, bool abc);
|
||||||
|
void foo(int iabc);
|
||||||
|
void foo(float fabc);
|
||||||
|
void foo(double dabc);
|
||||||
|
void foo(const char *strabc);
|
||||||
|
void fooW(const wchar_t *wstrabc);
|
||||||
|
void fooPtr(A *ptrabc);
|
||||||
|
void foo(char chabc);
|
||||||
|
};
|
||||||
|
|
||||||
|
#define FOO 1
|
||||||
|
|
||||||
|
void g(int a);
|
||||||
|
void h(double b);
|
||||||
|
void i(const char *c);
|
||||||
|
|
||||||
|
double operator"" _km(long double);
|
||||||
|
|
||||||
|
void test() {
|
||||||
|
A a;
|
||||||
|
|
||||||
|
a.foo(true);
|
||||||
|
|
||||||
|
a.foo(false);
|
||||||
|
|
||||||
|
a.foo(true, false);
|
||||||
|
// CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
|
||||||
|
// CHECK-MESSAGES: [[@LINE-2]]:15: warning: argument comment missing for literal argument 'cde' [bugprone-argument-comment]
|
||||||
|
// CHECK-FIXES: a.foo(/*abc=*/true, /*cde=*/false);
|
||||||
|
|
||||||
|
a.foo(false, true);
|
||||||
|
// CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
|
||||||
|
// CHECK-MESSAGES: [[@LINE-2]]:16: warning: argument comment missing for literal argument 'cde' [bugprone-argument-comment]
|
||||||
|
// CHECK-FIXES: a.foo(/*abc=*/false, /*cde=*/true);
|
||||||
|
|
||||||
|
a.foo(/*abc=*/false, true);
|
||||||
|
// CHECK-MESSAGES: [[@LINE-1]]:24: warning: argument comment missing for literal argument 'cde' [bugprone-argument-comment]
|
||||||
|
// CHECK-FIXES: a.foo(/*abc=*/false, /*cde=*/true);
|
||||||
|
|
||||||
|
a.foo(false, /*cde=*/true);
|
||||||
|
// CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
|
||||||
|
// CHECK-FIXES: a.foo(/*abc=*/false, /*cde=*/true);
|
||||||
|
|
||||||
|
bool val1 = true;
|
||||||
|
bool val2 = false;
|
||||||
|
a.foo(val1, val2);
|
||||||
|
|
||||||
|
a.foo("", true);
|
||||||
|
// CHECK-MESSAGES: [[@LINE-1]]:13: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment]
|
||||||
|
// CHECK-FIXES: a.foo("", /*abc=*/true);
|
||||||
|
|
||||||
|
a.foo(0);
|
||||||
|
|
||||||
|
a.foo(1.0f);
|
||||||
|
|
||||||
|
a.foo(1.0);
|
||||||
|
|
||||||
|
int val3 = 10;
|
||||||
|
a.foo(val3);
|
||||||
|
|
||||||
|
float val4 = 10.0;
|
||||||
|
a.foo(val4);
|
||||||
|
|
||||||
|
double val5 = 10.0;
|
||||||
|
a.foo(val5);
|
||||||
|
|
||||||
|
a.foo("Hello World");
|
||||||
|
|
||||||
|
a.fooW(L"Hello World");
|
||||||
|
|
||||||
|
a.fooPtr(nullptr);
|
||||||
|
|
||||||
|
a.foo(402.0_km);
|
||||||
|
|
||||||
|
a.foo('A');
|
||||||
|
|
||||||
|
g(FOO);
|
||||||
|
|
||||||
|
h(1.0f);
|
||||||
|
|
||||||
|
i(__FILE__);
|
||||||
|
|
||||||
|
g((1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void f(bool _with_underscores_);
|
||||||
|
void ignores_underscores() {
|
||||||
|
f(false);
|
||||||
|
|
||||||
|
f(true);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user