mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-27 18:11:57 +00:00
Uniquify $ccls/inheritanceHierarchy and add flat to $ccls/memberHierarchy
This commit is contained in:
parent
48c92c05a1
commit
caddc18860
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
pipeline::WriteStdout(kMethodType, out);
|
||||
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);
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user