mirror of
https://github.com/carlrobertoh/ProxyAI.git
synced 2026-05-19 16:28:46 +00:00
Inline Autocompletion Pt.2 (#333)
* Add first draft of inline code completion with mock text * Adds InsertInlineTextAction for inserting autocomplete suggestion with tab - Changed to disable suggestions when text is selected - Adds and removes the insert action based on when it shows the inlay hint * Request inline code completion * Move inline completion prompt into txt file * Add inline completion settings to ConfigurationState * Fix code style * Use EditorTrackerListener instead of EditorFactoryListener to enable inline completion * Code completion requests synchronously without SSE * Use LlamaClient.getInfill() for inline code completion * support inlay block element rendering, clean up code * Use only enclosed Method or Class contents for code completion if possible * Refactor extracting PsiElement contents in code completion * bump llm-client * fix completion call from triggering on EDT, force method params to be nonnull by default * refactor request building, decrease delay value * Trigger code completion if cursor is not inside a word * Improve inlay rendering * Support cancellable infill requests * add statusbar widget, disable completions by default * Show error notification if code completion failed * Truely disable/enable EditorInlayHandler when completion is turned off/on * Add CodeCompletionEnabledListener Topic to control enabling/disabling code-completion * Add progress indicator for code-completion with option to cancel * Add CodeCompletionServiceTest + refactor inlay ElementRenderers * several improvements - replace timer implementation with call debouncing - use OpenAI /v1/completions API for completions - code refactoring * trigger progress indicator only for llama completions * fix tests --------- Co-authored-by: James Higgins <james.isaac.higgins@gmail.com> Co-authored-by: Carl-Robert Linnupuu <carlrobertoh@gmail.com>
This commit is contained in:
parent
390d8cdd5e
commit
7387cf4536
41 changed files with 1461 additions and 21 deletions
|
|
@ -0,0 +1,51 @@
|
|||
package ee.carlrobert.codegpt.codecompletions;
|
||||
|
||||
import static ee.carlrobert.codegpt.CodeGPTKeys.MULTI_LINE_INLAY;
|
||||
import static ee.carlrobert.codegpt.CodeGPTKeys.SINGLE_LINE_INLAY;
|
||||
|
||||
import com.intellij.openapi.actionSystem.ActionManager;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.components.Service;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorCustomElementRenderer;
|
||||
import com.intellij.openapi.editor.Inlay;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.TextEditor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
|
||||
@Service
|
||||
public final class CodeGPTEditorManager {
|
||||
|
||||
private CodeGPTEditorManager() {
|
||||
}
|
||||
|
||||
public static CodeGPTEditorManager getInstance() {
|
||||
return ApplicationManager.getApplication().getService(CodeGPTEditorManager.class);
|
||||
}
|
||||
|
||||
public void disposeAllInlays(Project project) {
|
||||
var allFileEditors = FileEditorManager.getInstance(project).getAllEditors();
|
||||
for (FileEditor fileEditor : allFileEditors) {
|
||||
if (fileEditor instanceof TextEditor) {
|
||||
disposeEditorInlays(((TextEditor) fileEditor).getEditor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void disposeEditorInlays(Editor editor) {
|
||||
ActionManager.getInstance().unregisterAction(CodeCompletionService.APPLY_INLAY_ACTION_ID);
|
||||
disposeInlay(editor, SINGLE_LINE_INLAY);
|
||||
disposeInlay(editor, MULTI_LINE_INLAY);
|
||||
}
|
||||
|
||||
private void disposeInlay(Editor editor, Key<Inlay<EditorCustomElementRenderer>> inlayKey) {
|
||||
Inlay<EditorCustomElementRenderer> inlay = editor.getUserData(inlayKey);
|
||||
if (inlay != null) {
|
||||
WriteCommandAction.runWriteCommandAction(editor.getProject(), inlay::dispose);
|
||||
editor.putUserData(inlayKey, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue