forked from OSchip/llvm-project
Don't warn on NewCallback argument comments, as they are arguments for the
function the callback points to. Reviewers: djasper Reviewed By: djasper Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D4722 llvm-svn: 214307
This commit is contained in:
parent
3b6616c3a3
commit
326e48cd09
|
@ -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 @@ ArgumentCommentCheck::ArgumentCommentCheck()
|
|||
: 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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue