From b0826bdffe48b91d9d1dad7437e2266635c5b7dd Mon Sep 17 00:00:00 2001 From: Ilya Biryukov Date: Thu, 3 Jan 2019 13:37:12 +0000 Subject: [clangd] Check preceding char when completion triggers on ':' or '>' Summary: Only run completion when we were trigerred on '->' and '::', otherwise send an error code in return. To avoid automatically invoking completions in cases like 'a >^' or 'a ? b :^'. Reviewers: hokein Reviewed By: hokein Subscribers: ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits Differential Revision: https://reviews.llvm.org/D55994 llvm-svn: 350304 --- clang-tools-extra/clangd/Protocol.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'clang-tools-extra/clangd/Protocol.cpp') diff --git a/clang-tools-extra/clangd/Protocol.cpp b/clang-tools-extra/clangd/Protocol.cpp index 972ba25fbe1..fd94ca7d4bc 100644 --- a/clang-tools-extra/clangd/Protocol.cpp +++ b/clang-tools-extra/clangd/Protocol.cpp @@ -550,6 +550,29 @@ bool fromJSON(const json::Value &Params, TextDocumentPositionParams &R) { O.map("position", R.position); } +bool fromJSON(const llvm::json::Value &Params, CompletionContext &R) { + json::ObjectMapper O(Params); + if (!O) + return false; + + int triggerKind; + if (!O.map("triggerKind", triggerKind)) + return false; + R.triggerKind = static_cast(triggerKind); + + if (auto *TC = Params.getAsObject()->get("triggerCharacter")) + return fromJSON(*TC, R.triggerCharacter); + return true; +} + +bool fromJSON(const llvm::json::Value &Params, CompletionParams &R) { + if (!fromJSON(Params, static_cast(R))) + return false; + if (auto *Context = Params.getAsObject()->get("context")) + return fromJSON(*Context, R.context); + return true; +} + static StringRef toTextKind(MarkupKind Kind) { switch (Kind) { case MarkupKind::PlainText: -- cgit v1.2.3