diff options
Diffstat (limited to 'tools/c-index-test/c-index-test.c')
-rw-r--r-- | tools/c-index-test/c-index-test.c | 159 |
1 files changed, 56 insertions, 103 deletions
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c index b983d3a4de..99d8b5d5fa 100644 --- a/tools/c-index-test/c-index-test.c +++ b/tools/c-index-test/c-index-test.c @@ -198,120 +198,73 @@ typedef void (*PostVisitTU)(CXTranslationUnit); void PrintDiagnostic(CXDiagnostic Diagnostic) { FILE *out = stderr; CXFile file; - unsigned line, column; CXString text; - enum CXDiagnosticSeverity severity = clang_getDiagnosticSeverity(Diagnostic); + unsigned display_opts = CXDiagnostic_DisplaySourceLocation + | CXDiagnostic_DisplayColumn | CXDiagnostic_DisplaySourceRanges; + unsigned i, num_fixits; - /* Ignore diagnostics that should be ignored. */ - if (severity == CXDiagnostic_Ignored) + clang_displayDiagnostic(Diagnostic, out, display_opts); + if (clang_getDiagnosticSeverity(Diagnostic) == CXDiagnostic_Ignored) return; - /* Print file:line:column. */ clang_getInstantiationLocation(clang_getDiagnosticLocation(Diagnostic), - &file, &line, &column, 0); - if (file) { - unsigned i, n; - unsigned printed_any_ranges = 0; - CXString fname; - - fname = clang_getFileName(file); - fprintf(out, "%s:%d:%d:", clang_getCString(fname), line, column); - clang_disposeString(fname); + &file, 0, 0, 0); + if (!file) + return; - n = clang_getDiagnosticNumRanges(Diagnostic); - for (i = 0; i != n; ++i) { + num_fixits = clang_getDiagnosticNumFixIts(Diagnostic); + for (i = 0; i != num_fixits; ++i) { + switch (clang_getDiagnosticFixItKind(Diagnostic, i)) { + case CXFixIt_Insertion: { + CXSourceLocation insertion_loc; + CXFile insertion_file; + unsigned insertion_line, insertion_column; + text = clang_getDiagnosticFixItInsertion(Diagnostic, i, &insertion_loc); + clang_getInstantiationLocation(insertion_loc, &insertion_file, + &insertion_line, &insertion_column, 0); + if (insertion_file == file) + fprintf(out, "FIX-IT: Insert \"%s\" at %d:%d\n", + clang_getCString(text), insertion_line, insertion_column); + clang_disposeString(text); + break; + } + + case CXFixIt_Removal: { CXFile start_file, end_file; - CXSourceRange range = clang_getDiagnosticRange(Diagnostic, i); - unsigned start_line, start_column, end_line, end_column; - clang_getInstantiationLocation(clang_getRangeStart(range), - &start_file, &start_line, &start_column,0); - clang_getInstantiationLocation(clang_getRangeEnd(range), + CXSourceRange remove_range + = clang_getDiagnosticFixItRemoval(Diagnostic, i); + clang_getInstantiationLocation(clang_getRangeStart(remove_range), + &start_file, &start_line, &start_column, + 0); + clang_getInstantiationLocation(clang_getRangeEnd(remove_range), &end_file, &end_line, &end_column, 0); - - if (start_file != end_file || start_file != file) - continue; - - PrintExtent(out, start_line, start_column, end_line, end_column); - printed_any_ranges = 1; - } - if (printed_any_ranges) - fprintf(out, ":"); - - fprintf(out, " "); - } - - /* Print warning/error/etc. */ - switch (severity) { - case CXDiagnostic_Ignored: assert(0 && "impossible"); break; - case CXDiagnostic_Note: fprintf(out, "note: "); break; - case CXDiagnostic_Warning: fprintf(out, "warning: "); break; - case CXDiagnostic_Error: fprintf(out, "error: "); break; - case CXDiagnostic_Fatal: fprintf(out, "fatal error: "); break; - } - - text = clang_getDiagnosticSpelling(Diagnostic); - if (clang_getCString(text)) - fprintf(out, "%s\n", clang_getCString(text)); - else - fprintf(out, "<no diagnostic text>\n"); - clang_disposeString(text); - - if (file) { - unsigned i, num_fixits = clang_getDiagnosticNumFixIts(Diagnostic); - for (i = 0; i != num_fixits; ++i) { - switch (clang_getDiagnosticFixItKind(Diagnostic, i)) { - case CXFixIt_Insertion: { - CXSourceLocation insertion_loc; - CXFile insertion_file; - unsigned insertion_line, insertion_column; - text = clang_getDiagnosticFixItInsertion(Diagnostic, i, &insertion_loc); - clang_getInstantiationLocation(insertion_loc, &insertion_file, - &insertion_line, &insertion_column, 0); - if (insertion_file == file) - fprintf(out, "FIX-IT: Insert \"%s\" at %d:%d\n", - clang_getCString(text), insertion_line, insertion_column); - clang_disposeString(text); - break; - } - - case CXFixIt_Removal: { - CXFile start_file, end_file; - unsigned start_line, start_column, end_line, end_column; - CXSourceRange remove_range - = clang_getDiagnosticFixItRemoval(Diagnostic, i); - clang_getInstantiationLocation(clang_getRangeStart(remove_range), - &start_file, &start_line, &start_column, - 0); - clang_getInstantiationLocation(clang_getRangeEnd(remove_range), - &end_file, &end_line, &end_column, 0); - if (start_file == file && end_file == file) { - fprintf(out, "FIX-IT: Remove "); - PrintExtent(out, start_line, start_column, end_line, end_column); - fprintf(out, "\n"); - } - break; - } - - case CXFixIt_Replacement: { - CXFile start_file, end_file; - unsigned start_line, start_column, end_line, end_column; - CXSourceRange remove_range; - text = clang_getDiagnosticFixItReplacement(Diagnostic, i,&remove_range); - clang_getInstantiationLocation(clang_getRangeStart(remove_range), - &start_file, &start_line, &start_column, - 0); - clang_getInstantiationLocation(clang_getRangeEnd(remove_range), - &end_file, &end_line, &end_column, 0); - if (start_file == end_file) { - fprintf(out, "FIX-IT: Replace "); - PrintExtent(out, start_line, start_column, end_line, end_column); - fprintf(out, " with \"%s\"\n", clang_getCString(text)); - } - clang_disposeString(text); - break; + if (start_file == file && end_file == file) { + fprintf(out, "FIX-IT: Remove "); + PrintExtent(out, start_line, start_column, end_line, end_column); + fprintf(out, "\n"); } + break; + } + + case CXFixIt_Replacement: { + CXFile start_file, end_file; + unsigned start_line, start_column, end_line, end_column; + CXSourceRange remove_range; + text = clang_getDiagnosticFixItReplacement(Diagnostic, i,&remove_range); + clang_getInstantiationLocation(clang_getRangeStart(remove_range), + &start_file, &start_line, &start_column, + 0); + clang_getInstantiationLocation(clang_getRangeEnd(remove_range), + &end_file, &end_line, &end_column, 0); + if (start_file == end_file) { + fprintf(out, "FIX-IT: Replace "); + PrintExtent(out, start_line, start_column, end_line, end_column); + fprintf(out, " with \"%s\"\n", clang_getCString(text)); } + clang_disposeString(text); + break; + } } } } |