mirror of
https://github.com/carlrobertoh/ProxyAI.git
synced 2026-05-10 20:30:24 +00:00
feat: support quick way of including git commit diffs in the prompt (closes #688)
This commit is contained in:
parent
757afeff9e
commit
94d0bcd0a0
11 changed files with 214 additions and 21 deletions
|
|
@ -37,6 +37,7 @@ import ee.carlrobert.codegpt.ui.textarea.AppliedSuggestionActionInlay;
|
|||
import ee.carlrobert.codegpt.ui.textarea.UserInputPanel;
|
||||
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.CreateDocumentationActionItem;
|
||||
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.DocumentationActionItem;
|
||||
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.GitCommitActionItem;
|
||||
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.PersonaActionItem;
|
||||
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.WebSearchActionItem;
|
||||
import ee.carlrobert.codegpt.util.EditorUtil;
|
||||
|
|
@ -47,6 +48,7 @@ import java.nio.file.Files;
|
|||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Function;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JPanel;
|
||||
import kotlin.Unit;
|
||||
|
|
@ -299,7 +301,8 @@ public class ChatToolWindowTabPanel implements Disposable {
|
|||
if (action instanceof AppliedSuggestionActionInlay) {
|
||||
processSuggestionActions(
|
||||
message,
|
||||
filterActions(appliedInlayActions, AppliedSuggestionActionInlay.class));
|
||||
filterActions(appliedInlayActions, AppliedSuggestionActionInlay.class),
|
||||
text);
|
||||
} else if (action instanceof AppliedCodeActionInlay) {
|
||||
processCodeActions(
|
||||
message,
|
||||
|
|
@ -325,10 +328,12 @@ public class ChatToolWindowTabPanel implements Disposable {
|
|||
|
||||
private void processSuggestionActions(
|
||||
Message message,
|
||||
List<AppliedSuggestionActionInlay> actions) {
|
||||
List<AppliedSuggestionActionInlay> actions,
|
||||
String text) {
|
||||
message.setWebSearchIncluded(containsWebSearchActionInlay(actions));
|
||||
processDocumentationAction(message, actions);
|
||||
processPersonaAction(message, actions);
|
||||
processGitCommitAction(message, actions, text);
|
||||
}
|
||||
|
||||
private void processDocumentationAction(
|
||||
|
|
@ -358,20 +363,24 @@ public class ChatToolWindowTabPanel implements Disposable {
|
|||
}
|
||||
}
|
||||
|
||||
private void processCodeActions(Message message, List<AppliedCodeActionInlay> actions,
|
||||
String text, Editor editor) {
|
||||
private <T extends AppliedActionInlay> void processActions(
|
||||
Message message,
|
||||
List<T> actions,
|
||||
String text,
|
||||
Function<T, String> codeExtractor,
|
||||
Function<T, String> languageExtractor) {
|
||||
var stringBuilder = new StringBuilder(text);
|
||||
var resultStringBuilder = new StringBuilder();
|
||||
int lastProcessedIndex = 0;
|
||||
|
||||
for (var actionInlay : actions) {
|
||||
var inlayOffset = actionInlay.getInlay().getOffset();
|
||||
var fileExtension = FileUtil.getFileExtension(editor.getVirtualFile().getName());
|
||||
|
||||
resultStringBuilder
|
||||
.append(stringBuilder, lastProcessedIndex, Math.min(stringBuilder.length(), inlayOffset))
|
||||
.append('\n')
|
||||
.append(formatCodeBlock(fileExtension, actionInlay.getCode()))
|
||||
.append(formatCodeBlock(languageExtractor.apply(actionInlay),
|
||||
codeExtractor.apply(actionInlay)))
|
||||
.append('\n');
|
||||
|
||||
lastProcessedIndex = inlayOffset;
|
||||
|
|
@ -384,6 +393,39 @@ public class ChatToolWindowTabPanel implements Disposable {
|
|||
message.setPrompt(result);
|
||||
}
|
||||
|
||||
private void processGitCommitAction(
|
||||
Message message,
|
||||
List<AppliedSuggestionActionInlay> actions,
|
||||
String text) {
|
||||
var gitCommitInlays = actions.stream()
|
||||
.filter(it -> it.getSuggestion() instanceof GitCommitActionItem)
|
||||
.toList();
|
||||
|
||||
if (!gitCommitInlays.isEmpty()) {
|
||||
processActions(
|
||||
message,
|
||||
gitCommitInlays,
|
||||
text,
|
||||
action -> ((GitCommitActionItem) action.getSuggestion()).getDiffString(),
|
||||
action -> "shell"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private void processCodeActions(
|
||||
Message message,
|
||||
List<AppliedCodeActionInlay> actions,
|
||||
String text,
|
||||
Editor editor) {
|
||||
processActions(
|
||||
message,
|
||||
actions,
|
||||
text,
|
||||
AppliedCodeActionInlay::getCode,
|
||||
action -> FileUtil.getFileExtension(editor.getVirtualFile().getName())
|
||||
);
|
||||
}
|
||||
|
||||
private String formatCodeBlock(String fileExtension, String code) {
|
||||
return String.format("```%s\n%s\n```", fileExtension, code);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue