aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/copilot
diff options
context:
space:
mode:
authorDavid Schulz <[email protected]>2024-08-29 13:02:25 +0200
committerDavid Schulz <[email protected]>2024-08-30 05:27:12 +0000
commitdef7d6c8157d81772cdcc1bf229c68303dee914c (patch)
tree96c0c873b559b8ea04fa5af0cdb47e554551bcdb /src/plugins/copilot
parent7dec58dbb9fd394e98413bae38ce3f0dfcd39adf (diff)
Copilot: add Apply Line action to tooltip
Task-number: QTCREATORBUG-31418 Change-Id: Iec4b2d47d47356df851d8949e59243817aafe075 Reviewed-by: Marcus Tillmanns <[email protected]>
Diffstat (limited to 'src/plugins/copilot')
-rw-r--r--src/plugins/copilot/copilothoverhandler.cpp11
-rw-r--r--src/plugins/copilot/copilotsuggestion.cpp34
-rw-r--r--src/plugins/copilot/copilotsuggestion.h4
3 files changed, 38 insertions, 11 deletions
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<Completion> 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
@@ -43,6 +43,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();
const QTextCursor cursor = range.toSelection(m_start.document());
@@ -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<Completion> m_completions;
int m_currentCompletion = 0;
QTextCursor m_start;