summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/ClangdUnit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/ClangdUnit.cpp')
-rw-r--r--clang-tools-extra/clangd/ClangdUnit.cpp69
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;
OpenPOWER on IntegriCloud