Author: kadircet Date: Tue Jan 22 01:58:53 2019 New Revision: 351793 URL: http://llvm.org/viewvc/llvm-project?rev=351793&view=rev Log: [clangd] NFC: Use buildCompilerInvocation in CodeComplete
Reviewers: ilya-biryukov, sammccall Reviewed By: sammccall Subscribers: ioeric, MaskRay, jkorous, arphaman, cfe-commits Differential Revision: https://reviews.llvm.org/D56860 Modified: clang-tools-extra/trunk/clangd/ClangdUnit.cpp clang-tools-extra/trunk/clangd/ClangdUnit.h clang-tools-extra/trunk/clangd/CodeComplete.cpp clang-tools-extra/trunk/clangd/Compiler.cpp clang-tools-extra/trunk/clangd/Compiler.h Modified: clang-tools-extra/trunk/clangd/ClangdUnit.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdUnit.cpp?rev=351793&r1=351792&r2=351793&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/ClangdUnit.cpp (original) +++ clang-tools-extra/trunk/clangd/ClangdUnit.cpp Tue Jan 22 01:58:53 2019 @@ -418,34 +418,6 @@ ParsedAST::ParsedAST(std::shared_ptr<con assert(this->Action); } -std::unique_ptr<CompilerInvocation> -buildCompilerInvocation(const ParseInputs &Inputs) { - std::vector<const char *> ArgStrs; - for (const auto &S : Inputs.CompileCommand.CommandLine) - ArgStrs.push_back(S.c_str()); - - if (Inputs.FS->setCurrentWorkingDirectory(Inputs.CompileCommand.Directory)) { - log("Couldn't set working directory when creating compiler invocation."); - // We proceed anyway, our lit-tests rely on results for non-existing working - // dirs. - } - - // FIXME(ibiryukov): store diagnostics from CommandLine when we start - // reporting them. - IgnoreDiagnostics IgnoreDiagnostics; - llvm::IntrusiveRefCntPtr<DiagnosticsEngine> CommandLineDiagsEngine = - CompilerInstance::createDiagnostics(new DiagnosticOptions, - &IgnoreDiagnostics, false); - std::unique_ptr<CompilerInvocation> CI = createInvocationFromCommandLine( - ArgStrs, CommandLineDiagsEngine, Inputs.FS); - if (!CI) - return nullptr; - // createInvocationFromCommandLine sets DisableFree. - CI->getFrontendOpts().DisableFree = false; - CI->getLangOpts()->CommentOpts.ParseAllComments = true; - return CI; -} - std::shared_ptr<const PreambleData> buildPreamble(PathRef FileName, CompilerInvocation &CI, std::shared_ptr<const PreambleData> OldPreamble, Modified: clang-tools-extra/trunk/clangd/ClangdUnit.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdUnit.h?rev=351793&r1=351792&r2=351793&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/ClangdUnit.h (original) +++ clang-tools-extra/trunk/clangd/ClangdUnit.h Tue Jan 22 01:58:53 2019 @@ -9,7 +9,7 @@ #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_CLANGDUNIT_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_CLANGDUNIT_H -#include "../clang-tidy/ClangTidyOptions.h" +#include "Compiler.h" #include "Diagnostics.h" #include "FS.h" #include "Function.h" @@ -60,14 +60,6 @@ struct PreambleData { std::unique_ptr<PreambleFileStatusCache> StatCache; }; -/// 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; - tidy::ClangTidyOptions ClangTidyOpts; -}; - /// Stores and provides access to parsed AST. class ParsedAST { public: @@ -137,10 +129,6 @@ private: using PreambleParsedCallback = std::function<void(ASTContext &, std::shared_ptr<clang::Preprocessor>)>; -/// Builds compiler invocation that could be used to build AST or preamble. -std::unique_ptr<CompilerInvocation> -buildCompilerInvocation(const ParseInputs &Inputs); - /// Rebuild the preamble for the new inputs unless the old one can be reused. /// If \p OldPreamble can be reused, it is returned unchanged. /// If \p OldPreamble is null, always builds the preamble. Modified: clang-tools-extra/trunk/clangd/CodeComplete.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CodeComplete.cpp?rev=351793&r1=351792&r2=351793&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/CodeComplete.cpp (original) +++ clang-tools-extra/trunk/clangd/CodeComplete.cpp Tue Jan 22 01:58:53 2019 @@ -1016,33 +1016,17 @@ bool semaCodeComplete(std::unique_ptr<Co const SemaCompleteInput &Input, IncludeStructure *Includes = nullptr) { trace::Span Tracer("Sema completion"); - std::vector<const char *> ArgStrs; - for (const auto &S : Input.Command.CommandLine) - ArgStrs.push_back(S.c_str()); - - if (Input.VFS->setCurrentWorkingDirectory(Input.Command.Directory)) { - log("Couldn't set working directory"); - // We run parsing anyway, our lit-tests rely on results for non-existing - // working dirs. - } - llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS = Input.VFS; if (Input.Preamble && Input.Preamble->StatCache) VFS = Input.Preamble->StatCache->getConsumingFS(std::move(VFS)); - IgnoreDiagnostics DummyDiagsConsumer; - auto CI = createInvocationFromCommandLine( - ArgStrs, - CompilerInstance::createDiagnostics(new DiagnosticOptions, - &DummyDiagsConsumer, false), - VFS); + auto CI = + buildCompilerInvocation(ParseInputs{Input.Command, VFS, Input.Contents}); if (!CI) { elog("Couldn't create CompilerInvocation"); return false; } auto &FrontendOpts = CI->getFrontendOpts(); - FrontendOpts.DisableFree = false; FrontendOpts.SkipFunctionBodies = true; - CI->getLangOpts()->CommentOpts.ParseAllComments = true; // Disable typo correction in Sema. CI->getLangOpts()->SpellChecking = false; // Setup code completion. @@ -1072,6 +1056,7 @@ bool semaCodeComplete(std::unique_ptr<Co *Offset; // NOTE: we must call BeginSourceFile after prepareCompilerInstance. Otherwise // the remapped buffers do not get freed. + IgnoreDiagnostics DummyDiagsConsumer; auto Clang = prepareCompilerInstance( std::move(CI), (Input.Preamble && !CompletingInPreamble) ? &Input.Preamble->Preamble Modified: clang-tools-extra/trunk/clangd/Compiler.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/Compiler.cpp?rev=351793&r1=351792&r2=351793&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/Compiler.cpp (original) +++ clang-tools-extra/trunk/clangd/Compiler.cpp Tue Jan 22 01:58:53 2019 @@ -39,6 +39,34 @@ void IgnoreDiagnostics::HandleDiagnostic IgnoreDiagnostics::log(DiagLevel, Info); } +std::unique_ptr<CompilerInvocation> +buildCompilerInvocation(const ParseInputs &Inputs) { + std::vector<const char *> ArgStrs; + for (const auto &S : Inputs.CompileCommand.CommandLine) + ArgStrs.push_back(S.c_str()); + + if (Inputs.FS->setCurrentWorkingDirectory(Inputs.CompileCommand.Directory)) { + log("Couldn't set working directory when creating compiler invocation."); + // We proceed anyway, our lit-tests rely on results for non-existing working + // dirs. + } + + // FIXME(ibiryukov): store diagnostics from CommandLine when we start + // reporting them. + IgnoreDiagnostics IgnoreDiagnostics; + llvm::IntrusiveRefCntPtr<DiagnosticsEngine> CommandLineDiagsEngine = + CompilerInstance::createDiagnostics(new DiagnosticOptions, + &IgnoreDiagnostics, false); + std::unique_ptr<CompilerInvocation> CI = createInvocationFromCommandLine( + ArgStrs, CommandLineDiagsEngine, Inputs.FS); + if (!CI) + return nullptr; + // createInvocationFromCommandLine sets DisableFree. + CI->getFrontendOpts().DisableFree = false; + CI->getLangOpts()->CommentOpts.ParseAllComments = true; + return CI; +} + std::unique_ptr<CompilerInstance> prepareCompilerInstance(std::unique_ptr<clang::CompilerInvocation> CI, const PrecompiledPreamble *Preamble, Modified: clang-tools-extra/trunk/clangd/Compiler.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/Compiler.h?rev=351793&r1=351792&r2=351793&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/Compiler.h (original) +++ clang-tools-extra/trunk/clangd/Compiler.h Tue Jan 22 01:58:53 2019 @@ -15,9 +15,11 @@ #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_COMPILER_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_COMPILER_H +#include "../clang-tidy/ClangTidyOptions.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/CompilerInvocation.h" #include "clang/Frontend/PrecompiledPreamble.h" +#include "clang/Tooling/CompilationDatabase.h" namespace clang { namespace clangd { @@ -31,6 +33,18 @@ public: const clang::Diagnostic &Info) override; }; +/// 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; + tidy::ClangTidyOptions ClangTidyOpts; +}; + +/// Builds compiler invocation that could be used to build AST or preamble. +std::unique_ptr<CompilerInvocation> +buildCompilerInvocation(const ParseInputs &Inputs); + /// 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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits