1 //===--- AvoidConstOrRefDataMembersCheck.cpp - clang-tidy -----------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "AvoidConstOrRefDataMembersCheck.h" 10 #include "clang/AST/ASTContext.h" 11 #include "clang/ASTMatchers/ASTMatchFinder.h" 12 13 using namespace clang::ast_matchers; 14 15 namespace clang { 16 namespace tidy { 17 namespace cppcoreguidelines { 18 19 void AvoidConstOrRefDataMembersCheck::registerMatchers(MatchFinder *Finder) { 20 Finder->addMatcher( 21 fieldDecl(hasType(hasCanonicalType(referenceType()))).bind("ref"), this); 22 Finder->addMatcher( 23 fieldDecl(hasType(qualType(isConstQualified()))).bind("const"), this); 24 } 25 26 void AvoidConstOrRefDataMembersCheck::check( 27 const MatchFinder::MatchResult &Result) { 28 if (const auto *MatchedDecl = Result.Nodes.getNodeAs<FieldDecl>("ref")) 29 diag(MatchedDecl->getLocation(), "member %0 of type %1 is a reference") 30 << MatchedDecl << MatchedDecl->getType(); 31 if (const auto *MatchedDecl = Result.Nodes.getNodeAs<FieldDecl>("const")) 32 diag(MatchedDecl->getLocation(), "member %0 of type %1 is const qualified") 33 << MatchedDecl << MatchedDecl->getType(); 34 } 35 36 } // namespace cppcoreguidelines 37 } // namespace tidy 38 } // namespace clang 39