File indexing completed on 2024-05-19 04:39:18
0001 /* 0002 SPDX-FileCopyrightText: 2010 David Nolden <david.nolden.kdevelop@art-master.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #ifndef KDEVPLATFORM_DOCUMENTRANGE_H 0008 #define KDEVPLATFORM_DOCUMENTRANGE_H 0009 0010 #include <language/languageexport.h> 0011 #include <serialization/indexedstring.h> 0012 0013 #include <KTextEditor/Range> 0014 0015 namespace KDevelop { 0016 /** 0017 * Lightweight object that extends a range with information about the URL to which the range refers. 0018 */ 0019 class KDEVPLATFORMLANGUAGE_EXPORT DocumentRange 0020 : public KTextEditor::Range 0021 { 0022 public: 0023 DocumentRange() 0024 { 0025 } 0026 0027 inline DocumentRange(const IndexedString& document, const KTextEditor::Range& range) 0028 : KTextEditor::Range(range) 0029 , document(document) 0030 { 0031 Q_ASSERT(document.toUrl() == document.toUrl().adjusted(QUrl::NormalizePathSegments)); 0032 } 0033 0034 inline bool operator==(const DocumentRange& rhs) const 0035 { 0036 return document == rhs.document && *static_cast<const KTextEditor::Range*>(this) == rhs; 0037 } 0038 0039 static DocumentRange invalid() 0040 { 0041 return DocumentRange(IndexedString(), KTextEditor::Range::invalid()); 0042 } 0043 0044 IndexedString document; 0045 }; 0046 } 0047 Q_DECLARE_TYPEINFO(KDevelop::DocumentRange, Q_MOVABLE_TYPE); 0048 0049 namespace QTest { 0050 template <> 0051 inline char* toString(const KDevelop::DocumentRange& documentRange) 0052 { 0053 auto range = QTest::toString(*static_cast<const KTextEditor::Range*>(&documentRange)); 0054 QByteArray ba = "DocumentRange[range=" + QByteArray::fromRawData(range, strlen(range)) 0055 + ", document=" + documentRange.document.toUrl().toDisplayString().toLatin1() + "]"; 0056 delete[] range; 0057 return qstrdup(ba.data()); 0058 } 0059 } 0060 0061 #endif // KDEVPLATFORM_DOCUMENTRANGE_H