Minor cleanup for CIndex-based code-completion:
- Provide an actual test for code-completion via CIndex.
- Actually print optional strings in c-index-test
- Export clang_getCompletionChunkCompletionString from CIndex
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86550 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index 8265335..0df590d 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -158,24 +158,37 @@
return "Unknown";
}
-void print_completion_result(CXCompletionResult *completion_result,
- CXClientData client_data) {
- FILE *file = (FILE *)client_data;
+void print_completion_string(CXCompletionString completion_string, FILE *file) {
int I, N;
-
- fprintf(file, "%s:",
- clang_getCursorKindSpelling(completion_result->CursorKind));
- N = clang_getNumCompletionChunks(completion_result->CompletionString);
+
+ N = clang_getNumCompletionChunks(completion_string);
for (I = 0; I != N; ++I) {
- const char *text
- = clang_getCompletionChunkText(completion_result->CompletionString, I);
-
enum CXCompletionChunkKind Kind
- = clang_getCompletionChunkKind(completion_result->CompletionString, I);
+ = clang_getCompletionChunkKind(completion_string, I);
+
+ if (Kind == CXCompletionChunk_Optional) {
+ fprintf(file, "{Optional ");
+ print_completion_string(
+ clang_getCompletionChunkCompletionString(completion_string, I),
+ file);
+ fprintf(file, "}");
+ continue;
+ }
+
+ const char *text
+ = clang_getCompletionChunkText(completion_string, I);
fprintf(file, "{%s %s}",
clang_getCompletionChunkKindSpelling(Kind),
text? text : "");
}
+}
+
+void print_completion_result(CXCompletionResult *completion_result,
+ CXClientData client_data) {
+ FILE *file = (FILE *)client_data;
+ fprintf(file, "%s:",
+ clang_getCursorKindSpelling(completion_result->CursorKind));
+ print_completion_string(completion_result->CompletionString, file);
fprintf(file, "\n");
}