//===- CIndexer.h - Clang-C Source Indexing Library -----------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines CIndexer, a subclass of Indexer that provides extra // functionality needed by the CIndex library. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_CINDEXER_H #define LLVM_CLANG_CINDEXER_H #include "clang-c/Index.h" #include "clang/Index/ASTLocation.h" #include "clang/Index/Indexer.h" #include "clang/Index/Program.h" #include "clang/Index/Utils.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/ASTUnit.h" #include "llvm/System/Path.h" using namespace clang; /// IgnoreDiagnosticsClient - A DiagnosticsClient that just ignores emitted /// warnings and errors. class IgnoreDiagnosticsClient : public DiagnosticClient { public: virtual ~IgnoreDiagnosticsClient() {} virtual void HandleDiagnostic(Diagnostic::Level, const DiagnosticInfo &) {} }; class CIndexer : public Indexer { DiagnosticOptions DiagOpts; IgnoreDiagnosticsClient IgnoreDiagClient; llvm::OwningPtr TextDiags; Diagnostic IgnoreDiags; bool UseExternalASTGeneration; bool OnlyLocalDecls; bool DisplayDiagnostics; llvm::sys::Path ClangPath; public: explicit CIndexer(Program *prog) : Indexer(*prog), IgnoreDiags(&IgnoreDiagClient), UseExternalASTGeneration(false), OnlyLocalDecls(false), DisplayDiagnostics(false) { TextDiags.reset(CompilerInstance::createDiagnostics(DiagOpts, 0, 0)); } virtual ~CIndexer() { delete &getProgram(); } /// \brief Whether we only want to see "local" declarations (that did not /// come from a previous precompiled header). If false, we want to see all /// declarations. bool getOnlyLocalDecls() const { return OnlyLocalDecls; } void setOnlyLocalDecls(bool Local = true) { OnlyLocalDecls = Local; } bool getDisplayDiagnostics() const { return DisplayDiagnostics; } void setDisplayDiagnostics(bool Display = true) { DisplayDiagnostics = Display; } bool getUseExternalASTGeneration() const { return UseExternalASTGeneration; } void setUseExternalASTGeneration(bool Value) { UseExternalASTGeneration = Value; } Diagnostic &getDiags() { return DisplayDiagnostics ? *TextDiags : IgnoreDiags; } /// \brief Get the path of the clang binary. const llvm::sys::Path& getClangPath(); /// \brief Get the path of the clang resource files. std::string getClangResourcesPath(); static CXString createCXString(const char *String, bool DupString = false); }; #endif