From 55925da4c98b3ddac0f28ccc322e8ee52553e022 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena Date: Tue, 24 Sep 2019 13:38:33 +0000 Subject: [clangd] Add semantic selection to ClangdLSPServer. Summary: This adds semantic selection to the LSP Server. Adds support for serialization of input request and the output reply. Also adds regression tests for the feature. Currently we do not support multi cursor.The LSP Server only accepts single position in the request as opposed to many position in the spec. Spec: https://github.com/microsoft/language-server-protocol/blob/dbaeumer/3.15/specification.md#textDocument_selectionRange Reviewers: hokein Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D67720 llvm-svn: 372753 --- clang-tools-extra/clangd/Protocol.cpp | 13 +++++++++++++ 1 file changed, 13 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 fb1481da5b5..9b0fbc5b2f3 100644 --- a/clang-tools-extra/clangd/Protocol.cpp +++ b/clang-tools-extra/clangd/Protocol.cpp @@ -1073,5 +1073,18 @@ llvm::json::Value toJSON(const SemanticHighlightingParams &Highlighting) { }; } +bool fromJSON(const llvm::json::Value &Params, SelectionRangeParams &P) { + llvm::json::ObjectMapper O(Params); + return O && O.map("textDocument", P.textDocument) && + O.map("positions", P.positions); +} + +llvm::json::Value toJSON(const SelectionRange &Out) { + if (Out.parent) { + return llvm::json::Object{{"range", Out.range}, + {"parent", toJSON(*Out.parent)}}; + } + return llvm::json::Object{{"range", Out.range}}; +} } // namespace clangd } // namespace clang -- cgit v1.2.3