mirror of
https://github.com/carlrobertoh/ProxyAI.git
synced 2026-05-11 13:10:50 +00:00
feat: support name suggestions for other languages (closes #615)
This commit is contained in:
parent
4ebe35260c
commit
ed0432b3cf
3 changed files with 51 additions and 7 deletions
|
|
@ -24,4 +24,6 @@ public class CodeGPTKeys {
|
|||
Key.create("codegpt.editorCompletionLines");
|
||||
public static final Key<Boolean> IS_FETCHING_COMPLETION =
|
||||
Key.create("codegpt.isFetchingCompletion");
|
||||
public static final Key<Boolean> IS_PROMPT_TEXT_FIELD_DOCUMENT =
|
||||
Key.create("codegpt.isPromptTextFieldDocument");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package ee.carlrobert.codegpt.completions;
|
||||
|
||||
import static ee.carlrobert.codegpt.CodeGPTKeys.IS_PROMPT_TEXT_FIELD_DOCUMENT;
|
||||
|
||||
import com.intellij.codeInsight.completion.PrefixMatcher;
|
||||
import com.intellij.codeInsight.lookup.Lookup;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
|
|
@ -7,20 +9,31 @@ import com.intellij.codeInsight.lookup.LookupManagerListener;
|
|||
import com.intellij.codeInsight.lookup.impl.LookupImpl;
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import ee.carlrobert.codegpt.Icons;
|
||||
import ee.carlrobert.codegpt.settings.configuration.ConfigurationSettings;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class MethodNameLookupListener implements LookupManagerListener {
|
||||
|
||||
private static final Logger LOG = Logger.getInstance(MethodNameLookupListener.class);
|
||||
|
||||
@Override
|
||||
public void activeLookupChanged(@Nullable Lookup oldLookup, @Nullable Lookup newLookup) {
|
||||
if (!ConfigurationSettings.getState().getMethodNameGenerationEnabled()
|
||||
|| !CompletionRequestService.isRequestAllowed()
|
||||
|| !(newLookup instanceof LookupImpl lookup)) {
|
||||
if (!(newLookup instanceof LookupImpl lookup)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Boolean isPromptTextFieldDocument = IS_PROMPT_TEXT_FIELD_DOCUMENT.get(
|
||||
lookup.getEditor().getDocument());
|
||||
if ((isPromptTextFieldDocument != null && isPromptTextFieldDocument)
|
||||
|| !ConfigurationSettings.getState().getMethodNameGenerationEnabled()
|
||||
|| !CompletionRequestService.isRequestAllowed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -30,7 +43,7 @@ public class MethodNameLookupListener implements LookupManagerListener {
|
|||
.ifPresent(context ->
|
||||
application.runReadAction(() -> {
|
||||
var type = PsiUtilCore.getElementType(context);
|
||||
if ("METHOD".equals(type.toString())) {
|
||||
if (PSIMethodMapping.contains(type)) {
|
||||
var selection = context.getText();
|
||||
application.executeOnPooledThread(() ->
|
||||
addCompletionLookupValues(lookup, application, selection));
|
||||
|
|
@ -45,13 +58,40 @@ public class MethodNameLookupListener implements LookupManagerListener {
|
|||
CompletionRequestService.getInstance().getLookupCompletion(prompt)
|
||||
.ifPresent(response -> {
|
||||
for (var value : response.split(",")) {
|
||||
application.runReadAction(() -> {
|
||||
application.invokeLater(() -> application.runReadAction(() -> {
|
||||
lookup.addItem(
|
||||
LookupElementBuilder.create(value.trim()).withIcon(Icons.Sparkle),
|
||||
PrefixMatcher.ALWAYS_TRUE);
|
||||
application.invokeLater(() -> lookup.refreshUi(true, true));
|
||||
});
|
||||
lookup.refreshUi(true, true);
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private enum PSIMethodMapping {
|
||||
GO(List.of("FILE", "METHOD_DECLARATION|FUNCTION_DECLARATION")),
|
||||
JAVA(List.of("java.FILE", "METHOD")),
|
||||
PY(List.of("FILE", "Py:FUNCTION_DECLARATION")),
|
||||
JAVASCRIPT(List.of("JS:FUNCTION_DECLARATION", "JS:TYPESCRIPT_FUNCTION")),
|
||||
CS(List.of("FILE", "DUMMY_TYPE_DECLARATION", "DUMMY_BLOCK")),
|
||||
PHP(List.of("FILE", "Class method|function|Function")),
|
||||
KOTLIN(List.of("FUN")),
|
||||
DEFAULT(List.of("FILE", "METHOD_DECLARATION"));
|
||||
|
||||
private final List<String> types;
|
||||
|
||||
PSIMethodMapping(List<String> codes) {
|
||||
this.types = codes;
|
||||
}
|
||||
|
||||
public static boolean contains(IElementType type) {
|
||||
LOG.info("Trying to find method mapping for type: " + type.toString());
|
||||
for (var value : PSIMethodMapping.values()) {
|
||||
if (value.types.contains(type.toString())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import com.intellij.ui.EditorTextField
|
|||
import com.intellij.ui.JBColor
|
||||
import com.intellij.util.ui.JBUI
|
||||
import ee.carlrobert.codegpt.CodeGPTBundle
|
||||
import ee.carlrobert.codegpt.CodeGPTKeys.IS_PROMPT_TEXT_FIELD_DOCUMENT
|
||||
import ee.carlrobert.codegpt.ui.textarea.suggestion.SuggestionsPopupManager
|
||||
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.SuggestionActionItem
|
||||
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.SuggestionItem
|
||||
|
|
@ -49,6 +50,7 @@ class PromptTextField(
|
|||
background = JBColor.background()
|
||||
minimumSize = Dimension(100, 40)
|
||||
document.addDocumentListener(getDocumentListener(onTextChanged))
|
||||
IS_PROMPT_TEXT_FIELD_DOCUMENT.set(document, true)
|
||||
setPlaceholder(CodeGPTBundle.get("toolwindow.chat.textArea.emptyText"))
|
||||
IdeEventQueue.getInstance().addDispatcher(
|
||||
PromptTextFieldEventDispatcher(this, suggestionsPopupManager, appliedInlays) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue