| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 
							- /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 
-    file LICENSE.rst or https://cmake.org/licensing for details.  */
 
- #include "OstringstreamUseCmstrcatCheck.h"
 
- #include <clang/AST/Type.h>
 
- #include <clang/ASTMatchers/ASTMatchFinder.h>
 
- namespace clang {
 
- namespace tidy {
 
- namespace cmake {
 
- using namespace ast_matchers;
 
- OstringstreamUseCmstrcatCheck::OstringstreamUseCmstrcatCheck(
 
-   StringRef Name, ClangTidyContext* Context)
 
-   : ClangTidyCheck(Name, Context)
 
- {
 
- }
 
- void OstringstreamUseCmstrcatCheck::registerMatchers(MatchFinder* Finder)
 
- {
 
-   Finder->addMatcher(
 
-     typeLoc(unless(elaboratedTypeLoc()),
 
-             optionally(hasParent(elaboratedTypeLoc().bind("parentType"))),
 
-             loc(qualType(
 
-               hasDeclaration(namedDecl(hasName("::std::ostringstream"))))))
 
-       .bind("ostringstream"),
 
-     this);
 
- }
 
- void OstringstreamUseCmstrcatCheck::check(
 
-   MatchFinder::MatchResult const& Result)
 
- {
 
-   TypeLoc const* ParentTypeNode =
 
-     Result.Nodes.getNodeAs<TypeLoc>("parentType");
 
-   TypeLoc const* RootNode = Result.Nodes.getNodeAs<TypeLoc>("ostringstream");
 
-   if (ParentTypeNode != nullptr) {
 
-     if (ParentTypeNode->getBeginLoc().isValid()) {
 
-       this->diag(ParentTypeNode->getBeginLoc(),
 
-                  "use strings and cmStrCat() instead of std::ostringstream");
 
-     }
 
-   } else if (RootNode != nullptr) {
 
-     if (RootNode->getBeginLoc().isValid()) {
 
-       this->diag(RootNode->getBeginLoc(),
 
-                  "use strings and cmStrCat() instead of std::ostringstream");
 
-     }
 
-   }
 
- }
 
- }
 
- }
 
- }
 
 
  |