Skip to content

Commit e418128

Browse files
committed
feat: support file paths in generated code blocks
1 parent 364cfa7 commit e418128

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1356
-454
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jsoup = "1.19.1"
1212
jtokkit = "1.1.0"
1313
junit = "5.12.1"
1414
kotlin = "2.1.20"
15-
llm-client = "0.8.40"
15+
llm-client = "0.8.41"
1616
okio = "3.10.2"
1717
tree-sitter = "0.24.5"
1818
grpc = "1.71.0"

src/main/java/ee/carlrobert/codegpt/CodeGPTKeys.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.intellij.openapi.editor.EditorCustomElementRenderer;
44
import com.intellij.openapi.editor.Inlay;
55
import com.intellij.openapi.util.Key;
6+
import com.intellij.openapi.vfs.VirtualFile;
67
import ee.carlrobert.codegpt.predictions.CodeSuggestionDiffViewer;
78
import ee.carlrobert.llm.client.codegpt.CodeGPTUserDetails;
89

@@ -26,4 +27,6 @@ public class CodeGPTKeys {
2627
Key.create("codegpt.isPromptTextFieldDocument");
2728
public static final Key<CodeSuggestionDiffViewer> EDITOR_PREDICTION_DIFF_VIEWER =
2829
Key.create("codegpt.editorPredictionDiffViewer");
30+
public static final Key<VirtualFile> TOOLWINDOW_EDITOR_VIRTUAL_FILE =
31+
Key.create("proxyai.toolwindowEditorVirtualFile");
2932
}

