Uniquify $ccls/inheritanceHierarchy and add flat to $ccls/memberHierarchy

This commit is contained in:
Fangrui Song 2018-08-23 20:33:58 -07:00
parent 48c92c05a1
commit caddc18860
3 changed files with 38 additions and 9 deletions

View File

@ -199,6 +199,9 @@ struct Handler_CclsInheritanceHierarchy
for (auto &entry1 : entry->children)
q.push(&entry1);
}
std::sort(out1.result.begin(), out1.result.end());
out1.result.erase(std::unique(out1.result.begin(), out1.result.end()),
out1.result.end());
}
pipeline::WriteStdout(kMethodType, out1);
}

View File

@ -21,6 +21,7 @@ using namespace ccls;
#include <clang/AST/Type.h>
using namespace clang;
#include <queue>
#include <unordered_set>
namespace {
@ -41,12 +42,12 @@ struct In_CclsMemberHierarchy : public RequestInMessage {
bool qualified = false;
int levels = 1;
};
Params params;
bool flat = false;
} params;
};
MAKE_REFLECT_STRUCT(In_CclsMemberHierarchy::Params, textDocument, position, id,
qualified, levels);
qualified, levels, flat);
MAKE_REFLECT_STRUCT(In_CclsMemberHierarchy, id, params);
REGISTER_IN_MESSAGE(In_CclsMemberHierarchy);
@ -276,7 +277,29 @@ struct Handler_CclsMemberHierarchy
}
}
if (!params.flat) {
pipeline::WriteStdout(kMethodType, out);
return;
}
Out_LocationList out1;
out1.id = request->id;
if (out.result) {
std::queue<Out_CclsMemberHierarchy::Entry *> q;
for (auto &entry1 : out.result->children)
q.push(&entry1);
while (q.size()) {
auto *entry = q.front();
q.pop();
if (entry->location.uri.raw_uri.size())
out1.result.push_back({entry->location});
for (auto &entry1 : entry->children)
q.push(&entry1);
}
std::sort(out1.result.begin(), out1.result.end());
out1.result.erase(std::unique(out1.result.begin(), out1.result.end()),
out1.result.end());
}
pipeline::WriteStdout(kMethodType, out1);
}
};
REGISTER_MESSAGE_HANDLER(Handler_CclsMemberHierarchy);

View File

@ -154,6 +154,8 @@ struct lsServerCapabilities {
bool definitionProvider = true;
// The server provides Goto Type Definition support.
bool typeDefinitionProvider = true;
// The server provides Goto Implementation support.
bool implementationProvider = true;
// The server provides find references support.
bool referencesProvider = true;
// The server provides document highlight support.
@ -182,11 +184,12 @@ struct lsServerCapabilities {
};
MAKE_REFLECT_STRUCT(lsServerCapabilities, textDocumentSync, hoverProvider,
completionProvider, signatureHelpProvider,
definitionProvider, typeDefinitionProvider,
referencesProvider, documentHighlightProvider,
documentSymbolProvider, workspaceSymbolProvider,
codeActionProvider, codeLensProvider,
documentFormattingProvider, documentRangeFormattingProvider,
definitionProvider, implementationProvider,
typeDefinitionProvider, referencesProvider,
documentHighlightProvider, documentSymbolProvider,
workspaceSymbolProvider, codeActionProvider,
codeLensProvider, documentFormattingProvider,
documentRangeFormattingProvider,
documentOnTypeFormattingProvider, renameProvider,
documentLinkProvider, executeCommandProvider);