Progress to fixing a 'almost jumpy' completion

Still not working in vscode though because a presumed bug
in vscode magic indent handler.
This commit is contained in:
Kris De Volder
2018-06-07 14:36:55 -07:00
parent 26f0c031fa
commit e26c4907d3
4 changed files with 33 additions and 6 deletions

View File

@@ -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, "");

View File

@@ -112,8 +112,8 @@ public class LspCompletionInterpreter implements IDocumentState {
ImmutableList.Builder<TextEdit> 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<TextEdit> builder)
protected void resolveAdditionalEdit(DocumentRegion editRegion, ImmutableList.Builder<TextEdit> 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);
}

View File

@@ -106,6 +106,18 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA
private static final Scheduler RECONCILER_SCHEDULER = Schedulers.newSingle("Reconciler");
// private static final List<String> DEFAULT_TRIGGER_CHARS;
//
// static {
// ImmutableList.Builder<String> 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);

View File

@@ -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(