[clangd] Implement typeHierarchy/resolve for subtypes
Summary:
This allows the client to resolve subtypes one level at a time.
For supertypes, this is not necessary, because we eagerly compute
supertypes and return all levels.
Reviewers: sammccall
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D64308
llvm-svn: 365986
diff --git a/clang-tools-extra/clangd/Protocol.cpp b/clang-tools-extra/clangd/Protocol.cpp
index 7c70afb..600896b 100644
--- a/clang-tools-extra/clangd/Protocol.cpp
+++ b/clang-tools-extra/clangd/Protocol.cpp
@@ -422,8 +422,7 @@
bool fromJSON(const llvm::json::Value &Params,
DocumentRangeFormattingParams &R) {
llvm::json::ObjectMapper O(Params);
- return O && O.map("textDocument", R.textDocument) &&
- O.map("range", R.range);
+ return O && O.map("textDocument", R.textDocument) && O.map("range", R.range);
}
bool fromJSON(const llvm::json::Value &Params,
@@ -445,8 +444,8 @@
llvm::json::Value toJSON(const DiagnosticRelatedInformation &DRI) {
return llvm::json::Object{
- {"location", DRI.location},
- {"message", DRI.message},
+ {"location", DRI.location},
+ {"message", DRI.message},
};
}
@@ -978,6 +977,8 @@
Result["parents"] = I.parents;
if (I.children)
Result["children"] = I.children;
+ if (I.data)
+ Result["data"] = I.data;
return std::move(Result);
}
@@ -996,10 +997,18 @@
O.map("deprecated", I.deprecated);
O.map("parents", I.parents);
O.map("children", I.children);
+ O.map("data", I.data);
return true;
}
+bool fromJSON(const llvm::json::Value &Params,
+ ResolveTypeHierarchyItemParams &P) {
+ llvm::json::ObjectMapper O(Params);
+ return O && O.map("item", P.item) && O.map("resolve", P.resolve) &&
+ O.map("direction", P.direction);
+}
+
bool fromJSON(const llvm::json::Value &Params, ReferenceParams &R) {
TextDocumentPositionParams &Base = R;
return fromJSON(Params, Base);