From 7a2dbace9b24d381004b6a4414732c6a411699b7 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 14 Mar 2023 13:07:45 +0100 Subject: [PATCH] Copilot: add command to explicitly request copilot suggestions Change-Id: I3bf321fc2ebc6d44819c1a799be9207aa3ca59f1 Reviewed-by: Marcus Tillmanns Reviewed-by: Qt CI Bot --- src/plugins/copilot/copilotclient.cpp | 8 ++++---- src/plugins/copilot/copilotplugin.cpp | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/plugins/copilot/copilotclient.cpp b/src/plugins/copilot/copilotclient.cpp index 70eeb842bac..06f127e645f 100644 --- a/src/plugins/copilot/copilotclient.cpp +++ b/src/plugins/copilot/copilotclient.cpp @@ -99,7 +99,10 @@ void CopilotClient::scheduleRequest(TextEditorWidget *editor) if (!m_scheduledRequests.contains(editor)) { auto timer = new QTimer(this); timer->setSingleShot(true); - connect(timer, &QTimer::timeout, this, [this, editor]() { requestCompletions(editor); }); + connect(timer, &QTimer::timeout, this, [this, editor]() { + if (m_scheduledRequests[editor].cursorPosition == editor->textCursor().position()) + requestCompletions(editor); + }); connect(editor, &TextEditorWidget::destroyed, this, [this, editor]() { m_scheduledRequests.remove(editor); cancelRunningRequest(editor); @@ -120,9 +123,6 @@ void CopilotClient::requestCompletions(TextEditorWidget *editor) if (cursor.hasMultipleCursors() || cursor.hasSelection()) return; - if (m_scheduledRequests[editor].cursorPosition != cursor.mainCursor().position()) - return; - const Utils::FilePath filePath = editor->textDocument()->filePath(); GetCompletionRequest request{ {TextDocumentIdentifier(hostPathToServerUri(filePath)), diff --git a/src/plugins/copilot/copilotplugin.cpp b/src/plugins/copilot/copilotplugin.cpp index 45a859b1380..171eb3c3395 100644 --- a/src/plugins/copilot/copilotplugin.cpp +++ b/src/plugins/copilot/copilotplugin.cpp @@ -6,9 +6,11 @@ #include "copilotclient.h" #include "copilotoptionspage.h" #include "copilotsettings.h" +#include "copilottr.h" -#include +#include #include +#include #include @@ -30,6 +32,18 @@ void CopilotPlugin::initialize() &CopilotSettings::applied, this, &CopilotPlugin::restartClient); + + QAction *action = new QAction(this); + action->setText(Tr::tr("Request Copilot Suggestion")); + action->setToolTip(Tr::tr("Request Copilot Suggestion at the current editors cursor position.")); + + QObject::connect(action, &QAction::triggered, this, [this] { + if (auto editor = TextEditor::TextEditorWidget::currentTextEditorWidget()) { + if (m_client->reachable()) + m_client->requestCompletions(editor); + } + }); + ActionManager::registerAction(action, "Copilot.RequestSuggestion"); } void CopilotPlugin::extensionsInitialized()