diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/DocumentState.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/DocumentState.java index 4e092dead..00ea675f8 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/DocumentState.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/DocumentState.java @@ -81,7 +81,7 @@ public class DocumentState implements IDocumentState { public void delete(boolean grabCursor, final int start, final int end) throws BadLocationException { final int tStart = org2new.transform(start, Direction.AFTER); if (end>start) { // skip work for 'delete nothing' op - final int tEnd = org2new.transform(end, Direction.AFTER); + final int tEnd = org2new.transform(end, Direction.BEFORE); if (tEnd>tStart) { // skip work for 'delete nothing' op if (doc!=null) { doc.replace(tStart, tEnd-tStart, ""); diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/LspCompletionInterpreter.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/LspCompletionInterpreter.java index 6c230f100..3b23d7d16 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/LspCompletionInterpreter.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/LspCompletionInterpreter.java @@ -112,8 +112,8 @@ public class LspCompletionInterpreter implements IDocumentState { ImmutableList.Builder additionalEdits = ImmutableList.builder(); - resolveAdditionalEdit(beforeMainEditRegion, additionalEdits); - resolveAdditionalEdit(afterMainEditRegion, additionalEdits); + resolveAdditionalEdit(beforeMainEditRegion, additionalEdits, Direction.BEFORE); + resolveAdditionalEdit(afterMainEditRegion, additionalEdits, Direction.AFTER); item.setAdditionalTextEdits(additionalEdits.build()); @@ -123,15 +123,15 @@ public class LspCompletionInterpreter implements IDocumentState { } } - protected void resolveAdditionalEdit(DocumentRegion editRegion, ImmutableList.Builder builder) + protected void resolveAdditionalEdit(DocumentRegion editRegion, ImmutableList.Builder builder, Direction direction) throws BadLocationException { if (editRegion != null) { TextEdit edit = new TextEdit(); edit.setRange(originalDoc.toRange(editRegion)); OffsetTransformer org2New = docState.getOrg2New(); String newText = docState.getDocument().textBetween( - org2New.transform(editRegion.getStart(), Direction.BEFORE), - org2New.transform(editRegion.getEnd(), Direction.AFTER)); + org2New.transform(editRegion.getStart(), direction), + org2New.transform(editRegion.getEnd(), direction)); edit.setNewText(newText); builder.add(edit); } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index 967d830f8..41040b207 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -106,6 +106,18 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA private static final Scheduler RECONCILER_SCHEDULER = Schedulers.newSingle("Reconciler"); +// private static final List DEFAULT_TRIGGER_CHARS; +// +// static { +// ImmutableList.Builder builder = ImmutableList.builder(); +// for (char c = 'a'; c <= 'z'; c++) { +// String ch = ""+c; +// builder.add(ch); +// builder.add(ch.toUpperCase()); +// } +// DEFAULT_TRIGGER_CHARS = builder.build(); +// } + public final String EXTENSION_ID; private final String CODE_ACTION_COMMAND_ID; @@ -367,6 +379,7 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA c.setHoverProvider(true); CompletionOptions completionProvider = new CompletionOptions(); +// completionProvider.setTriggerCharacters(DEFAULT_TRIGGER_CHARS); completionProvider.setResolveProvider(hasLazyCompletionResolver()); c.setCompletionProvider(completionProvider); diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java index 6735c3d5b..d6c92daed 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java @@ -1488,6 +1488,20 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { ); } + @Test public void almostJumpyCompletion() throws Exception { + defaultTestData(); + + assertCompletion( + "server:\n" + + " address: bark\n" + + "port<*>\n" + , // ==> + "server:\n" + + " address: bark\n" + + " port: <*>\n" + ); + } + @Test public void testBooleanValueCompletion() throws Exception { defaultTestData(); assertCompletions(