Mercurial > hg > CbC > CbC_llvm
view clang-tools-extra/clangd/Compiler.h @ 206:f17a3b42b08b
Added tag before-12 for changeset b7591485f4cd
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 07 Jun 2021 21:25:57 +0900 |
parents | 0572611fdcc8 |
children | 2e18cbf3894f |
line wrap: on
line source
//===--- Compiler.h ----------------------------------------------*- 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 // //===----------------------------------------------------------------------===// // // Shared utilities for invoking the clang compiler. // Most callers will use this through Preamble/ParsedAST, but some features like // CodeComplete run their own compile actions that share these low-level pieces. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_COMPILER_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_COMPILER_H #include "../clang-tidy/ClangTidyOptions.h" #include "GlobalCompilationDatabase.h" #include "index/Index.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/PrecompiledPreamble.h" #include "clang/Tooling/CompilationDatabase.h" namespace clang { namespace clangd { class IgnoreDiagnostics : public DiagnosticConsumer { public: static void log(DiagnosticsEngine::Level DiagLevel, const clang::Diagnostic &Info); void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const clang::Diagnostic &Info) override; }; // Options to run clang e.g. when parsing AST. struct ParseOptions { tidy::ClangTidyOptions ClangTidyOpts; bool SuggestMissingIncludes = false; bool BuildRecoveryAST = false; bool PreserveRecoveryASTType = false; }; /// Information required to run clang, e.g. to parse AST or do code completion. struct ParseInputs { tooling::CompileCommand CompileCommand; IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS; std::string Contents; // Version identifier for Contents, provided by the client and opaque to us. std::string Version = "null"; // Prevent reuse of the cached preamble/AST. Slow! Useful to workaround // clangd's assumption that missing header files will stay missing. bool ForceRebuild = false; // Used to recover from diagnostics (e.g. find missing includes for symbol). const SymbolIndex *Index = nullptr; ParseOptions Opts; }; /// Builds compiler invocation that could be used to build AST or preamble. std::unique_ptr<CompilerInvocation> buildCompilerInvocation(const ParseInputs &Inputs, clang::DiagnosticConsumer &D, std::vector<std::string> *CC1Args = nullptr); /// Creates a compiler instance, configured so that: /// - Contents of the parsed file are remapped to \p MainFile. /// - Preamble is overriden to use PCH passed to this function. It means the /// changes to the preamble headers or files included in the preamble are /// not visible to this compiler instance. /// - llvm::vfs::FileSystem is used for all underlying file accesses. The /// actual vfs used by the compiler may be an overlay over the passed vfs. /// Returns null on errors. When non-null value is returned, it is expected to /// be consumed by FrontendAction::BeginSourceFile to properly destroy \p /// MainFile. std::unique_ptr<CompilerInstance> prepareCompilerInstance( std::unique_ptr<clang::CompilerInvocation>, const PrecompiledPreamble *, std::unique_ptr<llvm::MemoryBuffer> MainFile, IntrusiveRefCntPtr<llvm::vfs::FileSystem>, DiagnosticConsumer &); } // namespace clangd } // namespace clang #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_COMPILER_H