summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/Protocol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/Protocol.cpp')
-rw-r--r--clang-tools-extra/clangd/Protocol.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/Protocol.cpp b/clang-tools-extra/clangd/Protocol.cpp
index 07b563a5e5f..fb3f05aa226 100644
--- a/clang-tools-extra/clangd/Protocol.cpp
+++ b/clang-tools-extra/clangd/Protocol.cpp
@@ -386,6 +386,35 @@ bool fromJSON(const json::Expr &Params, TextDocumentPositionParams &R) {
O.map("position", R.position);
}
+static StringRef toTextKind(MarkupKind Kind) {
+ switch (Kind) {
+ case MarkupKind::PlainText:
+ return "plaintext";
+ case MarkupKind::Markdown:
+ return "markdown";
+ }
+ llvm_unreachable("Invalid MarkupKind");
+}
+
+json::Expr toJSON(const MarkupContent &MC) {
+ if (MC.Value.empty())
+ return nullptr;
+
+ return json::obj{
+ {"kind", toTextKind(MC.Kind)},
+ {"value", MC.Value},
+ };
+}
+
+json::Expr toJSON(const Hover &H) {
+ json::obj Result{{"contents", toJSON(H.Contents)}};
+
+ if (H.Range.hasValue())
+ Result["range"] = toJSON(*H.Range);
+
+ return std::move(Result);
+}
+
json::Expr toJSON(const CompletionItem &CI) {
assert(!CI.label.empty() && "completion item label is required");
json::obj Result{{"label", CI.label}};
OpenPOWER on IntegriCloud