aboutsummaryrefslogtreecommitdiffstats
path: root/src/shared/lsp/link.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/lsp/link.h')
-rw-r--r--src/shared/lsp/link.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/shared/lsp/link.h b/src/shared/lsp/link.h
new file mode 100644
index 000000000..eaafe280c
--- /dev/null
+++ b/src/shared/lsp/link.h
@@ -0,0 +1,78 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include "filepath.h"
+
+#include <QMetaType>
+#include <QMultiHash>
+#include <QString>
+
+#include <functional>
+
+namespace lsp::Utils {
+
+class Link
+{
+public:
+ Link() = default;
+ Link(const FilePath &filePath, int line = 0, int column = 0)
+ : targetFilePath(filePath)
+ , targetLine(line)
+ , targetColumn(column)
+ {}
+
+ static Link fromString(const QString &filePathWithNumbers, bool canContainLineNumber = false);
+
+ bool hasValidTarget() const
+ {
+ if (!targetFilePath.isEmpty())
+ return true;
+ return !targetFilePath.scheme().isEmpty() || !targetFilePath.host().isEmpty();
+ }
+
+ bool hasValidLinkText() const
+ { return linkTextStart != linkTextEnd; }
+
+ bool operator==(const Link &other) const
+ {
+ return hasSameLocation(other)
+ && linkTextStart == other.linkTextStart
+ && linkTextEnd == other.linkTextEnd;
+ }
+ bool operator!=(const Link &other) const { return !(*this == other); }
+
+ bool hasSameLocation(const Link &other) const
+ {
+ return targetFilePath == other.targetFilePath
+ && targetLine == other.targetLine
+ && targetColumn == other.targetColumn;
+ }
+
+ friend size_t qHash(const Link &l, uint seed = 0)
+ { return QT_PREPEND_NAMESPACE(qHash)(l.targetFilePath, seed)
+ | QT_PREPEND_NAMESPACE(qHash(l.targetLine, seed))
+ | QT_PREPEND_NAMESPACE(qHash(l.targetColumn, seed)); }
+
+ int linkTextStart = -1;
+ int linkTextEnd = -1;
+
+ FilePath targetFilePath;
+ int targetLine = 0;
+ int targetColumn = 0;
+};
+
+using LinkHandler = std::function<void(const Link &)>;
+using Links = QList<Link>;
+
+} // namespace lsp::Utils
+
+namespace std {
+
+template<> struct hash<lsp::Utils::Link>
+{
+ size_t operator()(const lsp::Utils::Link &fn) const { return qHash(fn); }
+};
+
+} // std