diff options
Diffstat (limited to 'src/qmldom/qqmldomerrormessage_p.h')
-rw-r--r-- | src/qmldom/qqmldomerrormessage_p.h | 174 |
1 files changed, 100 insertions, 74 deletions
diff --git a/src/qmldom/qqmldomerrormessage_p.h b/src/qmldom/qqmldomerrormessage_p.h index f17c009835..20e2d817e0 100644 --- a/src/qmldom/qqmldomerrormessage_p.h +++ b/src/qmldom/qqmldomerrormessage_p.h @@ -1,40 +1,6 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtQml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -**/ +// Copyright (C) 2020 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + #ifndef ERRORMESSAGE_H #define ERRORMESSAGE_H @@ -58,6 +24,7 @@ #include <QtCore/QString> #include <QtCore/QCborArray> #include <QtCore/QCborMap> +#include <QtCore/QLoggingCategory> #include <QtQml/private/qqmljsdiagnosticmessage_p.h> QT_BEGIN_NAMESPACE @@ -65,6 +32,8 @@ QT_BEGIN_NAMESPACE namespace QQmlJS { namespace Dom { +Q_DECLARE_LOGGING_CATEGORY(domLog); + QMLDOM_EXPORT ErrorLevel errorLevelFromQtMsgType(QtMsgType msgType); class ErrorGroups; @@ -82,8 +51,8 @@ public: {} - void dump(Sink sink) const; - void dumpId(Sink sink) const; + void dump(const Sink &sink) const; + void dumpId(const Sink &sink) const; QLatin1String groupId() const; QString groupName() const; @@ -94,29 +63,28 @@ public: class QMLDOM_EXPORT ErrorGroups{ Q_GADGET public: - void dump(Sink sink) const; - void dumpId(Sink sink) const; + void dump(const Sink &sink) const; + void dumpId(const Sink &sink) const; QCborArray toCbor() const; - [[nodiscard]] ErrorMessage errorMessage(Dumper msg, ErrorLevel level, Path element = Path(), QString canonicalFilePath = QString(), SourceLocation location = SourceLocation()) const; - [[nodiscard]] ErrorMessage errorMessage(const DiagnosticMessage &msg, Path element = Path(), QString canonicalFilePath = QString()) const; - - void fatal(Dumper msg, Path element = Path(), QStringView canonicalFilePath = u"", SourceLocation location = SourceLocation()) const; - - [[nodiscard]] ErrorMessage debug(QString message) const; - [[nodiscard]] ErrorMessage debug(Dumper message) const; - [[nodiscard]] ErrorMessage info(QString message) const; - [[nodiscard]] ErrorMessage info(Dumper message) const; - [[nodiscard]] ErrorMessage hint(QString message) const; - [[nodiscard]] ErrorMessage hint(Dumper message) const; - [[nodiscard]] ErrorMessage maybeWarning(QString message) const; - [[nodiscard]] ErrorMessage maybeWarning(Dumper message) const; - [[nodiscard]] ErrorMessage warning(QString message) const; - [[nodiscard]] ErrorMessage warning(Dumper message) const; - [[nodiscard]] ErrorMessage maybeError(QString message) const; - [[nodiscard]] ErrorMessage maybeError(Dumper message) const; - [[nodiscard]] ErrorMessage error(QString message) const; - [[nodiscard]] ErrorMessage error(Dumper message) const; + [[nodiscard]] ErrorMessage errorMessage( + const Dumper &msg, ErrorLevel level, const Path &element = Path(), + const QString &canonicalFilePath = QString(), SourceLocation location = SourceLocation()) const; + [[nodiscard]] ErrorMessage errorMessage( + const DiagnosticMessage &msg, const Path &element = Path(), + const QString &canonicalFilePath = QString()) const; + + void fatal(const Dumper &msg, const Path &element = Path(), QStringView canonicalFilePath = u"", + SourceLocation location = SourceLocation()) const; + + [[nodiscard]] ErrorMessage debug(const QString &message) const; + [[nodiscard]] ErrorMessage debug(const Dumper &message) const; + [[nodiscard]] ErrorMessage info(const QString &message) const; + [[nodiscard]] ErrorMessage info(const Dumper &message) const; + [[nodiscard]] ErrorMessage warning(const QString &message) const; + [[nodiscard]] ErrorMessage warning(const Dumper &message) const; + [[nodiscard]] ErrorMessage error(const QString &message) const; + [[nodiscard]] ErrorMessage error(const Dumper &message) const; static int cmp(const ErrorGroups &g1, const ErrorGroups &g2); @@ -136,9 +104,9 @@ class QMLDOM_EXPORT ErrorMessage { // reuse Some of the other DiagnosticMessages public: using Level = ErrorLevel; // error registry (usage is optional) - static QLatin1String msg(const char *errorId, ErrorMessage err); - static QLatin1String msg(QLatin1String errorId, ErrorMessage err); - static void visitRegisteredMessages(std::function<bool(ErrorMessage)> visitor); + static QLatin1String msg(const char *errorId, ErrorMessage &&err); + static QLatin1String msg(QLatin1String errorId, ErrorMessage &&err); + static void visitRegisteredMessages(function_ref<bool (const ErrorMessage &)> visitor); [[nodiscard]] static ErrorMessage load(QLatin1String errorId); [[nodiscard]] static ErrorMessage load(const char *errorId); template<typename... T> @@ -148,21 +116,66 @@ public: return res; } - ErrorMessage(QString message, ErrorGroups errorGroups, Level level = Level::Warning, Path path = Path(), QString file = QString(), SourceLocation location = SourceLocation(), QLatin1String errorId = QLatin1String("")); - ErrorMessage(ErrorGroups errorGroups, const DiagnosticMessage &msg, Path path = Path(), QString file = QString(), QLatin1String errorId = QLatin1String("")); + ErrorMessage( + const QString &message, const ErrorGroups &errorGroups, Level level = Level::Warning, + const Path &path = Path(), const QString &file = QString(), + SourceLocation location = SourceLocation(), QLatin1String errorId = QLatin1String("")); + ErrorMessage( + const ErrorGroups &errorGroups, const DiagnosticMessage &msg, const Path &path = Path(), + const QString &file = QString(), QLatin1String errorId = QLatin1String("")); [[nodiscard]] ErrorMessage &withErrorId(QLatin1String errorId); [[nodiscard]] ErrorMessage &withPath(const Path &); - [[nodiscard]] ErrorMessage &withFile(QString); + [[nodiscard]] ErrorMessage &withFile(const QString &); [[nodiscard]] ErrorMessage &withFile(QStringView); [[nodiscard]] ErrorMessage &withLocation(SourceLocation); - [[nodiscard]] ErrorMessage &withItem(DomItem); + [[nodiscard]] ErrorMessage &withItem(const DomItem &); ErrorMessage handle(const ErrorHandler &errorHandler=nullptr); - void dump(Sink s) const; + void dump(const Sink &s) const; QString toString() const; QCborMap toCbor() const; + friend int compare(const ErrorMessage &msg1, const ErrorMessage &msg2) + { + int c; + c = msg1.location.offset - msg2.location.offset; + if (c != 0) + return c; + c = msg1.location.startLine - msg2.location.startLine; + if (c != 0) + return c; + c = msg1.errorId.compare(msg2.errorId); + if (c != 0) + return c; + if (!msg1.errorId.isEmpty()) + return 0; + c = msg1.message.compare(msg2.message); + if (c != 0) + return c; + c = msg1.file.compare(msg2.file); + if (c != 0) + return c; + c = Path::cmp(msg1.path, msg2.path); + if (c != 0) + return c; + c = int(msg1.level) - int(msg2.level); + if (c != 0) + return c; + c = int(msg1.errorGroups.groups.size() - msg2.errorGroups.groups.size()); + if (c != 0) + return c; + for (qsizetype i = 0; i < msg1.errorGroups.groups.size(); ++i) { + c = msg1.errorGroups.groups[i].groupId().compare(msg2.errorGroups.groups[i].groupId()); + if (c != 0) + return c; + } + c = msg1.location.length - msg2.location.length; + if (c != 0) + return c; + c = msg1.location.startColumn - msg2.location.startColumn; + return c; + } QLatin1String errorId; QString message; @@ -174,20 +187,33 @@ public: }; inline bool operator !=(const ErrorMessage &e1, const ErrorMessage &e2) { - return e1.errorId != e2.errorId || e1.message != e2.message || e1.errorGroups != e2.errorGroups - || e1.level != e2.level || e1.path != e2.path || e1.file != e2.file - || e1.location.startLine != e2.location.startLine || e1.location.offset != e2.location.offset - || e1.location.startColumn != e2.location.startColumn || e1.location.length != e2.location.length; + return compare(e1, e2) != 0; } inline bool operator ==(const ErrorMessage &e1, const ErrorMessage &e2) { - return !(e1 != e2); + return compare(e1, e2) == 0; +} +inline bool operator<(const ErrorMessage &e1, const ErrorMessage &e2) +{ + return compare(e1, e2) < 0; +} +inline bool operator<=(const ErrorMessage &e1, const ErrorMessage &e2) +{ + return compare(e1, e2) <= 0; +} +inline bool operator>(const ErrorMessage &e1, const ErrorMessage &e2) +{ + return compare(e1, e2) > 0; +} +inline bool operator>=(const ErrorMessage &e1, const ErrorMessage &e2) +{ + return compare(e1, e2) >= 0; } QMLDOM_EXPORT void silentError(const ErrorMessage &); QMLDOM_EXPORT void errorToQDebug(const ErrorMessage &); QMLDOM_EXPORT void defaultErrorHandler(const ErrorMessage &); -QMLDOM_EXPORT void setDefaultErrorHandler(ErrorHandler h); +QMLDOM_EXPORT void setDefaultErrorHandler(const ErrorHandler &h); } // end namespace Dom } // end namespace QQmlJS |