mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-23 16:15:07 +00:00
documentSymbol: ignore TypeParameter
Reported by Riatre
This commit is contained in:
parent
61a61dd4a2
commit
dfdabe41b2
@ -64,6 +64,14 @@ struct Out_HierarchicalDocumentSymbol
|
||||
};
|
||||
MAKE_REFLECT_STRUCT(Out_HierarchicalDocumentSymbol, jsonrpc, id, result);
|
||||
|
||||
bool IgnoreType(const QueryType::Def *def) {
|
||||
return !def || def->kind == lsSymbolKind::TypeParameter;
|
||||
}
|
||||
|
||||
bool IgnoreVar(const QueryVar::Def *def) {
|
||||
return !def || def->is_local();
|
||||
}
|
||||
|
||||
struct Handler_TextDocumentDocumentSymbol
|
||||
: BaseMessageHandler<In_TextDocumentDocumentSymbol> {
|
||||
MethodType GetMethodType() const override { return kMethodType; }
|
||||
@ -128,9 +136,11 @@ struct Handler_TextDocumentDocumentSymbol
|
||||
kv.first = static_cast<const void *>(&def);
|
||||
}
|
||||
});
|
||||
if (kv.first && sym.kind == SymbolKind::Var)
|
||||
if (static_cast<const QueryVar::Def *>(kv.first)->is_local())
|
||||
kv.first = nullptr;
|
||||
if (kv.first && ((sym.kind == SymbolKind::Type &&
|
||||
IgnoreType((const QueryType::Def *)kv.first)) ||
|
||||
(sym.kind == SymbolKind::Var &&
|
||||
IgnoreVar((const QueryVar::Def *)kv.first))))
|
||||
kv.first = nullptr;
|
||||
if (!kv.first) {
|
||||
kv.second.reset();
|
||||
continue;
|
||||
@ -186,12 +196,11 @@ struct Handler_TextDocumentDocumentSymbol
|
||||
if (refcnt <= 0) continue;
|
||||
if (std::optional<lsSymbolInformation> info =
|
||||
GetSymbolInfo(db, sym, false)) {
|
||||
if (sym.kind == SymbolKind::Var) {
|
||||
QueryVar &var = db->GetVar(sym);
|
||||
auto *def = var.AnyDef();
|
||||
if (!def || !def->spell || def->is_local())
|
||||
continue;
|
||||
}
|
||||
if ((sym.kind == SymbolKind::Type &&
|
||||
IgnoreType(db->GetType(sym).AnyDef())) ||
|
||||
(sym.kind == SymbolKind::Var &&
|
||||
IgnoreVar(db->GetVar(sym).AnyDef())))
|
||||
continue;
|
||||
if (std::optional<lsLocation> location = GetLsLocation(
|
||||
db, working_files,
|
||||
Use{{sym.range, sym.usr, sym.kind, sym.role}, file_id})) {
|
||||
|
Loading…
Reference in New Issue
Block a user