Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <clang-c/Index.h>
- #include <iostream>
- std::ostream&
- operator<<(std::ostream& stream, const CXString& str)
- {
- stream << clang_getCString(str);
- clang_disposeString(str);
- return stream;
- }
- void
- displayDiagnostics(CXTranslationUnit TU)
- {
- if (TU == nullptr) {
- std::cerr << "Parsing error!" << std::endl;
- return;
- }
- unsigned int numDiagnostics = clang_getNumDiagnostics(TU);
- std::cerr << numDiagnostics << " diagnostics" << std::endl;
- for (unsigned int i = 0; i < numDiagnostics; ++i) {
- auto diagnostic = clang_getDiagnostic(TU, i);
- auto string = clang_formatDiagnostic(
- diagnostic, clang_defaultDiagnosticDisplayOptions());
- std::cerr << clang_getCString(string) << std::endl;
- clang_disposeString(string);
- clang_disposeDiagnostic(diagnostic);
- }
- }
- int
- main(int argc, char** argv)
- {
- CXIndex index = clang_createIndex(false, // excludeDeclarationFromPCH
- true // displayDiagnostics
- );
- CXTranslationUnit tu;
- unsigned options = clang_defaultEditingTranslationUnitOptions();
- auto unit = clang_parseTranslationUnit2FullArgv(
- index, // CIdx
- "/usr/include/c++/9/vector", // source_filename
- argv + 1, // command_line_args
- argc - 1, // num_command_line_args
- nullptr, // unsave_files
- 0, // num_unsaved_files
- options, // options
- &tu);
- if (unit == CXError_Success)
- std::cout << "Translation unit successfully created" << std::endl;
- else
- std::cout << "Translation unit was not created:" << unit << std::endl;
- CXCursor cursor = clang_getTranslationUnitCursor(tu);
- clang_visitChildren(
- cursor,
- [](CXCursor c, CXCursor /*parent*/, CXClientData /*client_data*/) {
- std::cout << "Cursor '" << clang_getCursorSpelling(c) << "' of kind '"
- << clang_getCursorKindSpelling(clang_getCursorKind(c)) << "'\n";
- return CXChildVisit_Recurse;
- },
- nullptr);
- clang_disposeIndex(index);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement