[PATCH] Don't warn on NewCallback argument comments, as they are arguments for thefunction the callback points to.
Alexander Kornienko
alexfh at google.com
Wed Jul 30 07:22:26 PDT 2014
Added a FIXME to make the list of "special" functions configurable.
ClangTidy doesn't yet read configuration files or provide configuration to the
checks. This is in the plans, but I would like this check to stop producing
false positives sooner than the configuration of the checks becomes possible.
# Updating D4722: Don't warn on NewCallback argument comments, as they are arguments for the
function the callback points to.
http://reviews.llvm.org/D4722
Files:
clang-tidy/misc/ArgumentCommentCheck.cpp
test/clang-tidy/arg-comments.cpp
Index: clang-tidy/misc/ArgumentCommentCheck.cpp
===================================================================
--- clang-tidy/misc/ArgumentCommentCheck.cpp
+++ clang-tidy/misc/ArgumentCommentCheck.cpp
@@ -8,9 +8,6 @@
//===----------------------------------------------------------------------===//
#include "ArgumentCommentCheck.h"
-#include "../ClangTidy.h"
-#include "../ClangTidyModule.h"
-#include "../ClangTidyModuleRegistry.h"
#include "clang/AST/ASTContext.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/Lex/Lexer.h"
@@ -25,7 +22,15 @@
: IdentRE("^(/\\* *)([_A-Za-z][_A-Za-z0-9]*)( *= *\\*/)$") {}
void ArgumentCommentCheck::registerMatchers(MatchFinder *Finder) {
- Finder->addMatcher(callExpr(unless(operatorCallExpr())).bind("expr"), this);
+ Finder->addMatcher(
+ callExpr(unless(operatorCallExpr()),
+ // NewCallback's arguments relate to the pointed function, don't
+ // check them against NewCallback's parameter names.
+ // FIXME: Make this configurable.
+ unless(hasDeclaration(functionDecl(anyOf(
+ hasName("NewCallback"), hasName("NewPermanentCallback"))))))
+ .bind("expr"),
+ this);
Finder->addMatcher(constructExpr().bind("expr"), this);
}
Index: test/clang-tidy/arg-comments.cpp
===================================================================
--- test/clang-tidy/arg-comments.cpp
+++ test/clang-tidy/arg-comments.cpp
@@ -1,21 +1,29 @@
-// RUN: clang-tidy --checks='-*,misc-argument-comment' %s -- | FileCheck %s
+// RUN: clang-tidy --checks='-*,misc-argument-comment' %s -- -std=c++11 | FileCheck %s -implicit-check-not='{{warning:|error:}}'
// FIXME: clang-tidy should provide a -verify mode to make writing these checks
// easier and more accurate.
-// CHECK-NOT: warning
-
-void f(int x, int y);
-
void ffff(int xxxx, int yyyy);
+void f(int x, int y);
void g() {
// CHECK: [[@LINE+5]]:5: warning: argument name 'y' in comment does not match parameter name 'x'
- // CHECK: :8:12: note: 'x' declared here
+ // CHECK: :[[@LINE-3]]:12: note: 'x' declared here
// CHECK: [[@LINE+3]]:14: warning: argument name 'z' in comment does not match parameter name 'y'
- // CHECK: :8:19: note: 'y' declared here
+ // CHECK: :[[@LINE-5]]:19: note: 'y' declared here
// CHECK-NOT: warning
f(/*y=*/0, /*z=*/0);
}
-// CHECK-NOT: warning
+struct Closure {};
+
+template <typename T1, typename T2>
+Closure *NewCallback(void (*f)(T1, T2), T1 arg1, T2 arg2) { return nullptr; }
+
+template <typename T1, typename T2>
+Closure *NewPermanentCallback(void (*f)(T1, T2), T1 arg1, T2 arg2) { return nullptr; }
+
+void h() {
+ (void)NewCallback(&ffff, /*xxxx=*/11, /*yyyy=*/22);
+ (void)NewPermanentCallback(&ffff, /*xxxx=*/11, /*yyyy=*/22);
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4722.12028.patch
Type: text/x-patch
Size: 2816 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140730/a4e92b06/attachment.bin>
More information about the cfe-commits
mailing list