brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · 83268a2 Raw
167 lines · c
1//===- CIndexer.h - Clang-C Source Indexing Library -------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file defines CIndexer, a subclass of Indexer that provides extra10// functionality needed by the CIndex library.11//12//===----------------------------------------------------------------------===//13 14#ifndef LLVM_CLANG_TOOLS_LIBCLANG_CINDEXER_H15#define LLVM_CLANG_TOOLS_LIBCLANG_CINDEXER_H16 17#include "clang-c/Index.h"18#include "clang/Frontend/PCHContainerOperations.h"19#include "llvm/ADT/STLExtras.h"20#include <utility>21 22namespace llvm {23  class CrashRecoveryContext;24}25 26namespace clang {27class ASTUnit;28class MacroInfo;29class MacroDefinitionRecord;30class SourceLocation;31class Token;32class IdentifierInfo;33 34class CIndexer {35  bool OnlyLocalDecls;36  bool DisplayDiagnostics;37  bool StorePreamblesInMemory = false;38  unsigned Options; // CXGlobalOptFlags.39 40  std::string ResourcesPath;41  std::shared_ptr<PCHContainerOperations> PCHContainerOps;42 43  std::string ToolchainPath;44 45  std::string PreambleStoragePath;46  std::string InvocationEmissionPath;47 48public:49  CIndexer(std::shared_ptr<PCHContainerOperations> PCHContainerOps =50               std::make_shared<PCHContainerOperations>())51      : OnlyLocalDecls(false), DisplayDiagnostics(false),52        Options(CXGlobalOpt_None), PCHContainerOps(std::move(PCHContainerOps)) {53  }54 55  /// Whether we only want to see "local" declarations (that did not56  /// come from a previous precompiled header). If false, we want to see all57  /// declarations.58  bool getOnlyLocalDecls() const { return OnlyLocalDecls; }59  void setOnlyLocalDecls(bool Local = true) { OnlyLocalDecls = Local; }60  61  bool getDisplayDiagnostics() const { return DisplayDiagnostics; }62  void setDisplayDiagnostics(bool Display = true) {63    DisplayDiagnostics = Display;64  }65 66  std::shared_ptr<PCHContainerOperations> getPCHContainerOperations() const {67    return PCHContainerOps;68  }69 70  unsigned getCXGlobalOptFlags() const { return Options; }71  void setCXGlobalOptFlags(unsigned options) { Options = options; }72 73  bool isOptEnabled(CXGlobalOptFlags opt) const {74    return Options & opt;75  }76 77  /// Get the path of the clang resource files.78  const std::string &getClangResourcesPath();79 80  StringRef getClangToolchainPath();81 82  void setStorePreamblesInMemory(bool StoreInMemory) {83    StorePreamblesInMemory = StoreInMemory;84  }85  bool getStorePreamblesInMemory() const { return StorePreamblesInMemory; }86 87  void setPreambleStoragePath(StringRef Str) {88    PreambleStoragePath = Str.str();89  }90 91  StringRef getPreambleStoragePath() const { return PreambleStoragePath; }92 93  void setInvocationEmissionPath(StringRef Str) {94    InvocationEmissionPath = std::string(Str);95  }96 97  StringRef getInvocationEmissionPath() const { return InvocationEmissionPath; }98};99 100/// Logs information about a particular libclang operation like parsing to101/// a new file in the invocation emission path.102class LibclangInvocationReporter {103public:104  enum class OperationKind { ParseOperation, CompletionOperation };105 106  LibclangInvocationReporter(CIndexer &Idx, OperationKind Op,107                             unsigned ParseOptions,108                             llvm::ArrayRef<const char *> Args,109                             llvm::ArrayRef<std::string> InvocationArgs,110                             llvm::ArrayRef<CXUnsavedFile> UnsavedFiles);111  ~LibclangInvocationReporter();112 113private:114  std::string File;115};116 117  /// Return the current size to request for "safety".118  unsigned GetSafetyThreadStackSize();119 120  /// Set the current size to request for "safety" (or 0, if safety121  /// threads should not be used).122  void SetSafetyThreadStackSize(unsigned Value);123 124  /// Execution the given code "safely", using crash recovery or safety125  /// threads when possible.126  ///127  /// \return False if a crash was detected.128  bool RunSafely(llvm::CrashRecoveryContext &CRC, llvm::function_ref<void()> Fn,129                 unsigned Size = 0);130 131  /// Set the thread priority to background.132  /// FIXME: Move to llvm/Support.133  void setThreadBackgroundPriority();134 135  /// Print libclang's resource usage to standard error.136  void PrintLibclangResourceUsage(CXTranslationUnit TU);137 138  namespace cxindex {139    void printDiagsToStderr(ASTUnit *Unit);140 141    /// If \c MacroDefLoc points at a macro definition with \c II as142    /// its name, this retrieves its MacroInfo.143    MacroInfo *getMacroInfo(const IdentifierInfo &II,144                            SourceLocation MacroDefLoc, CXTranslationUnit TU);145 146    /// Retrieves the corresponding MacroInfo of a MacroDefinitionRecord.147    const MacroInfo *getMacroInfo(const MacroDefinitionRecord *MacroDef,148                                  CXTranslationUnit TU);149 150    /// If \c Loc resides inside the definition of \c MI and it points at151    /// an identifier that has ever been a macro name, this returns the latest152    /// MacroDefinitionRecord for that name, otherwise it returns NULL.153    MacroDefinitionRecord *checkForMacroInMacroDefinition(const MacroInfo *MI,154                                                          SourceLocation Loc,155                                                          CXTranslationUnit TU);156 157    /// If \c Tok resides inside the definition of \c MI and it points at158    /// an identifier that has ever been a macro name, this returns the latest159    /// MacroDefinitionRecord for that name, otherwise it returns NULL.160    MacroDefinitionRecord *checkForMacroInMacroDefinition(const MacroInfo *MI,161                                                          const Token &Tok,162                                                          CXTranslationUnit TU);163    }164    }165 166#endif167