- //===--- IndexingAction.h - Frontend index action ---------------*- 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 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_CLANG_INDEX_INDEXINGACTION_H 
- #define LLVM_CLANG_INDEX_INDEXINGACTION_H 
-   
- #include "clang/AST/ASTConsumer.h" 
- #include "clang/Basic/LLVM.h" 
- #include "clang/Index/IndexingOptions.h" 
- #include "clang/Lex/PPCallbacks.h" 
- #include "clang/Lex/Preprocessor.h" 
- #include "llvm/ADT/ArrayRef.h" 
- #include <memory> 
-   
- namespace clang { 
-   class ASTContext; 
-   class ASTConsumer; 
-   class ASTReader; 
-   class ASTUnit; 
-   class Decl; 
-   class FrontendAction; 
-   
- namespace serialization { 
-   class ModuleFile; 
- } 
-   
- namespace index { 
- class IndexDataConsumer; 
-   
- /// Creates an ASTConsumer that indexes all symbols (macros and AST decls). 
- std::unique_ptr<ASTConsumer> 
- createIndexingASTConsumer(std::shared_ptr<IndexDataConsumer> DataConsumer, 
-                           const IndexingOptions &Opts, 
-                           std::shared_ptr<Preprocessor> PP); 
-   
- std::unique_ptr<ASTConsumer> createIndexingASTConsumer( 
-     std::shared_ptr<IndexDataConsumer> DataConsumer, 
-     const IndexingOptions &Opts, std::shared_ptr<Preprocessor> PP, 
-     // Prefer to set Opts.ShouldTraverseDecl and use the above overload. 
-     // This version is only needed if used to *track* function body parsing. 
-     std::function<bool(const Decl *)> ShouldSkipFunctionBody); 
-   
- /// Creates a frontend action that indexes all symbols (macros and AST decls). 
- std::unique_ptr<FrontendAction> 
- createIndexingAction(std::shared_ptr<IndexDataConsumer> DataConsumer, 
-                      const IndexingOptions &Opts); 
-   
- /// Recursively indexes all decls in the AST. 
- void indexASTUnit(ASTUnit &Unit, IndexDataConsumer &DataConsumer, 
-                   IndexingOptions Opts); 
-   
- /// Recursively indexes \p Decls. 
- void indexTopLevelDecls(ASTContext &Ctx, Preprocessor &PP, 
-                         ArrayRef<const Decl *> Decls, 
-                         IndexDataConsumer &DataConsumer, IndexingOptions Opts); 
-   
- /// Creates a PPCallbacks that indexes macros and feeds macros to \p Consumer. 
- /// The caller is responsible for calling `Consumer.setPreprocessor()`. 
- std::unique_ptr<PPCallbacks> indexMacrosCallback(IndexDataConsumer &Consumer, 
-                                                  IndexingOptions Opts); 
-   
- /// Recursively indexes all top-level decls in the module. 
- void indexModuleFile(serialization::ModuleFile &Mod, ASTReader &Reader, 
-                      IndexDataConsumer &DataConsumer, IndexingOptions Opts); 
-   
- } // namespace index 
- } // namespace clang 
-   
- #endif 
-