Skip to content

Commit 1c4e422

Browse files
authored
Merge pull request #8 from devchat-ai/feat-diff
Feat: Implement Diff View
2 parents 8f7fb17 + a8a5f3f commit 1c4e422

1 file changed

Lines changed: 44 additions & 6 deletions

File tree

src/main/java/ai/devchat/devchat/handler/ViewDiffRequestHandler.java

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
package ai.devchat.devchat.handler;
22

3-
import ai.devchat.common.Log;
43
import ai.devchat.devchat.ActionHandler;
54
import ai.devchat.devchat.DevChatActionHandler;
65
import com.alibaba.fastjson.JSONObject;
7-
import com.intellij.psi.PsiFileFactory;
6+
import com.intellij.diff.DiffContentFactory;
7+
import com.intellij.diff.DiffManager;
8+
import com.intellij.diff.requests.SimpleDiffRequest;
9+
import com.intellij.openapi.application.ApplicationManager;
10+
import com.intellij.openapi.editor.Document;
11+
import com.intellij.openapi.editor.Editor;
12+
import com.intellij.openapi.editor.SelectionModel;
13+
import com.intellij.openapi.fileEditor.FileDocumentManager;
14+
import com.intellij.openapi.fileEditor.FileEditorManager;
15+
import com.intellij.openapi.fileTypes.FileType;
16+
import com.intellij.openapi.project.Project;
17+
import com.intellij.openapi.vfs.VirtualFile;
818

919
public class ViewDiffRequestHandler implements ActionHandler {
1020
private JSONObject metadata;
@@ -15,14 +25,42 @@ public ViewDiffRequestHandler(DevChatActionHandler devChatActionHandler) {
1525
this.devChatActionHandler = devChatActionHandler;
1626
}
1727

28+
1829
@Override
1930
public void executeAction() {
20-
Log.info("Handling view diff request");
21-
String callbackFunc = metadata.getString("callback");
2231
String diffContent = payload.getString("content");
32+
Project project = devChatActionHandler.getProject();
33+
34+
ApplicationManager.getApplication().invokeLater(() -> {
35+
Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
36+
if (editor == null) {
37+
// Handle the case when no editor is opened
38+
return;
39+
}
40+
Document document = editor.getDocument();
41+
VirtualFile file = FileDocumentManager.getInstance().getFile(document);
42+
if (file == null) {
43+
// Handle the case when no file corresponds to the document
44+
return;
45+
}
46+
47+
FileType fileType = file.getFileType();
48+
SelectionModel selectionModel = editor.getSelectionModel();
49+
String localContent = selectionModel.hasSelection()
50+
? selectionModel.getSelectedText()
51+
: document.getText();
52+
53+
DiffContentFactory contentFactory = DiffContentFactory.getInstance();
54+
SimpleDiffRequest diffRequest = new SimpleDiffRequest(
55+
"Code Diff",
56+
contentFactory.create(localContent, fileType),
57+
contentFactory.create(diffContent, fileType),
58+
"Current Code",
59+
"New Code"
60+
);
2361

24-
PsiFileFactory psiFileFactory = PsiFileFactory.getInstance(devChatActionHandler.getProject());
25-
// PsiFile psiFile = psiFileFactory.createFileFromText("yourFileName.java", , diffContent);
62+
DiffManager.getInstance().showDiff(project, diffRequest);
63+
});
2664
}
2765

2866
@Override

0 commit comments

Comments
 (0)