//===--- TestVisitor.h ------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// \brief Defines utility templates for RecursiveASTVisitor related tests. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_UNITTESTS_TOOLING_TESTVISITOR_H #define LLVM_CLANG_UNITTESTS_TOOLING_TESTVISITOR_H #include "clang/AST/ASTConsumer.h" #include "clang/AST/ASTContext.h" #include "clang/AST/RecursiveASTVisitor.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/FrontendAction.h" #include "clang/Tooling/Tooling.h" #include "gtest/gtest.h" #include <vector> namespace clang { /// \brief Base class for simple RecursiveASTVisitor based tests. /// /// This is a drop-in replacement for RecursiveASTVisitor itself, with the /// additional capability of running it over a snippet of code. /// /// Visits template instantiations and implicit code by default. template <typename T> class TestVisitor : public RecursiveASTVisitor<T> { … }; /// \brief A RecursiveASTVisitor to check that certain matches are (or are /// not) observed during visitation. /// /// This is a RecursiveASTVisitor for testing the RecursiveASTVisitor itself, /// and allows simple creation of test visitors running matches on only a small /// subset of the Visit* methods. template <typename T, template <typename> class Visitor = TestVisitor> class ExpectedLocationVisitor : public Visitor<T> { … }; } #endif