mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-25 09:05:10 +00:00
Add flat to $ccls/inheritanceHierarchy
This commit is contained in:
parent
22627d7a1f
commit
7c1e3fc90e
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user