Author: alexfh Date: Thu Sep 5 07:48:23 2019 New Revision: 371075 URL: http://llvm.org/viewvc/llvm-project?rev=371075&view=rev Log: 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 Added: clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-ignore-single-argument.cpp Modified: clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.h clang-tools-extra/trunk/docs/clang-tidy/checks/bugprone-argument-comment.rst Modified: clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp?rev=371075&r1=371074&r2=371075&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp Thu Sep 5 07:48:23 2019 @@ -24,6 +24,7 @@ ArgumentCommentCheck::ArgumentCommentChe 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 @@ ArgumentCommentCheck::ArgumentCommentChe 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 @@ void ArgumentCommentCheck::checkCallArgs 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) { Modified: clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.h?rev=371075&r1=371074&r2=371075&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.h (original) +++ clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.h Thu Sep 5 07:48:23 2019 @@ -41,6 +41,7 @@ public: private: const unsigned StrictMode : 1; + const unsigned IgnoreSingleArgument : 1; const unsigned CommentBoolLiterals : 1; const unsigned CommentIntegerLiterals : 1; const unsigned CommentFloatLiterals : 1; Modified: clang-tools-extra/trunk/docs/clang-tidy/checks/bugprone-argument-comment.rst URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/bugprone-argument-comment.rst?rev=371075&r1=371074&r2=371075&view=diff ============================================================================== --- clang-tools-extra/trunk/docs/clang-tidy/checks/bugprone-argument-comment.rst (original) +++ clang-tools-extra/trunk/docs/clang-tidy/checks/bugprone-argument-comment.rst Thu Sep 5 07:48:23 2019 @@ -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 Added: clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-ignore-single-argument.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-ignore-single-argument.cpp?rev=371075&view=auto ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-ignore-single-argument.cpp (added) +++ clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-ignore-single-argument.cpp Thu Sep 5 07:48:23 2019 @@ -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); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits