Index: clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.h =================================================================== --- clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.h +++ clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.h @@ -41,6 +41,7 @@ private: const unsigned StrictMode : 1; + const unsigned IgnoreSingleArgument : 1; const unsigned CommentBoolLiterals : 1; const unsigned CommentIntegerLiterals : 1; const unsigned CommentFloatLiterals : 1; Index: clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp @@ -24,6 +24,7 @@ ClangTidyContext *Context) : ClangTidyCheck(Name, Context), StrictMode(Options.getLocalOrGlobal("StrictMode", 0) != 0), + IgnoreSingleArgument(Options.get("IgnoreSingleArgument", 0) != 0), CommentBoolLiterals(Options.getLocalOrGlobal("CommentBoolLiterals", 0) != 0), CommentIntegerLiterals( @@ -41,6 +42,7 @@ 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); @@ -254,7 +256,7 @@ Callee = Callee->getFirstDecl(); unsigned NumArgs = std::min(Args.size(), Callee->getNumParams()); - if (NumArgs == 0) + if ((NumArgs == 0) || (IgnoreSingleArgument && NumArgs == 1)) return; auto MakeFileCharRange = [Ctx](SourceLocation Begin, SourceLocation End) { Index: clang-tools-extra/trunk/docs/clang-tidy/checks/bugprone-argument-comment.rst =================================================================== --- clang-tools-extra/trunk/docs/clang-tidy/checks/bugprone-argument-comment.rst +++ clang-tools-extra/trunk/docs/clang-tidy/checks/bugprone-argument-comment.rst @@ -28,6 +28,9 @@ 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 Index: clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-ignore-single-argument.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-ignore-single-argument.cpp +++ clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-ignore-single-argument.cpp @@ -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); +}