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 }