diff options
Diffstat (limited to 'clang-tools-extra/clangd/ClangdUnit.cpp')
-rw-r--r-- | clang-tools-extra/clangd/ClangdUnit.cpp | 69 |
1 files changed, 47 insertions, 22 deletions
diff --git a/clang-tools-extra/clangd/ClangdUnit.cpp b/clang-tools-extra/clangd/ClangdUnit.cpp index 14eac6c2e41..eba37da6506 100644 --- a/clang-tools-extra/clangd/ClangdUnit.cpp +++ b/clang-tools-extra/clangd/ClangdUnit.cpp @@ -369,7 +369,7 @@ std::string getDocumentation(const CodeCompletionString &CCS) { class CompletionItemsCollector : public CodeCompleteConsumer { public: - CompletionItemsCollector(const CodeCompleteOptions &CodeCompleteOpts, + CompletionItemsCollector(const clang::CodeCompleteOptions &CodeCompleteOpts, std::vector<CompletionItem> &Items) : CodeCompleteConsumer(CodeCompleteOpts, /*OutputIsBinary=*/false), Items(Items), @@ -471,8 +471,9 @@ class PlainTextCompletionItemsCollector final : public CompletionItemsCollector { public: - PlainTextCompletionItemsCollector(const CodeCompleteOptions &CodeCompleteOpts, - std::vector<CompletionItem> &Items) + PlainTextCompletionItemsCollector( + const clang::CodeCompleteOptions &CodeCompleteOpts, + std::vector<CompletionItem> &Items) : CompletionItemsCollector(CodeCompleteOpts, Items) {} private: @@ -507,8 +508,9 @@ private: class SnippetCompletionItemsCollector final : public CompletionItemsCollector { public: - SnippetCompletionItemsCollector(const CodeCompleteOptions &CodeCompleteOpts, - std::vector<CompletionItem> &Items) + SnippetCompletionItemsCollector( + const clang::CodeCompleteOptions &CodeCompleteOpts, + std::vector<CompletionItem> &Items) : CompletionItemsCollector(CodeCompleteOpts, Items) {} private: @@ -617,7 +619,7 @@ private: class SignatureHelpCollector final : public CodeCompleteConsumer { public: - SignatureHelpCollector(const CodeCompleteOptions &CodeCompleteOpts, + SignatureHelpCollector(const clang::CodeCompleteOptions &CodeCompleteOpts, SignatureHelp &SigHelp) : CodeCompleteConsumer(CodeCompleteOpts, /*OutputIsBinary=*/false), SigHelp(SigHelp), @@ -708,7 +710,8 @@ private: }; // SignatureHelpCollector bool invokeCodeComplete(std::unique_ptr<CodeCompleteConsumer> Consumer, - const CodeCompleteOptions &Options, PathRef FileName, + const clang::CodeCompleteOptions &Options, + PathRef FileName, const tooling::CompileCommand &Command, PrecompiledPreamble const *Preamble, StringRef Contents, Position Pos, IntrusiveRefCntPtr<vfs::FileSystem> VFS, @@ -774,29 +777,51 @@ bool invokeCodeComplete(std::unique_ptr<CodeCompleteConsumer> Consumer, } // namespace +clangd::CodeCompleteOptions::CodeCompleteOptions( + bool EnableSnippetsAndCodePatterns) + : CodeCompleteOptions() { + EnableSnippets = EnableSnippetsAndCodePatterns; + IncludeCodePatterns = EnableSnippetsAndCodePatterns; +} + +clangd::CodeCompleteOptions::CodeCompleteOptions(bool EnableSnippets, + bool IncludeCodePatterns, + bool IncludeMacros, + bool IncludeGlobals, + bool IncludeBriefComments) + : EnableSnippets(EnableSnippets), IncludeCodePatterns(IncludeCodePatterns), + IncludeMacros(IncludeMacros), IncludeGlobals(IncludeGlobals), + IncludeBriefComments(IncludeBriefComments) {} + +clang::CodeCompleteOptions clangd::CodeCompleteOptions::getClangCompleteOpts() { + clang::CodeCompleteOptions Result; + Result.IncludeCodePatterns = EnableSnippets && IncludeCodePatterns; + Result.IncludeMacros = IncludeMacros; + Result.IncludeGlobals = IncludeGlobals; + Result.IncludeBriefComments = IncludeBriefComments; + + return Result; +} + std::vector<CompletionItem> clangd::codeComplete(PathRef FileName, tooling::CompileCommand Command, PrecompiledPreamble const *Preamble, StringRef Contents, Position Pos, IntrusiveRefCntPtr<vfs::FileSystem> VFS, std::shared_ptr<PCHContainerOperations> PCHs, - bool SnippetCompletions, clangd::Logger &Logger) { + clangd::CodeCompleteOptions Opts, clangd::Logger &Logger) { std::vector<CompletionItem> Results; - CodeCompleteOptions Options; std::unique_ptr<CodeCompleteConsumer> Consumer; - Options.IncludeGlobals = true; - Options.IncludeMacros = true; - Options.IncludeBriefComments = true; - if (SnippetCompletions) { - Options.IncludeCodePatterns = true; - Consumer = - llvm::make_unique<SnippetCompletionItemsCollector>(Options, Results); + clang::CodeCompleteOptions ClangCompleteOpts = Opts.getClangCompleteOpts(); + if (Opts.EnableSnippets) { + Consumer = llvm::make_unique<SnippetCompletionItemsCollector>( + ClangCompleteOpts, Results); } else { - Options.IncludeCodePatterns = false; - Consumer = - llvm::make_unique<PlainTextCompletionItemsCollector>(Options, Results); + Consumer = llvm::make_unique<PlainTextCompletionItemsCollector>( + ClangCompleteOpts, Results); } - invokeCodeComplete(std::move(Consumer), Options, FileName, Command, Preamble, - Contents, Pos, std::move(VFS), std::move(PCHs), Logger); + invokeCodeComplete(std::move(Consumer), ClangCompleteOpts, FileName, Command, + Preamble, Contents, Pos, std::move(VFS), std::move(PCHs), + Logger); return Results; } @@ -807,7 +832,7 @@ clangd::signatureHelp(PathRef FileName, tooling::CompileCommand Command, std::shared_ptr<PCHContainerOperations> PCHs, clangd::Logger &Logger) { SignatureHelp Result; - CodeCompleteOptions Options; + clang::CodeCompleteOptions Options; Options.IncludeGlobals = false; Options.IncludeMacros = false; Options.IncludeCodePatterns = false; |