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