mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-26 17:41:58 +00:00
Index namespaces as Type
This commit is contained in:
parent
98d75ae79c
commit
c4e8db2964
@ -758,6 +758,7 @@ bool IsTypeDefinition(const CXIdxContainerInfo* container) {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch (container->cursor.kind) {
|
switch (container->cursor.kind) {
|
||||||
|
case CXCursor_Namespace:
|
||||||
case CXCursor_EnumDecl:
|
case CXCursor_EnumDecl:
|
||||||
case CXCursor_UnionDecl:
|
case CXCursor_UnionDecl:
|
||||||
case CXCursor_StructDecl:
|
case CXCursor_StructDecl:
|
||||||
@ -1293,8 +1294,33 @@ void OnIndexDeclaration(CXClientData client_data, const CXIdxDeclInfo* decl) {
|
|||||||
NamespaceHelper* ns = ¶m->ns;
|
NamespaceHelper* ns = ¶m->ns;
|
||||||
|
|
||||||
switch (decl->entityInfo->kind) {
|
switch (decl->entityInfo->kind) {
|
||||||
case CXIdxEntity_CXXNamespace:
|
case CXIdxEntity_CXXNamespace: {
|
||||||
|
ClangCursor decl_cursor = decl->cursor;
|
||||||
|
Range decl_spell = decl_cursor.get_spelling_range();
|
||||||
|
IndexTypeId ns_id = db->ToTypeId(HashUsr(decl->entityInfo->USR));
|
||||||
|
IndexType* ns = db->Resolve(ns_id);
|
||||||
|
ns->def.kind = GetSymbolKind(decl->entityInfo->kind);
|
||||||
|
if (ns->def.short_name.empty()) {
|
||||||
|
if (decl->entityInfo->name)
|
||||||
|
ns->def.short_name = decl->entityInfo->name;
|
||||||
|
else
|
||||||
|
ns->def.short_name = "(anon)";
|
||||||
|
ns->def.detailed_name = param->ns.QualifiedName(decl->semanticContainer,
|
||||||
|
ns->def.short_name);
|
||||||
|
ns->def.definition_spelling = decl_spell;
|
||||||
|
ns->def.definition_extent = decl_cursor.get_extent();
|
||||||
|
if (decl->semanticContainer) {
|
||||||
|
IndexTypeId parent_id = db->ToTypeId(
|
||||||
|
ClangCursor(decl->semanticContainer->cursor).get_usr_hash());
|
||||||
|
db->Resolve(parent_id)->derived.push_back(ns_id);
|
||||||
|
// |ns| may be invalidated.
|
||||||
|
ns = db->Resolve(ns_id);
|
||||||
|
ns->def.parents.push_back(parent_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ns->uses.push_back(decl_spell);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case CXIdxEntity_ObjCProperty:
|
case CXIdxEntity_ObjCProperty:
|
||||||
case CXIdxEntity_ObjCIvar:
|
case CXIdxEntity_ObjCIvar:
|
||||||
@ -1691,7 +1717,9 @@ void OnIndexReference(CXClientData client_data, const CXIdxEntityRefInfo* ref) {
|
|||||||
switch (ref->referencedEntity->kind) {
|
switch (ref->referencedEntity->kind) {
|
||||||
case CXIdxEntity_CXXNamespaceAlias:
|
case CXIdxEntity_CXXNamespaceAlias:
|
||||||
case CXIdxEntity_CXXNamespace: {
|
case CXIdxEntity_CXXNamespace: {
|
||||||
// We don't index namespace usages.
|
ClangCursor referenced = ref->referencedEntity->cursor;
|
||||||
|
IndexType* ns = db->Resolve(db->ToTypeId(referenced.get_usr_hash()));
|
||||||
|
ns->uses.push_back(cursor.get_spelling_range());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,7 +435,15 @@ optional<lsSymbolInformation> GetSymbolInfo(QueryDatabase* db,
|
|||||||
use_short_name ? type.def->short_name : type.def->detailed_name;
|
use_short_name ? type.def->short_name : type.def->detailed_name;
|
||||||
if (type.def->detailed_name != type.def->short_name)
|
if (type.def->detailed_name != type.def->short_name)
|
||||||
info.containerName = type.def->detailed_name;
|
info.containerName = type.def->detailed_name;
|
||||||
info.kind = lsSymbolKind::Class;
|
// TODO ClangSymbolKind -> lsSymbolKind
|
||||||
|
switch (type.def->kind) {
|
||||||
|
default:
|
||||||
|
info.kind = lsSymbolKind::Class;
|
||||||
|
break;
|
||||||
|
case ClangSymbolKind::Namespace:
|
||||||
|
info.kind = lsSymbolKind::Namespace;
|
||||||
|
break;
|
||||||
|
}
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
case SymbolKind::Func: {
|
case SymbolKind::Func: {
|
||||||
|
Loading…
Reference in New Issue
Block a user