Add flat to $ccls/inheritanceHierarchy

This commit is contained in:
Fangrui Song 2018-08-03 23:01:01 -07:00
parent 22627d7a1f
commit 7c1e3fc90e

View File

@ -1,8 +1,9 @@
#include "message_handler.h"
#include "query_utils.h"
#include "pipeline.hh"
#include "query_utils.h"
using namespace ccls;
#include <queue>
#include <unordered_set>
namespace {
@ -24,18 +25,12 @@ struct In_CclsInheritanceHierarchy : public RequestInMessage {
bool derived = false;
bool qualified = true;
int levels = 1;
};
Params params;
bool flat = false;
} params;
};
MAKE_REFLECT_STRUCT(In_CclsInheritanceHierarchy::Params,
textDocument,
position,
id,
kind,
derived,
qualified,
levels);
MAKE_REFLECT_STRUCT(In_CclsInheritanceHierarchy::Params, textDocument, position,
id, kind, derived, qualified, levels, flat);
MAKE_REFLECT_STRUCT(In_CclsInheritanceHierarchy, id, params);
REGISTER_IN_MESSAGE(In_CclsInheritanceHierarchy);
@ -159,7 +154,7 @@ struct Handler_CclsInheritanceHierarchy
Out_CclsInheritanceHierarchy out;
out.id = request->id;
if (params.id.size()) {
if (!params.flat && params.id.size()) {
try {
params.usr = std::stoull(params.id);
} catch (...) {
@ -189,7 +184,26 @@ struct Handler_CclsInheritanceHierarchy
}
}
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_CclsInheritanceHierarchy::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);
}
}
pipeline::WriteStdout(kMethodType, out1);
}
};
REGISTER_MESSAGE_HANDLER(Handler_CclsInheritanceHierarchy);