textDocument/documentSymbol

This commit is contained in:
Fangrui Song 2018-09-12 21:03:35 -07:00
parent 6bca153ee3
commit 1969731781
5 changed files with 9 additions and 16 deletions

View File

@ -84,7 +84,7 @@ struct Handler_TextDocumentDocumentSymbol
for (auto [sym, refcnt] : symbol2refcnt) { for (auto [sym, refcnt] : symbol2refcnt) {
if (refcnt <= 0) continue; if (refcnt <= 0) continue;
if (std::optional<lsSymbolInformation> info = if (std::optional<lsSymbolInformation> info =
GetSymbolInfo(db, working_files, sym, false)) { GetSymbolInfo(db, sym, false)) {
if (sym.kind == SymbolKind::Var) { if (sym.kind == SymbolKind::Var) {
QueryVar &var = db->GetVar(sym); QueryVar &var = db->GetVar(sym);
auto *def = var.AnyDef(); auto *def = var.AnyDef();

View File

@ -31,8 +31,7 @@ MethodType kMethodType = "workspace/symbol";
bool AddSymbol( bool AddSymbol(
DB *db, WorkingFiles *working_files, SymbolIdx sym, bool use_detailed, DB *db, WorkingFiles *working_files, SymbolIdx sym, bool use_detailed,
std::vector<std::tuple<lsSymbolInformation, int, SymbolIdx>> *result) { std::vector<std::tuple<lsSymbolInformation, int, SymbolIdx>> *result) {
std::optional<lsSymbolInformation> info = std::optional<lsSymbolInformation> info = GetSymbolInfo(db, sym, true);
GetSymbolInfo(db, working_files, sym, true);
if (!info) if (!info)
return false; return false;

View File

@ -286,11 +286,8 @@ lsSymbolKind GetSymbolKind(DB *db, SymbolIdx sym) {
return ret; return ret;
} }
// Returns a symbol. The symbol will have *NOT* have a location assigned. std::optional<lsSymbolInformation> GetSymbolInfo(DB *db, SymbolIdx sym,
std::optional<lsSymbolInformation> GetSymbolInfo(DB *db, bool detailed) {
WorkingFiles *working_files,
SymbolIdx sym,
bool detailed_name) {
switch (sym.kind) { switch (sym.kind) {
case SymbolKind::Invalid: case SymbolKind::Invalid:
break; break;
@ -307,12 +304,11 @@ std::optional<lsSymbolInformation> GetSymbolInfo(DB *db,
default: { default: {
lsSymbolInformation info; lsSymbolInformation info;
EachEntityDef(db, sym, [&](const auto &def) { EachEntityDef(db, sym, [&](const auto &def) {
if (detailed_name) if (detailed)
info.name = def.detailed_name; info.name = def.detailed_name;
else else
info.name = def.Name(true); info.name = def.Name(true);
info.kind = def.kind; info.kind = def.kind;
info.containerName = def.detailed_name;
return false; return false;
}); });
return info; return info;

View File

@ -47,11 +47,9 @@ std::optional<lsLocationEx> GetLsLocationEx(DB *db, WorkingFiles *working_files,
Use use, bool container); Use use, bool container);
std::vector<lsLocationEx> GetLsLocationExs(DB *db, WorkingFiles *working_files, std::vector<lsLocationEx> GetLsLocationExs(DB *db, WorkingFiles *working_files,
const std::vector<Use> &refs); const std::vector<Use> &refs);
// Returns a symbol. The symbol will have *NOT* have a location assigned. // Returns a symbol. The symbol will *NOT* have a location assigned.
std::optional<lsSymbolInformation> GetSymbolInfo(DB *db, std::optional<lsSymbolInformation> GetSymbolInfo(DB *db, SymbolIdx sym,
WorkingFiles *working_files, bool detailed);
SymbolIdx sym,
bool detailed_name);
std::vector<SymbolRef> FindSymbolsAtLocation(WorkingFile *working_file, std::vector<SymbolRef> FindSymbolsAtLocation(WorkingFile *working_file,
QueryFile *file, QueryFile *file,

View File

@ -76,6 +76,6 @@ struct lsSymbolInformation {
std::string_view name; std::string_view name;
lsSymbolKind kind; lsSymbolKind kind;
lsLocation location; lsLocation location;
std::string_view containerName; std::optional<std::string_view> containerName;
}; };
MAKE_REFLECT_STRUCT(lsSymbolInformation, name, kind, location, containerName); MAKE_REFLECT_STRUCT(lsSymbolInformation, name, kind, location, containerName);