Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add bugprone-argument-comment option: IgnoreSingleArgument. #25

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -24,6 +24,8 @@ ArgumentCommentCheck::ArgumentCommentCheck(StringRef Name,
ClangTidyContext *Context)
: ClangTidyCheck(Name, Context),
StrictMode(Options.getLocalOrGlobal("StrictMode", 0) != 0),
IgnoreSingleArgument(
Options.getLocalOrGlobal("IgnoreSingleArgument", 0) != 0),
CommentBoolLiterals(Options.getLocalOrGlobal("CommentBoolLiterals", 0) !=
0),
CommentIntegerLiterals(
Expand All @@ -41,6 +43,7 @@ ArgumentCommentCheck::ArgumentCommentCheck(StringRef Name,

void ArgumentCommentCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
Options.store(Opts, "StrictMode", StrictMode);
Options.store(Opts, "IgnoreSingleArgument", IgnoreSingleArgument);
Options.store(Opts, "CommentBoolLiterals", CommentBoolLiterals);
Options.store(Opts, "CommentIntegerLiterals", CommentIntegerLiterals);
Options.store(Opts, "CommentFloatLiterals", CommentFloatLiterals);
Expand Down Expand Up @@ -252,7 +255,7 @@ void ArgumentCommentCheck::checkCallArgs(ASTContext *Ctx,

Callee = Callee->getFirstDecl();
unsigned NumArgs = std::min<unsigned>(Args.size(), Callee->getNumParams());
if (NumArgs == 0)
if ((NumArgs == 0) || (IgnoreSingleArgument && NumArgs == 1))
return;

auto MakeFileCharRange = [Ctx](SourceLocation Begin, SourceLocation End) {
Expand Down
Expand Up @@ -41,6 +41,7 @@ class ArgumentCommentCheck : public ClangTidyCheck {

private:
const unsigned StrictMode : 1;
const unsigned IgnoreSingleArgument : 1;
const unsigned CommentBoolLiterals : 1;
const unsigned CommentIntegerLiterals : 1;
const unsigned CommentFloatLiterals : 1;
Expand Down
Expand Up @@ -28,6 +28,9 @@ Options
underscores and case when comparing names -- otherwise they are taken into
account.

.. option:: IgnoreSingleArgument
When true, the check will ignore the single argument.

.. option:: CommentBoolLiterals

When true, the check will add argument comments in the format
Expand Down
@@ -0,0 +1,97 @@
// RUN: %check_clang_tidy %s bugprone-argument-comment %t -- \
// RUN: -config="{CheckOptions: [{key: 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);
}