File indexing completed on 2024-05-12 04:39:19
0001 /* 0002 SPDX-FileCopyrightText: 2013 Olivier de Gaalon <olivier.jg@gmail.com> 0003 SPDX-FileCopyrightText: 2013 Milian Wolff <mail@milianw.de> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #ifndef CLANGTYPES_H 0009 #define CLANGTYPES_H 0010 0011 #include <clang-c/Index.h> 0012 0013 #include <util/path.h> 0014 0015 #include "clangprivateexport.h" 0016 0017 #include <iterator> 0018 0019 class QTextStream; 0020 0021 namespace KTextEditor { 0022 class Cursor; 0023 class Range; 0024 } 0025 0026 namespace KDevelop { 0027 class DocumentCursor; 0028 class DocumentRange; 0029 class CursorInRevision; 0030 class RangeInRevision; 0031 class IndexedString; 0032 } 0033 0034 inline uint qHash(const CXCursor& cursor) noexcept 0035 { 0036 return clang_hashCursor(cursor); 0037 } 0038 0039 inline bool operator==(const CXCursor& lhs, const CXCursor& rhs) noexcept 0040 { 0041 return clang_equalCursors(lhs, rhs); 0042 } 0043 0044 class ClangString 0045 { 0046 public: 0047 explicit ClangString(CXString string); 0048 ~ClangString(); 0049 0050 ClangString(const ClangString&) = delete; 0051 ClangString& operator=(const ClangString&) = delete; 0052 0053 /** 0054 * Might return nullptr for invalid strings 0055 */ 0056 const char* c_str() const; 0057 0058 bool isEmpty() const; 0059 0060 QString toString() const; 0061 QByteArray toByteArray() const; 0062 KDevelop::IndexedString toIndexed() const; 0063 0064 private: 0065 CXString string; 0066 }; 0067 0068 QTextStream& operator<<(QTextStream& stream, const ClangString& str); 0069 QDebug operator<<(QDebug stream, const ClangString& str); 0070 0071 class ClangLocation 0072 { 0073 public: 0074 explicit ClangLocation(CXSourceLocation cursor); 0075 ~ClangLocation(); 0076 0077 operator KDevelop::DocumentCursor() const; 0078 0079 operator KTextEditor::Cursor() const; 0080 0081 operator KDevelop::CursorInRevision() const; 0082 0083 operator CXSourceLocation() const; 0084 0085 private: 0086 CXSourceLocation location; 0087 }; 0088 0089 QDebug operator<<(QDebug stream, const ClangLocation& str); 0090 0091 class KDEVCLANGPRIVATE_EXPORT ClangRange 0092 { 0093 public: 0094 explicit ClangRange(CXSourceRange range); 0095 0096 ~ClangRange(); 0097 0098 ClangLocation start() const; 0099 ClangLocation end() const; 0100 0101 CXSourceRange range() const; 0102 0103 KDevelop::DocumentRange toDocumentRange() const; 0104 0105 KTextEditor::Range toRange() const; 0106 0107 KDevelop::RangeInRevision toRangeInRevision() const; 0108 0109 private: 0110 CXSourceRange m_range; 0111 }; 0112 0113 QDebug operator<<(QDebug stream, const ClangRange& str); 0114 0115 class KDEVCLANGPRIVATE_EXPORT ClangTokens 0116 { 0117 public: 0118 ClangTokens(CXTranslationUnit unit, CXSourceRange range); 0119 ClangTokens(const ClangTokens&) = delete; 0120 ClangTokens& operator=(const ClangTokens&) = delete; 0121 ~ClangTokens(); 0122 CXToken* begin() const; 0123 CXToken* end() const; 0124 std::reverse_iterator<CXToken*> rbegin() const; 0125 std::reverse_iterator<CXToken*> rend() const; 0126 uint size() const; 0127 CXToken at(uint index) const; 0128 CXTranslationUnit unit() const; 0129 private: 0130 CXTranslationUnit m_unit; 0131 CXToken* m_tokens; 0132 uint m_numTokens; 0133 }; 0134 0135 QDebug operator<<(QDebug stream, const ClangTokens& str); 0136 QDebug operator<<(QDebug stream, const CXToken& token); 0137 0138 #endif // CLANGTYPES_H