Author: alexfh Date: Wed Sep 4 09:19:32 2019 New Revision: 370919 URL: http://llvm.org/viewvc/llvm-project?rev=370919&view=rev Log: [clang-tidy] Fix bugprone-argument-comment bug if there are marcos.
Summary: Fix bugprone-argument-comment bug if there are marcos. For example: ``` void j(int a, int b, int c); j(X(1), /*b=*/1, X(1)); ``` clang-tidy can't recognize comment "/*b=*/". It suggests fix like this: ``` j(X(1), /*b=*//*b=*/1, X(1)); ``` This change tries to fix this issue. Reviewers: alexfh, hokein, aaron.ballman Reviewed By: alexfh Subscribers: xazax.hun, cfe-commits Tags: #clang, #clang-tools-extra Patch by Yubo Xie. Differential Revision: https://reviews.llvm.org/D67080 Modified: clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-literals.cpp 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=370919&r1=370918&r2=370919&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/bugprone/ArgumentCommentCheck.cpp Wed Sep 4 09:19:32 2019 @@ -286,8 +286,8 @@ void ArgumentCommentCheck::checkCallArgs Comments = getCommentsInRange(Ctx, BeforeArgument); } else { // Fall back to parsing back from the start of the argument. - CharSourceRange ArgsRange = MakeFileCharRange( - Args[I]->getBeginLoc(), Args[NumArgs - 1]->getEndLoc()); + CharSourceRange ArgsRange = + MakeFileCharRange(Args[I]->getBeginLoc(), Args[I]->getEndLoc()); Comments = getCommentsBeforeLoc(Ctx, ArgsRange.getBegin()); } Modified: clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-literals.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-literals.cpp?rev=370919&r1=370918&r2=370919&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-literals.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/bugprone-argument-comment-literals.cpp Wed Sep 4 09:19:32 2019 @@ -15,10 +15,12 @@ struct A { }; #define FOO 1 +#define X(x) (x) void g(int a); void h(double b); void i(const char *c); +void j(int a, int b, int c); double operator"" _km(long double); @@ -106,6 +108,39 @@ void test() { // CHECK-FIXES: h(/*b=*/1.0f); i(__FILE__); + j(1, X(1), X(1)); + // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'a' [bugprone-argument-comment] + // CHECK-FIXES: j(/*a=*/1, X(1), X(1)); + j(/*a=*/1, X(1), X(1)); + + j(X(1), 1, X(1)); + // CHECK-MESSAGES: [[@LINE-1]]:11: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment] + // CHECK-FIXES: j(X(1), /*b=*/1, X(1)); + j(X(1), /*b=*/1, X(1)); + + j(X(1), X(1), 1); + // CHECK-MESSAGES: [[@LINE-1]]:17: warning: argument comment missing for literal argument 'c' [bugprone-argument-comment] + // CHECK-FIXES: j(X(1), X(1), /*c=*/1); + j(X(1), X(1), /*c=*/1); + + j(X(1), 1, 1); + // CHECK-MESSAGES: [[@LINE-1]]:11: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment] + // CHECK-MESSAGES: [[@LINE-2]]:14: warning: argument comment missing for literal argument 'c' [bugprone-argument-comment] + // CHECK-FIXES: j(X(1), /*b=*/1, /*c=*/1); + j(X(1), /*b=*/1, /*c=*/1); + + j(1, X(1), 1); + // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'a' [bugprone-argument-comment] + // CHECK-MESSAGES: [[@LINE-2]]:14: warning: argument comment missing for literal argument 'c' [bugprone-argument-comment] + // CHECK-FIXES: j(/*a=*/1, X(1), /*c=*/1); + j(/*a=*/1, X(1), /*c=*/1); + + j(1, 1, X(1)); + // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'a' [bugprone-argument-comment] + // CHECK-MESSAGES: [[@LINE-2]]:8: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment] + // CHECK-FIXES: j(/*a=*/1, /*b=*/1, X(1)); + j(/*a=*/1, /*b=*/1, X(1)); + // FIXME Would like the below to add argument comments. g((1)); // FIXME But we should not add argument comments here. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits