[clangd] Add code completion support
Summary: Adds code completion support to clangd.
Reviewers: bkramer, malaperle-ericsson
Reviewed By: bkramer, malaperle-ericsson
Subscribers: stanionascu, malaperle-ericsson, cfe-commits
Differential Revision: https://reviews.llvm.org/D31328
llvm-svn: 299421
diff --git a/clang-tools-extra/clangd/ProtocolHandlers.cpp b/clang-tools-extra/clangd/ProtocolHandlers.cpp
index 8edd6c5..43a98b8 100644
--- a/clang-tools-extra/clangd/ProtocolHandlers.cpp
+++ b/clang-tools-extra/clangd/ProtocolHandlers.cpp
@@ -178,3 +178,25 @@
R"(, "result": [)" + Commands +
R"(]})");
}
+
+void CompletionHandler::handleMethod(llvm::yaml::MappingNode *Params,
+ StringRef ID) {
+ auto TDPP = TextDocumentPositionParams::parse(Params);
+ if (!TDPP) {
+ Output.log("Failed to decode TextDocumentPositionParams!\n");
+ return;
+ }
+
+ auto Items = AST.codeComplete(TDPP->textDocument.uri, TDPP->position.line,
+ TDPP->position.character);
+ std::string Completions;
+ for (const auto &Item : Items) {
+ Completions += CompletionItem::unparse(Item);
+ Completions += ",";
+ }
+ if (!Completions.empty())
+ Completions.pop_back();
+ writeMessage(
+ R"({"jsonrpc":"2.0","id":)" + ID.str() +
+ R"(,"result":[)" + Completions + R"(]})");
+}