forked from OSchip/llvm-project
[clang-tidy] Exclude function calls in std namespace for bugprone-argument-comment.
Reviewers: gribozavr2 Subscribers: xazax.hun, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D79494
This commit is contained in:
parent
a400aa5faf
commit
2a3498e24f
|
@ -19,6 +19,13 @@ using namespace clang::ast_matchers;
|
|||
namespace clang {
|
||||
namespace tidy {
|
||||
namespace bugprone {
|
||||
namespace {
|
||||
AST_MATCHER(Decl, isFromStdNamespace) {
|
||||
if (const auto *D = Node.getDeclContext()->getEnclosingNamespaceContext())
|
||||
return D->isStdNamespace();
|
||||
return false;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
ArgumentCommentCheck::ArgumentCommentCheck(StringRef Name,
|
||||
ClangTidyContext *Context)
|
||||
|
@ -54,10 +61,18 @@ void ArgumentCommentCheck::registerMatchers(MatchFinder *Finder) {
|
|||
// don't check them against NewCallback's parameter names.
|
||||
// FIXME: Make this configurable.
|
||||
unless(hasDeclaration(functionDecl(
|
||||
hasAnyName("NewCallback", "NewPermanentCallback")))))
|
||||
hasAnyName("NewCallback", "NewPermanentCallback")))),
|
||||
// Ignore APIs from the standard library, since their names are
|
||||
// not specified by the standard, and standard library
|
||||
// implementations in practice have to use reserved names to
|
||||
// avoid conflicts with same-named macros.
|
||||
unless(hasDeclaration(isFromStdNamespace())))
|
||||
.bind("expr"),
|
||||
this);
|
||||
Finder->addMatcher(
|
||||
cxxConstructExpr(unless(hasDeclaration(isFromStdNamespace())))
|
||||
.bind("expr"),
|
||||
this);
|
||||
Finder->addMatcher(cxxConstructExpr().bind("expr"), this);
|
||||
}
|
||||
|
||||
static std::vector<std::pair<SourceLocation, StringRef>>
|
||||
|
|
|
@ -115,3 +115,22 @@ void g() { f6(/*xxy=*/0, 0); }
|
|||
// CHECK-NOTES: [[@LINE-3]]:13: note: 'xxx' declared here
|
||||
// CHECK-FIXES: void g() { f6(/*xxy=*/0, 0); }
|
||||
}
|
||||
|
||||
|
||||
namespace std {
|
||||
template <typename T>
|
||||
class vector {
|
||||
public:
|
||||
void assign(int __n, const T &__val);
|
||||
};
|
||||
template<typename T>
|
||||
void swap(T& __a, T& __b);
|
||||
} // namespace std
|
||||
namespace ignore_std_functions {
|
||||
void test(int a, int b) {
|
||||
std::vector<int> s;
|
||||
// verify the check is not fired on std functions.
|
||||
s.assign(1, /*value=*/2);
|
||||
std::swap(a, /*num=*/b);
|
||||
}
|
||||
} // namespace ignore_std_functions
|
||||
|
|
Loading…
Reference in New Issue