From 3f35bb2d15a4df45a4e7d171b42c33c65b9267a3 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Thu, 4 Aug 2011 20:04:59 +0000 Subject: Add a new libclang API to return a CXCompletionString for an arbitrary cursor, from Connor Wakamo! Addresses . llvm-svn: 136911 --- clang/tools/libclang/CXCursor.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'clang/tools/libclang/CXCursor.cpp') diff --git a/clang/tools/libclang/CXCursor.cpp b/clang/tools/libclang/CXCursor.cpp index b3c57dc9344..bbc93438a5b 100644 --- a/clang/tools/libclang/CXCursor.cpp +++ b/clang/tools/libclang/CXCursor.cpp @@ -577,4 +577,40 @@ unsigned clang_CXCursorSet_insert(CXCursorSet set, CXCursor cursor) { entry = 1; return flag; } + +CXCompletionString clang_getCursorCompletionString(CXCursor cursor) { + enum CXCursorKind kind = clang_getCursorKind(cursor); + if (clang_isDeclaration(kind)) { + Decl *decl = getCursorDecl(cursor); + if (isa(decl)) { + NamedDecl *namedDecl = (NamedDecl *)decl; + ASTUnit *unit = getCursorASTUnit(cursor); + if (unit->hasSema()) { + Sema &S = unit->getSema(); + CodeCompletionAllocator *Allocator + = unit->getCursorCompletionAllocator().getPtr(); + CodeCompletionResult Result(namedDecl); + CodeCompletionString *String + = Result.CreateCodeCompletionString(S, *Allocator); + return String; + } + } + } + else if (kind == CXCursor_MacroDefinition) { + MacroDefinition *definition = getCursorMacroDefinition(cursor); + const IdentifierInfo *MacroInfo = definition->getName(); + ASTUnit *unit = getCursorASTUnit(cursor); + if (unit->hasSema()) { + Sema &S = unit->getSema(); + CodeCompletionAllocator *Allocator + = unit->getCursorCompletionAllocator().getPtr(); + CodeCompletionResult Result((IdentifierInfo *)MacroInfo); + CodeCompletionString *String + = Result.CreateCodeCompletionString(S, *Allocator); + return String; + } + } + return NULL; +} + } // end: extern "C" -- cgit v1.2.3