textDocument/documentSymbol: support unopened files (#548)

This commit is contained in:
Jan Lahoda 2019-12-22 09:26:23 +01:00 committed by Fangrui Song
parent 06a04d5102
commit a2ecd9a8f0
3 changed files with 6 additions and 5 deletions

View File

@ -252,9 +252,9 @@ QueryFile *MessageHandler::findFile(const std::string &path, int *out_file_id) {
std::pair<QueryFile *, WorkingFile *> std::pair<QueryFile *, WorkingFile *>
MessageHandler::findOrFail(const std::string &path, ReplyOnce &reply, MessageHandler::findOrFail(const std::string &path, ReplyOnce &reply,
int *out_file_id) { int *out_file_id, bool allow_unopened) {
WorkingFile *wf = wfiles->getFile(path); WorkingFile *wf = wfiles->getFile(path);
if (!wf) { if (!wf && !allow_unopened) {
reply.notOpened(path); reply.notOpened(path);
return {nullptr, nullptr}; return {nullptr, nullptr};
} }

View File

@ -236,7 +236,8 @@ struct MessageHandler {
QueryFile *findFile(const std::string &path, int *out_file_id = nullptr); QueryFile *findFile(const std::string &path, int *out_file_id = nullptr);
std::pair<QueryFile *, WorkingFile *> findOrFail(const std::string &path, std::pair<QueryFile *, WorkingFile *> findOrFail(const std::string &path,
ReplyOnce &reply, ReplyOnce &reply,
int *out_file_id = nullptr); int *out_file_id = nullptr,
bool allow_unopened = false);
private: private:
void bind(const char *method, void (MessageHandler::*handler)(JsonReader &)); void bind(const char *method, void (MessageHandler::*handler)(JsonReader &));

View File

@ -147,8 +147,8 @@ void MessageHandler::textDocument_documentSymbol(JsonReader &reader,
int file_id; int file_id;
auto [file, wf] = auto [file, wf] =
findOrFail(param.textDocument.uri.getPath(), reply, &file_id); findOrFail(param.textDocument.uri.getPath(), reply, &file_id, true);
if (!wf) if (!file)
return; return;
auto allows = [&](SymbolRef sym) { return !(sym.role & param.excludeRole); }; auto allows = [&](SymbolRef sym) { return !(sym.role & param.excludeRole); };