CIndexer.h revision b10daedb8fc4c6f70a66dbc1a6eea01684bb4e77
1ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek//===- CIndexer.h - Clang-C Source Indexing Library -----------------------===// 2ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 3ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// The LLVM Compiler Infrastructure 4ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 5ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// This file is distributed under the University of Illinois Open Source 6ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// License. See LICENSE.TXT for details. 7ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 8ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek//===----------------------------------------------------------------------===// 9ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 10ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// This file defines CIndexer, a subclass of Indexer that provides extra 11ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// functionality needed by the CIndex library. 12ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek// 13ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek//===----------------------------------------------------------------------===// 14ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 15ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek#ifndef LLVM_CLANG_CINDEXER_H 16ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek#define LLVM_CLANG_CINDEXER_H 17ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 18ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek#include "clang-c/Index.h" 19fc8ea23eb6cbaaa5046f2abb4c033e24c8659efdDouglas Gregor#include "llvm/ADT/StringRef.h" 20ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek#include "llvm/System/Path.h" 214db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor#include <vector> 22ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 23ee4db4fccbcab7e6bd614fe8757c5453e7ad0e86Ted Kremeneknamespace clang { 24ee4db4fccbcab7e6bd614fe8757c5453e7ad0e86Ted Kremeneknamespace cxstring { 25ee4db4fccbcab7e6bd614fe8757c5453e7ad0e86Ted Kremenek CXString createCXString(const char *String, bool DupString = false); 26ee4db4fccbcab7e6bd614fe8757c5453e7ad0e86Ted Kremenek CXString createCXString(llvm::StringRef String, bool DupString = true); 27ee4db4fccbcab7e6bd614fe8757c5453e7ad0e86Ted Kremenek} 28ee4db4fccbcab7e6bd614fe8757c5453e7ad0e86Ted Kremenek} 29ee4db4fccbcab7e6bd614fe8757c5453e7ad0e86Ted Kremenek 30a030b7cf5e6aad5889b1b662b6979840bc75f87fDouglas Gregorclass CIndexer { 31ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek bool OnlyLocalDecls; 320a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor bool DisplayDiagnostics; 330a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor 34ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek llvm::sys::Path ClangPath; 35ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 36ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenekpublic: 37b10daedb8fc4c6f70a66dbc1a6eea01684bb4e77Douglas Gregor CIndexer() : OnlyLocalDecls(false), DisplayDiagnostics(false) { } 38ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 39ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek /// \brief Whether we only want to see "local" declarations (that did not 40ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek /// come from a previous precompiled header). If false, we want to see all 41ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek /// declarations. 42ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek bool getOnlyLocalDecls() const { return OnlyLocalDecls; } 43ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek void setOnlyLocalDecls(bool Local = true) { OnlyLocalDecls = Local; } 44ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 450a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor bool getDisplayDiagnostics() const { return DisplayDiagnostics; } 460a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor void setDisplayDiagnostics(bool Display = true) { 470a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor DisplayDiagnostics = Display; 480a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor } 490a812cf707da15dadd19fdeb0178b9707f4e01a6Douglas Gregor 50ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek /// \brief Get the path of the clang binary. 51ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek const llvm::sys::Path& getClangPath(); 52ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 53ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek /// \brief Get the path of the clang resource files. 54ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek std::string getClangResourcesPath(); 55ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek}; 56ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek 574db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregornamespace clang { 584db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor /** 594db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor * \brief Given a set of "unsaved" files, create temporary files and 604db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor * construct the clang -cc1 argument list needed to perform the remapping. 614db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor * 624db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor * \returns true if an error occurred. 634db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor */ 644db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor bool RemapFiles(unsigned num_unsaved_files, 654db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor struct CXUnsavedFile *unsaved_files, 664db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor std::vector<std::string> &RemapArgs, 674db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor std::vector<llvm::sys::Path> &TemporaryFiles); 684db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor} 694db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor 70ab1889321f6f8f200f2b318ac26883ac18e49d03Ted Kremenek#endif 71