File indexing completed on 2024-05-12 04:39:14

0001 /*
0002     SPDX-FileCopyrightText: 2015 Milian Wolff <mail@milianw.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #include <clang-c/Index.h>
0008 
0009 #include <cstdio>
0010 
0011 CXChildVisitResult visitCursor(CXCursor cursor, CXCursor /*parent*/, CXClientData /*data*/)
0012 {
0013     auto range = clang_getCursorExtent(cursor);
0014     auto start = clang_getRangeStart(range);
0015     auto end = clang_getRangeEnd(range);
0016     CXFile file;
0017     unsigned startLine, startColumn;
0018     clang_getSpellingLocation(start, &file, &startLine, &startColumn, nullptr);
0019     unsigned endLine, endColumn;
0020     clang_getSpellingLocation(end, nullptr, &endLine, &endColumn, nullptr);
0021 
0022     auto str = clang_getCursorSpelling(cursor);
0023     auto fileStr = clang_getFileName(file);
0024     auto typeStr = clang_getCursorKindSpelling(cursor.kind);
0025     printf("\"%s\" [(%u, %u), (%u, %u)] in %s | %s %s\n", clang_getCString(str),
0026            startLine, startColumn, endLine, endColumn,
0027            clang_getCString(fileStr), clang_getCString(typeStr),
0028            clang_isCursorDefinition(cursor) ? "(definition)" : "");
0029 
0030     clang_disposeString(str);
0031     clang_disposeString(fileStr);
0032     clang_disposeString(typeStr);
0033     return CXChildVisit_Recurse;
0034 }
0035 
0036 int main(int argc, char** argv)
0037 {
0038     auto clangVersion = clang_getClangVersion();
0039     printf("%s\n\n", clang_getCString(clangVersion));
0040     clang_disposeString(clangVersion);
0041 
0042     if (argc != 2) {
0043         printf("Usage: clang-minimal-visitor file.cpp\n");
0044         return 1;
0045     }
0046 
0047     auto index = clang_createIndex(0, 0);
0048 
0049     CXTranslationUnit unit;
0050     clang_parseTranslationUnit2(index, argv[1], nullptr, 0, nullptr, 0, 0, &unit);
0051 
0052     auto tuCursor = clang_getTranslationUnitCursor(unit);
0053     clang_visitChildren(tuCursor, &visitCursor, nullptr);
0054 
0055     clang_disposeTranslationUnit(unit);
0056     return 0;
0057 }