CIndexer.h revision f962eb4dde12366c8617d0b9958b9ed70a328f21
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===- CIndexer.h - Clang-C Source Indexing Library -------------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file defines CIndexer, a subclass of Indexer that provides extra 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// functionality needed by the CIndex library. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef LLVM_CLANG_CINDEXER_H 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LLVM_CLANG_CINDEXER_H 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "clang-c/Index.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/ADT/StringRef.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "llvm/Support/Path.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <vector> 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace llvm { 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch class CrashRecoveryContext; 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace clang { 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass CIndexer { 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool OnlyLocalDecls; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool DisplayDiagnostics; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned Options; // CXGlobalOptFlags. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) llvm::sys::Path ResourcesPath; 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string WorkingDir; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)public: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CIndexer() : OnlyLocalDecls(false), DisplayDiagnostics(false), 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Options(CXGlobalOpt_None) { } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) /// \brief Whether we only want to see "local" declarations (that did not 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// come from a previous precompiled header). If false, we want to see all 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// declarations. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool getOnlyLocalDecls() const { return OnlyLocalDecls; } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setOnlyLocalDecls(bool Local = true) { OnlyLocalDecls = Local; } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool getDisplayDiagnostics() const { return DisplayDiagnostics; } 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void setDisplayDiagnostics(bool Display = true) { 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DisplayDiagnostics = Display; 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch unsigned getCXGlobalOptFlags() const { return Options; } 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void setCXGlobalOptFlags(unsigned options) { Options = options; } 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool isOptEnabled(CXGlobalOptFlags opt) const { 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return Options & opt; 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) /// \brief Get the path of the clang resource files. 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string getClangResourcesPath(); 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string &getWorkingDirectory() const { return WorkingDir; } 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void setWorkingDirectory(const std::string &Dir) { WorkingDir = Dir; } 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * \brief Given a set of "unsaved" files, create temporary files and 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * construct the clang -cc1 argument list needed to perform the remapping. 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * \returns true if an error occurred. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool RemapFiles(unsigned num_unsaved_files, 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) struct CXUnsavedFile *unsaved_files, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> &RemapArgs, 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<llvm::sys::Path> &TemporaryFiles); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// \brief Return the current size to request for "safety". 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned GetSafetyThreadStackSize(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// \brief Set the current size to request for "safety" (or 0, if safety 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// threads should not be used). 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetSafetyThreadStackSize(unsigned Value); 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /// \brief Execution the given code "safely", using crash recovery or safety 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /// threads when possible. 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /// 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /// \return False if a crash was detected. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool RunSafely(llvm::CrashRecoveryContext &CRC, 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void (*Fn)(void*), void *UserData, unsigned Size = 0); 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /// \brief Set the thread priority to background. 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /// FIXME: Move to llvm/Support. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void setThreadBackgroundPriority(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// \brief Print libclang's resource usage to standard error. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PrintLibclangResourceUsage(CXTranslationUnit TU); 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)