mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-26 01:21:57 +00:00
Add TemplateVisitor to handle CXCursor_OverloadedDeclRef in templates
This commit is contained in:
parent
09a23020de
commit
dd4044998d
@ -393,6 +393,27 @@ std::string GetDocumentContentInRange(CXTranslationUnit cx_tu,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClangCursor::VisitResult TemplateVisitor(ClangCursor cursor,
|
||||||
|
ClangCursor parent,
|
||||||
|
void* client_data) {
|
||||||
|
switch (cursor.get_kind()) {
|
||||||
|
default:
|
||||||
|
cursor.VisitChildren(&TemplateVisitor, client_data);
|
||||||
|
/* fallthrough */
|
||||||
|
case CXCursor_FunctionTemplate:
|
||||||
|
case CXCursor_ClassTemplate:
|
||||||
|
return ClangCursor::VisitResult::Continue;
|
||||||
|
case CXCursor_OverloadedDeclRef: {
|
||||||
|
unsigned num_overloaded = clang_getNumOverloadedDecls(cursor.cx_cursor);
|
||||||
|
for (unsigned i = 0; i != num_overloaded; i++) {
|
||||||
|
// ClangCursor overloaded = clang_getOverloadedDecl(cursor.cx_cursor, i);
|
||||||
|
// TODO handle references
|
||||||
|
}
|
||||||
|
return ClangCursor::VisitResult::Continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
// static
|
// static
|
||||||
@ -1255,6 +1276,14 @@ void OnIndexDeclaration(CXClientData client_data, const CXIdxDeclInfo* decl) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CXCursor_OverloadedDeclRef in templates are not processed by
|
||||||
|
// OnIndexReference, thus we use TemplateVisitor to collect function
|
||||||
|
// references.
|
||||||
|
if (decl->entityInfo->templateKind == CXIdxEntity_Template) {
|
||||||
|
// TODO put db and caller into client data
|
||||||
|
decl_cursor.VisitChildren(&TemplateVisitor, (void*)0);
|
||||||
|
}
|
||||||
|
|
||||||
// Add function usage information. We only want to do it once per
|
// Add function usage information. We only want to do it once per
|
||||||
// definition/declaration. Do it on definition since there should only
|
// definition/declaration. Do it on definition since there should only
|
||||||
// ever be one of those in the entire program.
|
// ever be one of those in the entire program.
|
||||||
|
Loading…
Reference in New Issue
Block a user