diff --git a/src/plugins/copilot/copilotplugin.cpp b/src/plugins/copilot/copilotplugin.cpp index ff2c449088f..910bfa33b7b 100644 --- a/src/plugins/copilot/copilotplugin.cpp +++ b/src/plugins/copilot/copilotplugin.cpp @@ -14,12 +14,22 @@ using namespace Utils; namespace Copilot { namespace Internal { +CopilotPlugin::~CopilotPlugin() +{ + if (m_client) + m_client->shutdown(); + + m_client = nullptr; +} + void CopilotPlugin::initialize() { CopilotSettings::instance().readSettings(Core::ICore::settings()); m_client = new CopilotClient(); + connect(m_client, &CopilotClient::finished, this, [this]() { m_client = nullptr; }); + connect(&CopilotSettings::instance(), &CopilotSettings::applied, this, [this]() { if (m_client) m_client->shutdown(); diff --git a/src/plugins/copilot/copilotplugin.h b/src/plugins/copilot/copilotplugin.h index 62f1d21f753..d81d2e86282 100644 --- a/src/plugins/copilot/copilotplugin.h +++ b/src/plugins/copilot/copilotplugin.h @@ -16,14 +16,13 @@ class CopilotPlugin : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Copilot.json") public: - CopilotPlugin() {} - ~CopilotPlugin() override {} + ~CopilotPlugin(); void initialize() override; void extensionsInitialized() override; private: - CopilotClient *m_client; + CopilotClient *m_client{nullptr}; }; } // namespace Internal diff --git a/src/plugins/copilot/documentwatcher.cpp b/src/plugins/copilot/documentwatcher.cpp index f216826b44e..a11ff8bbec3 100644 --- a/src/plugins/copilot/documentwatcher.cpp +++ b/src/plugins/copilot/documentwatcher.cpp @@ -37,12 +37,16 @@ DocumentWatcher::DocumentWatcher(CopilotClient *client, TextDocument *textDocume void DocumentWatcher::getSuggestion() { - auto editor = Core::EditorManager::instance()->activateEditorForDocument(m_textDocument); - auto textEditorWidget = qobject_cast(editor->widget()); - if (!editor || !textEditorWidget) + Core::IEditor *editor = Core::EditorManager::instance()->activateEditorForDocument( + m_textDocument); + if (!editor) + return; + TextEditor::TextEditorWidget *textEditorWidget = qobject_cast( + editor->widget()); + if (!textEditorWidget) return; - auto cursor = textEditorWidget->multiTextCursor(); + Utils::MultiTextCursor cursor = textEditorWidget->multiTextCursor(); if (cursor.hasMultipleCursors() || cursor.hasSelection()) return; @@ -61,31 +65,24 @@ void DocumentWatcher::getSuggestion() const std::optional result = response.result(); QTC_ASSERT(result, return); - const auto list = result->completions().toList(); + const QList list = result->completions().toList(); if (list.isEmpty()) return; - auto cursor = textEditorWidget->multiTextCursor(); + Utils::MultiTextCursor cursor = textEditorWidget->multiTextCursor(); if (cursor.hasMultipleCursors() || cursor.hasSelection()) return; if (cursor.cursors().first().position() != currentCursorPos) return; - const auto firstCompletion = list.first(); + const Completion firstCompletion = list.first(); const QString content = firstCompletion.text().mid( firstCompletion.position().character()); m_isEditing = true; textEditorWidget->insertSuggestion(content); m_isEditing = false; - /* - m_isEditing = true; - const auto &block = m_textDocument->document()->findBlockByLineNumber( - firstCompletion.position().line()); - m_textDocument->insertSuggestion(content, block); - m_isEditing = false; - */ }); }