src/main/java/ee/carlrobert/codegpt/Icons.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ public final class Icons {
1010
IconLoader.getIcon("/icons/codegpt-small.svg", Icons.class);
1111
public static final Icon CodeGPTModel =
1212
IconLoader.getIcon("/icons/codegpt-model.svg", Icons.class);
13+
public static final Icon CollapseAll =
14+
IconLoader.getIcon("/icons/collapseAll.svg", Icons.class);
15+
public static final Icon ExpandAll =
16+
IconLoader.getIcon("/icons/expandAll.svg", Icons.class);
1317
public static final Icon Anthropic = IconLoader.getIcon("/icons/anthropic.svg", Icons.class);
1418
public static final Icon Azure = IconLoader.getIcon("/icons/azure.svg", Icons.class);
1519
public static final Icon DeepSeek = IconLoader.getIcon("/icons/deepseek.png", Icons.class);

src/main/java/ee/carlrobert/codegpt/actions/editor/AskQuestionAction.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
import static java.lang.String.format;
44

55
import com.intellij.openapi.editor.Editor;
6-
import com.intellij.openapi.editor.impl.EditorImpl;
6+
import com.intellij.openapi.editor.ex.EditorEx;
77
import com.intellij.openapi.project.Project;
88
import com.intellij.openapi.ui.DialogWrapper;
99
import com.intellij.util.ui.FormBuilder;
1010
import com.intellij.util.ui.JBUI;
1111
import com.intellij.util.ui.UI;
1212
import ee.carlrobert.codegpt.Icons;
13+
import ee.carlrobert.codegpt.completions.CompletionRequestUtil;
1314
import ee.carlrobert.codegpt.conversations.message.Message;
1415
import ee.carlrobert.codegpt.toolwindow.chat.ChatToolWindowContentManager;
1516
import ee.carlrobert.codegpt.ui.UIUtil;
16-
import ee.carlrobert.codegpt.util.file.FileUtil;
1717
import java.awt.event.ActionEvent;
1818
import javax.swing.AbstractAction;
1919
import javax.swing.JComponent;
@@ -32,13 +32,12 @@ public class AskQuestionAction extends BaseEditorAction {
3232
@Override
3333
protected void actionPerformed(Project project, Editor editor, String selectedText) {
3434
if (selectedText != null && !selectedText.isEmpty()) {
35-
var fileExtension = FileUtil.getFileExtension(
36-
((EditorImpl) editor).getVirtualFile().getName());
3735
var dialog = new CustomPromptDialog(previousUserPrompt);
3836
if (dialog.showAndGet()) {
3937
previousUserPrompt = dialog.getUserPrompt();
40-
var message = new Message(
41-
format("%s%n```%s%n%s%n```", previousUserPrompt, fileExtension, selectedText));
38+
var formattedCode =
39+
CompletionRequestUtil.formatCode(selectedText, ((EditorEx)editor).getVirtualFile().getPath());
40+
var message = new Message(format("%s\n\n%s", previousUserPrompt, formattedCode));
4241
SwingUtilities.invokeLater(() ->
4342
project.getService(ChatToolWindowContentManager.class).sendMessage(message));
4443
}

src/main/java/ee/carlrobert/codegpt/actions/editor/EditorActionsUtil.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
package ee.carlrobert.codegpt.actions.editor;
22

3-
import static java.lang.String.format;
4-
53
import com.intellij.openapi.actionSystem.ActionManager;
64
import com.intellij.openapi.actionSystem.AnAction;
75
import com.intellij.openapi.actionSystem.DefaultActionGroup;
86
import com.intellij.openapi.application.ApplicationManager;
97
import com.intellij.openapi.editor.Editor;
10-
import com.intellij.openapi.editor.impl.EditorImpl;
8+
import com.intellij.openapi.editor.ex.EditorEx;
119
import com.intellij.openapi.extensions.PluginId;
1210
import com.intellij.openapi.project.Project;
11+
import ee.carlrobert.codegpt.completions.CompletionRequestUtil;
1312
import ee.carlrobert.codegpt.conversations.message.Message;
1413
import ee.carlrobert.codegpt.settings.prompts.PromptsSettings;
1514
import ee.carlrobert.codegpt.toolwindow.chat.ChatToolWindowContentManager;
16-
import ee.carlrobert.codegpt.util.file.FileUtil;
1715
import java.util.LinkedHashMap;
1816
import java.util.Map;
1917
import org.apache.commons.text.CaseUtils;
@@ -47,14 +45,13 @@ protected void actionPerformed(Project project, Editor editor, String selectedTe
4745
project.getService(ChatToolWindowContentManager.class);
4846
toolWindowContentManager.getToolWindow().show();
4947

50-
var fileExtension = FileUtil.getFileExtension(
51-
((EditorImpl) editor).getVirtualFile().getName());
5248
var prompt =
5349
promptDetails.getInstructions() == null ? "" : promptDetails.getInstructions();
54-
var message = new Message(prompt.replace(
55-
"{SELECTION}",
56-
format("%n```%s%n%s%n```", fileExtension, selectedText)));
57-
toolWindowContentManager.sendMessage(message);
50+
var formattedCode = CompletionRequestUtil.formatCode(
51+
selectedText,
52+
((EditorEx) editor).getVirtualFile().getPath());
53+
toolWindowContentManager.sendMessage(
54+
new Message(prompt.replace("{SELECTION}", formattedCode)));
5855
}
5956
};
6057
group.add(action);

src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package ee.carlrobert.codegpt.toolwindow.chat;
22

33
import static ee.carlrobert.codegpt.ui.UIUtil.createScrollPaneWithSmartScroller;
4-
import static java.lang.String.format;
54

65
import com.intellij.openapi.Disposable;
76
import com.intellij.openapi.application.ApplicationManager;
87
import com.intellij.openapi.diagnostic.Logger;
98
import com.intellij.openapi.editor.SelectionModel;
10-
import com.intellij.openapi.editor.impl.EditorImpl;
9+
import com.intellij.openapi.editor.ex.EditorEx;
1110
import com.intellij.openapi.project.Project;
1211
import com.intellij.openapi.vfs.VirtualFile;
1312
import com.intellij.ui.JBColor;
@@ -17,6 +16,7 @@
1716
import ee.carlrobert.codegpt.actions.ActionType;
1817
import ee.carlrobert.codegpt.completions.ChatCompletionParameters;
1918
import ee.carlrobert.codegpt.completions.CompletionRequestService;
19+
import ee.carlrobert.codegpt.completions.CompletionRequestUtil;
2020
import ee.carlrobert.codegpt.completions.ConversationType;
2121
import ee.carlrobert.codegpt.completions.ToolwindowChatCompletionRequestHandler;
2222
import ee.carlrobert.codegpt.conversations.Conversation;
@@ -48,7 +48,6 @@
4848
import ee.carlrobert.codegpt.ui.textarea.header.tag.TagManager;
4949
import ee.carlrobert.codegpt.util.EditorUtil;
5050
import ee.carlrobert.codegpt.util.coroutines.CoroutineDispatchers;
51-
import ee.carlrobert.codegpt.util.file.FileUtil;
5251
import git4idea.GitCommit;
5352
import java.awt.BorderLayout;
5453
import java.util.HashSet;
@@ -425,7 +424,7 @@ private JPanel createUserPromptPanel() {
425424

426425
private JComponent getLandingView() {
427426
return new ChatToolWindowLandingPanel((action, locationOnScreen) -> {
428-
var editor = EditorUtil.getSelectedEditor(project);
427+
var editor = (EditorEx) EditorUtil.getSelectedEditor(project);
429428
if (editor == null || !editor.getSelectionModel().hasSelection()) {
430429
OverlayUtil.showWarningBalloon(
431430
editor == null ? "Unable to locate a selected editor"
@@ -434,11 +433,10 @@ private JComponent getLandingView() {
434433
return Unit.INSTANCE;
435434
}
436435

437-
var fileExtension = FileUtil.getFileExtension(
438-
((EditorImpl) editor).getVirtualFile().getName());
439-
var message = new Message(action.getPrompt().replace(
440-
"{SELECTION}",
441-
format("%n```%s%n%s%n```", fileExtension, editor.getSelectionModel().getSelectedText())));
436+
var formattedCode = CompletionRequestUtil.formatCode(
437+
editor.getSelectionModel().getSelectedText(),
438+
editor.getVirtualFile().getPath());
439+
var message = new Message(action.getPrompt().replace("{SELECTION}", formattedCode));
442440
sendMessage(message, ConversationType.DEFAULT);
443441
return Unit.INSTANCE;
444442
});

src/main/java/ee/carlrobert/codegpt/toolwindow/chat/StreamParser.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

src/main/java/ee/carlrobert/codegpt/toolwindow/chat/StreamResponseType.java

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)