Skip to content

Commit

Permalink
Fix bugprone-argument-comment bug if there are marcos.
Browse files Browse the repository at this point in the history
For example:

	#define X(x) (x)
	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.
  • Loading branch information
xieyubo committed Sep 10, 2019
1 parent 2d89007 commit b882946
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,8 @@ void ArgumentCommentCheck::checkCallArgs(ASTContext *Ctx,
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());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit b882946

Please sign in to comment.