void PrintDiagnostics(CXTranslationUnit TU) { int i, n = clang_getNumDiagnostics(TU); for (i = 0; i != n; ++i) { CXDiagnostic Diag = clang_getDiagnostic(TU, i); PrintDiagnostic(Diag); clang_disposeDiagnostic(Diag); } }
void Diagnostic(DiagLevels level, const char *message, ...) { va_list arguments; va_start(arguments, message); PrintDiagnostic(level, message, arguments); va_end(arguments); }
void EnableGlobalSwitch::Consume(const std::vector<std::string>& arguments) { if (arguments.empty()==false) { fprintf(stderr, "Error. Expected 0 arguments.\n"); PrintDiagnostic(arguments); exit(-1); } *m_pOption = true; }
void SetGlobalOption::Consume(const std::vector<std::string>& arguments) { if (arguments.size()!=1) { fprintf(stderr, "Error. Expected exactly 1 argument.\n"); PrintDiagnostic(arguments); exit(-1); } *m_pOption = arguments.front(); }
void SetGlobalInt::Consume(const std::vector<std::string>& arguments) { if (arguments.size()!=1) { fprintf(stderr, "Error. Expected exactly 1 argument.\n"); PrintDiagnostic(arguments); exit(-1); } *m_pOption = ParseCLInt(arguments.front().c_str(), m_Lower, m_Upper, m_ShortStr.c_str()); }
void PositionedDiagnostic(DiagLevels level, const char *fileName, int line, const char *message, ...) { va_list arguments; char extendedMessage[512]; char lineImage[10]; sprintf(lineImage, ":%d ", line); va_start(arguments, message); if((strlen(fileName) + strlen(lineImage) + strlen(message)) < sizeof(extendedMessage)) { sprintf(extendedMessage, "%s%s%s", fileName, lineImage, message); PrintDiagnostic(level, extendedMessage, arguments); } else { PrintDiagnostic(level, message, arguments); } va_end(arguments); }
int perform_code_completion(int argc, const char **argv) { const char *input = argv[1]; char *filename = 0; unsigned line; unsigned column; CXIndex CIdx; int errorCode; struct CXUnsavedFile *unsaved_files = 0; int num_unsaved_files = 0; CXCodeCompleteResults *results = 0; input += strlen("-code-completion-at="); if ((errorCode = parse_file_line_column(input, &filename, &line, &column, 0, 0))) return errorCode; if (parse_remapped_files(argc, argv, 2, &unsaved_files, &num_unsaved_files)) return -1; CIdx = clang_createIndex(0, 1); results = clang_codeComplete(CIdx, argv[argc - 1], argc - num_unsaved_files - 3, argv + num_unsaved_files + 2, num_unsaved_files, unsaved_files, filename, line, column); if (results) { unsigned i, n = results->NumResults; for (i = 0; i != n; ++i) print_completion_result(results->Results + i, stdout); n = clang_codeCompleteGetNumDiagnostics(results); for (i = 0; i != n; ++i) { CXDiagnostic diag = clang_codeCompleteGetDiagnostic(results, i); PrintDiagnostic(diag); clang_disposeDiagnostic(diag); } clang_disposeCodeCompleteResults(results); } clang_disposeIndex(CIdx); free(filename); free_remapped_files(unsaved_files, num_unsaved_files); return 0; }