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 <sami.shalayel@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
Semih Yavuz 2024-05-06 11:39:28 +02:00
parent 79ec9ba4b7
commit 0442734ba9
3 changed files with 69 additions and 0 deletions

View File

@ -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

View File

@ -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"

View File

@ -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 <QtCore/qstring.h>
#include <QtCore/qurl.h>
#include <QtCore/qobject.h>
#include <vector>
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<DocumentLink> documentsForIdentifier(const QString &id) const = 0;
[[nodiscard]] virtual std::vector<DocumentLink>
documentsForIdentifier(const QString &id, const QString &filterName) const = 0;
[[nodiscard]] virtual std::vector<DocumentLink> documentsForKeyword(const QString &keyword) const = 0;
[[nodiscard]] virtual std::vector<DocumentLink>
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<QQmlLSHelpProviderBase> 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