From 3d23ea24d5d1e3f419e9f453633de263d607e9fe Mon Sep 17 00:00:00 2001 From: Gaurav Gupta Date: Sat, 19 Oct 2024 14:05:17 +0530 Subject: [PATCH] Fixes auto completion for non-java files --- .../jeddict/ai/JeddictCompletionProvider.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/github/jeddict/ai/JeddictCompletionProvider.java b/src/main/java/io/github/jeddict/ai/JeddictCompletionProvider.java index fd3d979..95fed2f 100644 --- a/src/main/java/io/github/jeddict/ai/JeddictCompletionProvider.java +++ b/src/main/java/io/github/jeddict/ai/JeddictCompletionProvider.java @@ -273,14 +273,16 @@ private JeddictItem createItem(Snippet varName, String line, String lineTextBefo String snippetWOSpace = removeAllSpaces(varName.getSnippet()); String tlLine = trimLeadingSpaces(line); - String tlLineTextBeforeCaret = trimLeadingSpaces(lineTextBeforeCaret); + String tlLineTextBeforeCaret = trimLeadingSpaces(lineTextBeforeCaret); // Handle line and snippet first words safely String firstWordLine = ""; + String lastWordLine = ""; if (lineTextBeforeCaret != null && !lineTextBeforeCaret.trim().isEmpty()) { - String[] textSegments = lineTextBeforeCaret.trim().split("[^a-zA-Z0-9]+"); + String[] textSegments = lineTextBeforeCaret.trim().split("[^a-zA-Z0-9<]+"); if(textSegments.length > 0) { - firstWordLine = textSegments[0]; // Split by any non-alphanumeric character + firstWordLine = textSegments[0]; + lastWordLine = textSegments[textSegments.length - 1]; } } @@ -292,26 +294,30 @@ private JeddictItem createItem(Snippet varName, String line, String lineTextBefo } } + boolean midWordMatched = false; if (firstWordLine.equalsIgnoreCase(firstWordSnippet)) { newcaretOffset = newcaretOffset - tlLineTextBeforeCaret.length(); + } else if (snippetWOSpace.startsWith(lastWordLine)) { + midWordMatched = true; + newcaretOffset = newcaretOffset - lastWordLine.length(); } else if (snippetWOSpace.startsWith(removeAllSpaces(line))) { newcaretOffset = newcaretOffset - tlLine.length(); } else if (snippetWOSpace.startsWith(removeAllSpaces(lineTextBeforeCaret))) { newcaretOffset = newcaretOffset - tlLineTextBeforeCaret.length(); } + // for annotations if (tlLine != null && !tlLine.isEmpty() && tlLine.charAt(0) == '@' && snippetWOSpace != null && !snippetWOSpace.isEmpty() && snippetWOSpace.charAt(0) == '@') { newcaretOffset = newcaretOffset - tlLine.length(); } int caretToEndLength = -1; - if (javaToken.getId() == STRING_LITERAL && kind == Tree.Kind.STRING_LITERAL) { + if ((javaToken.getId() == STRING_LITERAL && kind == Tree.Kind.STRING_LITERAL) || midWordMatched) { } else if (newcaretOffset != caretOffset) { caretToEndLength = line.length() - lineTextBeforeCaret.length(); String textAfterCaret = doc.getText(caretOffset, caretToEndLength); caretToEndLength = trimTrailingSpaces(textAfterCaret).length(); } - System.out.println("varName.getSnippet(), "+ varName.getSnippet() + caretOffset + " " + newcaretOffset); JeddictItem var = new JeddictItem(null, null, varName.getSnippet(), varName.getDescription(), varName.getImports(), newcaretOffset, caretToEndLength, true, false, -1); return var; } @@ -489,13 +495,13 @@ && trimLeadingSpaces(line).charAt(0) == '@') || kind == Tree.Kind.ANNOTATION) { } } } else { - String currentLine = getLineText(doc, caretOffset); + String line = getLineText(doc, caretOffset); + String lineTextBeforeCaret = getLineTextBeforeCaret(doc, caretOffset); FileObject fileObject = getFileObjectFromEditor(doc); String updateddoc = insertPlaceholderAtCaret(doc, caretOffset, "${SUGGEST_CODE_LIST}"); - List sugs = getJeddictChatModel(fileObject).suggestNextLineCode(updateddoc, currentLine, mimeType); + List sugs = getJeddictChatModel(fileObject).suggestNextLineCode(updateddoc, line, mimeType); for (Snippet varName : sugs) { - JeddictItem var = new JeddictItem(null, null, varName.getSnippet(),"", Collections.emptyList(), caretOffset, true, false, -1); - resultSet.addItem(var); + resultSet.addItem(createItem(varName, line, lineTextBeforeCaret, javaToken, null, doc)); } } } catch (Exception e) {