Files
qt-creator/src/plugins/languageclient/languageclientquickfix.h
David Schulz 0e4b0a26d3 Editor: move ownership of assist interface to processor
This way the base class can manage the lifetime of the interface object
and it doesn't need to be done in each implementation of perform.

Change-Id: Ie1ce742e31b688a337533ee6c57d376146e25ace
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2022-11-17 13:23:55 +00:00

84 lines
2.4 KiB
C++

// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
#pragma once
#include "languageclient_global.h"
#include <texteditor/codeassist/iassistprovider.h>
#include <texteditor/codeassist/iassistprocessor.h>
#include <texteditor/quickfix.h>
#include <languageserverprotocol/languagefeatures.h>
#include <QPointer>
namespace TextEditor {
class IAssistProposal;
class GenericProposal;
} // namespace TextEditor
namespace LanguageClient {
class Client;
class LANGUAGECLIENT_EXPORT CodeActionQuickFixOperation : public TextEditor::QuickFixOperation
{
public:
CodeActionQuickFixOperation(const LanguageServerProtocol::CodeAction &action, Client *client);
void perform() override;
private:
LanguageServerProtocol::CodeAction m_action;
QPointer<Client> m_client;
};
class LANGUAGECLIENT_EXPORT CommandQuickFixOperation : public TextEditor::QuickFixOperation
{
public:
CommandQuickFixOperation(const LanguageServerProtocol::Command &command, Client *client);
void perform() override;
private:
LanguageServerProtocol::Command m_command;
QPointer<Client> m_client;
};
class LANGUAGECLIENT_EXPORT LanguageClientQuickFixProvider : public TextEditor::IAssistProvider
{
public:
explicit LanguageClientQuickFixProvider(Client *client);
TextEditor::IAssistProcessor *createProcessor(const TextEditor::AssistInterface *) const override;
protected:
Client *client() const { return m_client; }
private:
Client *m_client = nullptr; // not owned
};
class LANGUAGECLIENT_EXPORT LanguageClientQuickFixAssistProcessor
: public TextEditor::IAssistProcessor
{
public:
explicit LanguageClientQuickFixAssistProcessor(Client *client) : m_client(client) {}
bool running() override { return m_currentRequest.has_value(); }
TextEditor::IAssistProposal *perform() override;
void cancel() override;
protected:
void setOnlyKinds(const QList<LanguageServerProtocol::CodeActionKind> &only);
Client *client() { return m_client; }
private:
void handleCodeActionResponse(
const LanguageServerProtocol::CodeActionRequest::Response &response);
virtual TextEditor::GenericProposal *handleCodeActionResult(
const LanguageServerProtocol::CodeActionResult &result);
Client *m_client = nullptr; // not owned
std::optional<LanguageServerProtocol::MessageId> m_currentRequest;
};
} // namespace LanguageClient