Completions order for non-java context. Bean completions score.

This commit is contained in:
aboyko
2025-03-14 16:06:42 -04:00
parent e906ad9991
commit ad0c208ea1
11 changed files with 64 additions and 46 deletions

View File

@@ -16,6 +16,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.commons.languageserver.util.LanguageSpecific;
import org.springframework.ide.vscode.commons.util.Assert;
import org.springframework.ide.vscode.commons.util.text.IDocument;
import org.springframework.ide.vscode.commons.util.text.LanguageId;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
@@ -78,5 +79,19 @@ public class CompositeCompletionEngine implements ICompletionEngine {
return new InternalCompletionList(completions.build(), isIncomplete);
}
};
@Override
public boolean keepCompletionsOrder(IDocument doc) {
Collection<ICompletionEngine> engines = subEngines.get(doc.getLanguageId());
if (engines != null) {
for (ICompletionEngine e : engines) {
if (e.keepCompletionsOrder(doc)) {
return true;
}
}
}
return false;
}
}

View File

@@ -10,6 +10,7 @@
*******************************************************************************/
package org.springframework.ide.vscode.commons.languageserver.completion;
import org.springframework.ide.vscode.commons.util.text.IDocument;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
/**
@@ -19,4 +20,6 @@ public interface ICompletionEngine {
InternalCompletionList getCompletions(TextDocument document, int offset) throws Exception;
default boolean keepCompletionsOrder(IDocument doc) { return false; };
}

View File

@@ -225,7 +225,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine {
boolean isIncomplete = rawCompletionList.isIncomplete();
List<CompletionItem> items = new ArrayList<>(completions.size());
SortKeys sortkeys = new SortKeys();
Optional<SortKeys> sortkeysOpt = engine.keepCompletionsOrder(doc) ? Optional.of(new SortKeys()) : Optional.empty();
int count = 0;
for (ICompletionProposal c : completions) {
@@ -237,7 +237,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine {
break;
}
try {
items.add(adaptItem(doc, c, sortkeys));
items.add(adaptItem(doc, c, sortkeysOpt));
} catch (Exception e) {
log.error("error computing completion", e);
}
@@ -274,11 +274,11 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine {
return SimpleTextDocumentService.NO_COMPLETIONS;
}
private CompletionItem adaptItem(TextDocument doc, ICompletionProposal completion, SortKeys sortkeys) throws Exception {
private CompletionItem adaptItem(TextDocument doc, ICompletionProposal completion, Optional<SortKeys> sortkeysOpt) throws Exception {
CompletionItem item = new CompletionItem();
item.setLabel(completion.getLabel());
item.setKind(completion.getKind());
item.setSortText(sortkeys.next());
sortkeysOpt.ifPresent(sortkeys -> item.setSortText(sortkeys.next()));
item.setFilterText(completion.getFilterText());
item.setInsertTextMode(InsertTextMode.AsIs);
item.setLabelDetails(completion.getLabelDetails());