From 0442734ba9c653ea7030755fa6dce78ef1a7ed0e Mon Sep 17 00:00:00 2001 From: Semih Yavuz Date: Mon, 6 May 2024 11:39:28 +0200 Subject: [PATCH] documentationhints: add help plugin interface We need HelpEngine API to fetch the documentation from C++ code. However, linking to Qt::Help target (which depends on qtdeclarative) leads to cyclic dependencies in build order. Hence, it is better to load help engine at runtime. The interface declared here will be implemented by a plugin living in QtTools. Task-number: QTBUG-120016 Change-Id: Ia1913ad1f395b1876100ab679b48dec6efb4298b Reviewed-by: Sami Shalayel Reviewed-by: Fabian Kosmale --- src/qmlls/CMakeLists.txt | 1 + src/qmlls/qqmllshelpplugininterface.cpp | 4 ++ src/qmlls/qqmllshelpplugininterface_p.h | 64 +++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 src/qmlls/qqmllshelpplugininterface.cpp create mode 100644 src/qmlls/qqmllshelpplugininterface_p.h diff --git a/src/qmlls/CMakeLists.txt b/src/qmlls/CMakeLists.txt index 9476bb847e..4b9e0cc7fe 100644 --- a/src/qmlls/CMakeLists.txt +++ b/src/qmlls/CMakeLists.txt @@ -33,6 +33,7 @@ qt_internal_add_module(QmlLSPrivate qdochtmlparser_p.h qdochtmlparser.cpp qqmlhighlightsupport_p.h qqmlhighlightsupport.cpp qqmlsemantictokens_p.h qqmlsemantictokens.cpp + qqmllshelpplugininterface_p.h qqmllshelpplugininterface.cpp PUBLIC_LIBRARIES Qt::LanguageServerPrivate diff --git a/src/qmlls/qqmllshelpplugininterface.cpp b/src/qmlls/qqmllshelpplugininterface.cpp new file mode 100644 index 0000000000..62944d69e0 --- /dev/null +++ b/src/qmlls/qqmllshelpplugininterface.cpp @@ -0,0 +1,4 @@ +// Copyright (C) 2024 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 + +#include "qqmllshelpplugininterface_p.h" diff --git a/src/qmlls/qqmllshelpplugininterface_p.h b/src/qmlls/qqmllshelpplugininterface_p.h new file mode 100644 index 0000000000..280d7c3e5d --- /dev/null +++ b/src/qmlls/qqmllshelpplugininterface_p.h @@ -0,0 +1,64 @@ +// Copyright (C) 2024 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 QQMLLSHELPPLUGININTERFACE_H +#define QQMLLSHELPPLUGININTERFACE_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QQmlLSHelpProviderBase +{ +public: + struct DocumentLink + { + QUrl url; + QString title; + }; + +public: + virtual ~QQmlLSHelpProviderBase() = default; + virtual bool registerDocumentation(const QString &documentationFileName) = 0; + [[nodiscard]] virtual QByteArray fileData(const QUrl &url) const = 0; + [[nodiscard]] virtual std::vector documentsForIdentifier(const QString &id) const = 0; + [[nodiscard]] virtual std::vector + documentsForIdentifier(const QString &id, const QString &filterName) const = 0; + [[nodiscard]] virtual std::vector documentsForKeyword(const QString &keyword) const = 0; + [[nodiscard]] virtual std::vector + documentsForKeyword(const QString &keyword, const QString &filterName) const = 0; + [[nodiscard]] virtual QStringList registeredNamespaces() const = 0; + [[nodiscard]] virtual QString error() const = 0; +}; + +class QQmlLSHelpPluginInterface +{ +public: + QQmlLSHelpPluginInterface() = default; + virtual ~QQmlLSHelpPluginInterface() = default; + Q_DISABLE_COPY_MOVE(QQmlLSHelpPluginInterface) + + virtual std::unique_ptr initialize(const QString &collectionFile, + QObject *parent) = 0; +}; + +#define QQmlLSHelpPluginInterface_iid "org.qt-project.Qt.QmlLS.HelpPlugin/1.0" +Q_DECLARE_INTERFACE(QQmlLSHelpPluginInterface, QQmlLSHelpPluginInterface_iid) + +QT_END_NAMESPACE + +#endif // QQMLLSHELPPLUGININTERFACE_H