From def7d6c8157d81772cdcc1bf229c68303dee914c Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 29 Aug 2024 13:02:25 +0200 Subject: Copilot: add Apply Line action to tooltip Task-number: QTCREATORBUG-31418 Change-Id: Iec4b2d47d47356df851d8949e59243817aafe075 Reviewed-by: Marcus Tillmanns --- src/plugins/copilot/copilothoverhandler.cpp | 11 ++++++++++ src/plugins/copilot/copilotsuggestion.cpp | 34 +++++++++++++++++++---------- src/plugins/copilot/copilotsuggestion.h | 4 ++++ 3 files changed, 38 insertions(+), 11 deletions(-) (limited to 'src/plugins/copilot') diff --git a/src/plugins/copilot/copilothoverhandler.cpp b/src/plugins/copilot/copilothoverhandler.cpp index d17ec073b2c..789650e67c2 100644 --- a/src/plugins/copilot/copilothoverhandler.cpp +++ b/src/plugins/copilot/copilothoverhandler.cpp @@ -47,11 +47,13 @@ public: auto apply = addAction(Tr::tr("Apply (%1)").arg(QKeySequence(Qt::Key_Tab).toString())); auto applyWord = addAction( Tr::tr("Apply Word (%1)").arg(QKeySequence(QKeySequence::MoveToNextWord).toString())); + auto applyLine = addAction(Tr::tr("Apply Line")); connect(prev, &QAction::triggered, this, &CopilotCompletionToolTip::selectPrevious); connect(next, &QAction::triggered, this, &CopilotCompletionToolTip::selectNext); connect(apply, &QAction::triggered, this, &CopilotCompletionToolTip::apply); connect(applyWord, &QAction::triggered, this, &CopilotCompletionToolTip::applyWord); + connect(applyLine, &QAction::triggered, this, &CopilotCompletionToolTip::applyLine); updateLabels(); } @@ -108,6 +110,15 @@ private: ToolTip::hide(); } + void applyLine() + { + if (TextSuggestion *suggestion = m_editor->currentSuggestion()) { + if (!suggestion->applyLine(m_editor)) + return; + } + ToolTip::hide(); + } + QLabel *m_numberLabel; QList m_completions; int m_currentCompletion = 0; diff --git a/src/plugins/copilot/copilotsuggestion.cpp b/src/plugins/copilot/copilotsuggestion.cpp index c97e65fb8b8..a935a9f8b9c 100644 --- a/src/plugins/copilot/copilotsuggestion.cpp +++ b/src/plugins/copilot/copilotsuggestion.cpp @@ -42,6 +42,26 @@ bool CopilotSuggestion::apply() } bool CopilotSuggestion::applyWord(TextEditorWidget *widget) +{ + return applyPart(Word, widget); +} + +bool CopilotSuggestion::applyLine(TextEditor::TextEditorWidget *widget) +{ + return applyPart(Line, widget); +} + +void CopilotSuggestion::reset() +{ + m_start.removeSelectedText(); +} + +int CopilotSuggestion::position() +{ + return m_start.selectionEnd(); +} + +bool CopilotSuggestion::applyPart(Part part, TextEditor::TextEditorWidget *widget) { Completion completion = m_completions.value(m_currentCompletion); const Range range = completion.range(); @@ -50,11 +70,13 @@ bool CopilotSuggestion::applyWord(TextEditorWidget *widget) const QString text = completion.text(); const int startPos = currentCursor.positionInBlock() - cursor.positionInBlock() + (cursor.selectionEnd() - cursor.selectionStart()); - const int next = endOfNextWord(text, startPos); + int next = part == Word ? endOfNextWord(text, startPos) : text.indexOf('\n', startPos); if (next == -1) return apply(); + if (part == Line) + ++next; QString subText = text.mid(startPos, next - startPos); if (subText.isEmpty()) return false; @@ -78,15 +100,5 @@ bool CopilotSuggestion::applyWord(TextEditorWidget *widget) return false; } -void CopilotSuggestion::reset() -{ - m_start.removeSelectedText(); -} - -int CopilotSuggestion::position() -{ - return m_start.selectionEnd(); -} - } // namespace Copilot::Internal diff --git a/src/plugins/copilot/copilotsuggestion.h b/src/plugins/copilot/copilotsuggestion.h index 719016236a2..4684bef12fb 100644 --- a/src/plugins/copilot/copilotsuggestion.h +++ b/src/plugins/copilot/copilotsuggestion.h @@ -18,6 +18,7 @@ public: bool apply() final; bool applyWord(TextEditor::TextEditorWidget *widget) final; + bool applyLine(TextEditor::TextEditorWidget *widget) final; void reset() final; int position() final; @@ -25,6 +26,9 @@ public: int currentCompletion() const { return m_currentCompletion; } private: + enum Part {Word, Line}; + bool applyPart(Part part, TextEditor::TextEditorWidget *widget); + QList m_completions; int m_currentCompletion = 0; QTextCursor m_start; -- cgit v1.2.3