aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmldom/qqmldomerrormessage_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmldom/qqmldomerrormessage_p.h')
-rw-r--r--src/qmldom/qqmldomerrormessage_p.h174
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