11 #include "clang/AST/ASTContext.h" 12 #include "clang/ASTMatchers/ASTMatchFinder.h" 13 #include "clang/ASTMatchers/ASTMatchers.h" 22 void StringReferenceMemberCheck::registerMatchers(
23 ast_matchers::MatchFinder *Finder) {
26 if (!getLangOpts().CPlusPlus)
30 auto String = anyOf(namedDecl(hasName(
"::std::string")),
31 namedDecl(hasName(
"::string")));
32 auto ConstString = qualType(isConstQualified(), hasDeclaration(String));
36 fieldDecl(hasType(references(ConstString)), unless(isInstantiated()))
41 void StringReferenceMemberCheck::check(
const MatchFinder::MatchResult &Result) {
42 const auto *Member = Result.Nodes.getNodeAs<FieldDecl>(
"member");
43 diag(Member->getLocStart(),
"const string& members are dangerous; it is much " 44 "better to use alternatives, such as pointers or "